From 8e2bdf10d99d130146fb495e8ba95244eac2e2bb Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 12:51:51 -0500 Subject: [PATCH 001/230] `apollo-utilities` local state graphql transformation changes Includes updates to the `apollo-utilities` package to better accommodate Apollo Client's local state handling capabilities. - Adds a new transform `buildQueryFromSelectionSet' function to help construct a GraphQL Query from a Mutation selection set. - Adds a new transform `removeClientSetsFromDocument` function to prune `@client` selection sets and fields from GraphQL documents'. - Adds a new directive based `hasClientExports` function to see if a GraphQL document is using a `@client @export` directive combination. - Adds a new `mergeDeep` utility function for deep cloning. --- packages/apollo-utilities/package.json | 5 +- .../src/__tests__/transform.ts | 37 ++ packages/apollo-utilities/src/directives.ts | 12 +- packages/apollo-utilities/src/getFromAST.ts | 2 +- packages/apollo-utilities/src/index.ts | 1 + packages/apollo-utilities/src/transform.ts | 373 +++++++++++------- .../apollo-utilities/src/util/mergeDeep.ts | 21 + 7 files changed, 305 insertions(+), 146 deletions(-) create mode 100644 packages/apollo-utilities/src/util/mergeDeep.ts diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index e153b14992c..4307d4de254 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.1.2", + "version": "1.1.0-alpha.10", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ @@ -38,6 +38,9 @@ "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify" }, + "peerDependencies": { + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" + }, "dependencies": { "fast-json-stable-stringify": "^2.0.0", "tslib": "^1.9.3" diff --git a/packages/apollo-utilities/src/__tests__/transform.ts b/packages/apollo-utilities/src/__tests__/transform.ts index 84dc0674991..26835f4cc4f 100644 --- a/packages/apollo-utilities/src/__tests__/transform.ts +++ b/packages/apollo-utilities/src/__tests__/transform.ts @@ -12,6 +12,7 @@ import { removeConnectionDirectiveFromDocument, removeArgumentsFromDocument, removeFragmentSpreadFromDocument, + removeClientSetsFromDocument, } from '../transform'; import { getQueryDefinition } from '../getFromAST'; @@ -1203,3 +1204,39 @@ describe('getDirectivesFromDocument', () => { }); }); }); + +describe('removeClientSetsFromDocument', () => { + it('should remove @client fields from document', () => { + const query = gql` + query Author { + name + isLoggedIn @client + } + `; + + const expected = gql` + query Author { + name + } + `; + const doc = removeClientSetsFromDocument(query); + expect(print(doc)).toBe(print(expected)); + }); + + it('should remove @client fields from fragments', () => { + const query = gql` + fragment authorInfo on Author { + name + isLoggedIn @client + } + `; + + const expected = gql` + fragment authorInfo on Author { + name + } + `; + const doc = removeClientSetsFromDocument(query); + expect(print(doc)).toBe(print(expected)); + }); +}); diff --git a/packages/apollo-utilities/src/directives.ts b/packages/apollo-utilities/src/directives.ts index 60235fcdcd3..94e99dfa444 100644 --- a/packages/apollo-utilities/src/directives.ts +++ b/packages/apollo-utilities/src/directives.ts @@ -1,5 +1,5 @@ -// Provides the methods that allow QueryManager to handle -// the `skip` and `include` directives within GraphQL. +// Provides the methods that allow QueryManager to handle the `skip` and +// `include` directives within GraphQL. import { FieldNode, SelectionNode, @@ -113,3 +113,11 @@ export function hasDirectives(names: string[], doc: DocumentNode) { (name: string) => names.indexOf(name) > -1, ); } + +export function hasClientExports(document: DocumentNode) { + return ( + document && + hasDirectives(['client'], document) && + hasDirectives(['export'], document) + ); +} diff --git a/packages/apollo-utilities/src/getFromAST.ts b/packages/apollo-utilities/src/getFromAST.ts index 1567e1bd35a..4fe53125778 100644 --- a/packages/apollo-utilities/src/getFromAST.ts +++ b/packages/apollo-utilities/src/getFromAST.ts @@ -28,7 +28,7 @@ export function getMutationDefinition( // Checks the document for errors and throws an exception if there is an error. export function checkDocument(doc: DocumentNode) { - if (doc.kind !== 'Document') { + if (!doc || doc.kind !== 'Document') { throw new Error(`Expecting a parsed GraphQL document. Perhaps you need to wrap the query \ string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`); } diff --git a/packages/apollo-utilities/src/index.ts b/packages/apollo-utilities/src/index.ts index 31a7ba940b3..605675b41f1 100644 --- a/packages/apollo-utilities/src/index.ts +++ b/packages/apollo-utilities/src/index.ts @@ -11,3 +11,4 @@ export * from './util/isEqual'; export * from './util/maybeDeepFreeze'; export * from './util/warnOnce'; export * from './util/stripSymbols'; +export * from './util/mergeDeep'; diff --git a/packages/apollo-utilities/src/transform.ts b/packages/apollo-utilities/src/transform.ts index cbde9ccca9b..79210d19860 100644 --- a/packages/apollo-utilities/src/transform.ts +++ b/packages/apollo-utilities/src/transform.ts @@ -15,10 +15,12 @@ import { visit } from 'graphql/language/visitor'; import { checkDocument, - getOperationDefinitionOrDie, + getOperationDefinition, + getFragmentDefinition, getFragmentDefinitions, createFragmentMap, FragmentMap, + getMainDefinition, } from './getFromAST'; import { filterInPlace } from './util/filterInPlace'; @@ -66,11 +68,11 @@ function isEmpty( function nullIfDocIsEmpty(doc: DocumentNode) { return isEmpty( - getOperationDefinitionOrDie(doc), - createFragmentMap( - getFragmentDefinitions(doc) - ), - ) ? null : doc; + getOperationDefinition(doc) || getFragmentDefinition(doc), + createFragmentMap(getFragmentDefinitions(doc)), + ) + ? null + : doc; } function getDirectiveMatcher( @@ -95,97 +97,105 @@ export function removeDirectivesFromDocument( const fragmentSpreadsInUse: Record = Object.create(null); let fragmentSpreadsToRemove: RemoveFragmentSpreadConfig[] = []; - let modifiedDoc = nullIfDocIsEmpty(visit(doc, { - Variable: { - enter(node, _key, parent) { - // Store each variable that's referenced as part of an argument - // (excluding operation definition variables), so we know which - // variables are being used. If we later want to remove a variable - // we'll fist check to see if it's being used, before continuing with - // the removal. - if ((parent as VariableDefinitionNode).kind !== 'VariableDefinition') { - variablesInUse[node.name.value] = true; - } + let modifiedDoc = nullIfDocIsEmpty( + visit(doc, { + Variable: { + enter(node, _key, parent) { + // Store each variable that's referenced as part of an argument + // (excluding operation definition variables), so we know which + // variables are being used. If we later want to remove a variable + // we'll fist check to see if it's being used, before continuing with + // the removal. + if ( + (parent as VariableDefinitionNode).kind !== 'VariableDefinition' + ) { + variablesInUse[node.name.value] = true; + } + }, }, - }, - Field: { - enter(node) { - // If `remove` is set to true for a directive, and a directive match - // is found for a field, remove the field as well. - const shouldRemoveField = directives.some( - directive => directive.remove, - ); + Field: { + enter(node) { + if (directives && node.directives) { + // If `remove` is set to true for a directive, and a directive match + // is found for a field, remove the field as well. + const shouldRemoveField = directives.some( + directive => directive.remove, + ); - if ( - shouldRemoveField && - node.directives && - node.directives.some(getDirectiveMatcher(directives)) - ) { - if (node.arguments) { - // Store field argument variables so they can be removed - // from the operation definition. - node.arguments.forEach(arg => { - if (arg.value.kind === 'Variable') { - variablesToRemove.push({ - name: (arg.value as VariableNode).name.value, + if ( + shouldRemoveField && + node.directives && + node.directives.some(getDirectiveMatcher(directives)) + ) { + if (node.arguments) { + // Store field argument variables so they can be removed + // from the operation definition. + node.arguments.forEach(arg => { + if (arg.value.kind === 'Variable') { + variablesToRemove.push({ + name: (arg.value as VariableNode).name.value, + }); + } }); } - }); - } - if (node.selectionSet) { - // Store fragment spread names so they can be removed from the - // docuemnt. - getAllFragmentSpreadsFromSelectionSet(node.selectionSet).forEach( - frag => { - fragmentSpreadsToRemove.push({ - name: frag.name.value, - }); - }, - ); - } + if (node.selectionSet) { + // Store fragment spread names so they can be removed from the + // docuemnt. + getAllFragmentSpreadsFromSelectionSet(node.selectionSet).forEach( + frag => { + fragmentSpreadsToRemove.push({ + name: frag.name.value, + }); + }, + ); + } - // Remove the field. - return null; - } + // Remove the field. + return null; + } + } + }, }, - }, - FragmentSpread: { - enter(node) { - // Keep track of referenced fragment spreads. This is used to - // determine if top level fragment definitions should be removed. - fragmentSpreadsInUse[node.name.value] = true; + FragmentSpread: { + enter(node) { + // Keep track of referenced fragment spreads. This is used to + // determine if top level fragment definitions should be removed. + fragmentSpreadsInUse[node.name.value] = true; + }, }, - }, - Directive: { - enter(node) { - // If a matching directive is found, remove it. - if (getDirectiveMatcher(directives)(node)) { - return null; - } + Directive: { + enter(node) { + // If a matching directive is found, remove it. + if (getDirectiveMatcher(directives)(node)) { + return null; + } + }, }, - }, - })); + }), + ); // If we've removed fields with arguments, make sure the associated // variables are also removed from the rest of the document, as long as they // aren't being used elsewhere. - if (modifiedDoc && - filterInPlace(variablesToRemove, v => !variablesInUse[v.name]).length) { + if ( + modifiedDoc && + filterInPlace(variablesToRemove, v => !variablesInUse[v.name]).length + ) { modifiedDoc = removeArgumentsFromDocument(variablesToRemove, modifiedDoc); } // If we've removed selection sets with fragment spreads, make sure the // associated fragment definitions are also removed from the rest of the // document, as long as they aren't being used elsewhere. - if (modifiedDoc && - filterInPlace( - fragmentSpreadsToRemove, - fs => !fragmentSpreadsInUse[fs.name], - ).length) { + if ( + modifiedDoc && + filterInPlace(fragmentSpreadsToRemove, fs => !fragmentSpreadsInUse[fs.name]) + .length + ) { modifiedDoc = removeFragmentSpreadFromDocument( fragmentSpreadsToRemove, modifiedDoc, @@ -308,36 +318,38 @@ export function getDirectivesFromDocument( let parentPath: string; - return nullIfDocIsEmpty(visit(doc, { - SelectionSet: { - enter(node, _key, _parent, path) { - const currentPath = path.join('-'); - - if ( - !parentPath || - currentPath === parentPath || - !currentPath.startsWith(parentPath) - ) { - if (node.selections) { - const selectionsWithDirectives = node.selections.filter(selection => - hasDirectivesInSelection(directives, selection), - ); + return nullIfDocIsEmpty( + visit(doc, { + SelectionSet: { + enter(node, _key, _parent, path) { + const currentPath = path.join('-'); + + if ( + !parentPath || + currentPath === parentPath || + !currentPath.startsWith(parentPath) + ) { + if (node.selections) { + const selectionsWithDirectives = node.selections.filter( + selection => hasDirectivesInSelection(directives, selection), + ); + + if (hasDirectivesInSelectionSet(directives, node, false)) { + parentPath = currentPath; + } - if (hasDirectivesInSelectionSet(directives, node, false)) { - parentPath = currentPath; + return { + ...node, + selections: selectionsWithDirectives, + }; + } else { + return null; } - - return { - ...node, - selections: selectionsWithDirectives, - }; - } else { - return null; } - } + }, }, - }, - })); + }), + ); } function getArgumentMatcher(config: RemoveArgumentsConfig[]) { @@ -359,48 +371,51 @@ export function removeArgumentsFromDocument( ): DocumentNode { const argMatcher = getArgumentMatcher(config); - return nullIfDocIsEmpty(visit(doc, { - OperationDefinition: { - enter(node) { - return { - ...node, - // Remove matching top level variables definitions. - variableDefinitions: node.variableDefinitions.filter( - varDef => !config.some(arg => arg.name === varDef.variable.name.value), - ), - }; + return nullIfDocIsEmpty( + visit(doc, { + OperationDefinition: { + enter(node) { + return { + ...node, + // Remove matching top level variables definitions. + variableDefinitions: node.variableDefinitions.filter( + varDef => + !config.some(arg => arg.name === varDef.variable.name.value), + ), + }; + }, }, - }, - Field: { - enter(node) { - // If `remove` is set to true for an argument, and an argument match - // is found for a field, remove the field as well. - const shouldRemoveField = config.some(argConfig => argConfig.remove); - - if (shouldRemoveField) { - let argMatchCount = 0; - node.arguments.forEach(arg => { - if (argMatcher(arg)) { - argMatchCount += 1; + Field: { + enter(node) { + // If `remove` is set to true for an argument, and an argument match + // is found for a field, remove the field as well. + const shouldRemoveField = config.some(argConfig => argConfig.remove); + + if (shouldRemoveField) { + let argMatchCount = 0; + node.arguments.forEach(arg => { + if (argMatcher(arg)) { + argMatchCount += 1; + } + }); + if (argMatchCount === 1) { + return null; } - }); - if (argMatchCount === 1) { - return null; } - } + }, }, - }, - Argument: { - enter(node) { - // Remove all matching arguments. - if (argMatcher(node)) { - return null; - } + Argument: { + enter(node) { + // Remove all matching arguments. + if (argMatcher(node)) { + return null; + } + }, }, - }, - })); + }), + ); } export function removeFragmentSpreadFromDocument( @@ -429,12 +444,13 @@ function getAllFragmentSpreadsFromSelectionSet( const allFragments: FragmentSpreadNode[] = []; selectionSet.selections.forEach(selection => { - if ((selection.kind === 'Field' || - selection.kind === 'InlineFragment') && - selection.selectionSet) { - getAllFragmentSpreadsFromSelectionSet( - selection.selectionSet - ).forEach(frag => allFragments.push(frag)); + if ( + (selection.kind === 'Field' || selection.kind === 'InlineFragment') && + selection.selectionSet + ) { + getAllFragmentSpreadsFromSelectionSet(selection.selectionSet).forEach( + frag => allFragments.push(frag), + ); } else if (selection.kind === 'FragmentSpread') { allFragments.push(selection); } @@ -442,3 +458,76 @@ function getAllFragmentSpreadsFromSelectionSet( return allFragments; } + +// If the incoming document is a query, return it as is. Otherwise, build a +// new document containing a query operation based on the selection set +// of the previous main operation. +export function buildQueryFromSelectionSet( + document: DocumentNode, +): DocumentNode { + const definition = getMainDefinition(document); + const definitionOperation = (definition).operation; + + if (definitionOperation === 'query') { + // Already a query, so return the existing document. + return document; + } + + // Build a new query using the selection set of the main operation. + const modifiedDoc = visit(document, { + OperationDefinition: { + enter(node) { + return { + ...node, + operation: 'query', + }; + }, + }, + }); + return modifiedDoc; +} + +// Remove fields / selection sets that include an @client directive. +export function removeClientSetsFromDocument( + document: DocumentNode, +): DocumentNode | null { + checkDocument(document); + + let modifiedDoc = removeDirectivesFromDocument( + [ + { + test: (directive: DirectiveNode) => directive.name.value === 'client', + remove: true, + }, + ], + document, + ); + + // After a fragment definition has had its @client related document + // sets removed, if the only field it has left is a __typename field, + // remove the entire fragment operation to prevent it from being fired + // on the server. + if (modifiedDoc) { + modifiedDoc = visit(modifiedDoc, { + FragmentDefinition: { + enter(node) { + if (node.selectionSet) { + const isTypenameOnly = node.selectionSet.selections.every( + selection => { + return ( + selection.kind === 'Field' && + (selection as FieldNode).name.value === '__typename' + ); + }, + ); + if (isTypenameOnly) { + return null; + } + } + }, + }, + }); + } + + return modifiedDoc; +} diff --git a/packages/apollo-utilities/src/util/mergeDeep.ts b/packages/apollo-utilities/src/util/mergeDeep.ts new file mode 100644 index 00000000000..4e716a21446 --- /dev/null +++ b/packages/apollo-utilities/src/util/mergeDeep.ts @@ -0,0 +1,21 @@ +function isObject(item: any): boolean { + return item && typeof item === 'object' && !Array.isArray(item); +} + +export function mergeDeep(target: any, source: any): any { + let output = Object.assign({}, target); + if (isObject(target) && isObject(source)) { + Object.keys(source).forEach(key => { + if (isObject(source[key])) { + if (!(key in target)) { + Object.assign(output, { [key]: source[key] }); + } else { + output[key] = mergeDeep(target[key], source[key]); + } + } else { + Object.assign(output, { [key]: source[key] }); + } + }); + } + return output; +} From b99cb6a7b6a79899dee4c28b4d0904f7179d8cda Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:06:34 -0500 Subject: [PATCH 002/230] Helper function for capitalizing strings --- packages/apollo-client/src/util/capitalizeFirstLetter.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/apollo-client/src/util/capitalizeFirstLetter.ts diff --git a/packages/apollo-client/src/util/capitalizeFirstLetter.ts b/packages/apollo-client/src/util/capitalizeFirstLetter.ts new file mode 100644 index 00000000000..0eab4968185 --- /dev/null +++ b/packages/apollo-client/src/util/capitalizeFirstLetter.ts @@ -0,0 +1,3 @@ +export function capitalizeFirstLetter(str: string) { + return str.charAt(0).toUpperCase() + str.slice(1); +} From caa6408bc5cdf8f7d5499a8212388122bacab34a Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:10:06 -0500 Subject: [PATCH 003/230] Disable `Mising field` warnings when using the `@client` directive When using the `@client` directive, it might be desirable in some cases to want to write a selection set to the store, without having all of the selection set values available. This is because the `@client` field values might have already been written to the cache separately (e.g. via Apollo Cache's `writeData` capabilities). Because of this, we'll skip the missing field warning for fields with `@client` directives. --- packages/apollo-cache-inmemory/package.json | 2 +- .../apollo-cache-inmemory/src/writeToStore.ts | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index de8fb6762e2..2b34f656313 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.4.2", + "version": "1.4.0-alpha.12", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/src/writeToStore.ts b/packages/apollo-cache-inmemory/src/writeToStore.ts index 3abdd511720..b92e8a4325c 100644 --- a/packages/apollo-cache-inmemory/src/writeToStore.ts +++ b/packages/apollo-cache-inmemory/src/writeToStore.ts @@ -177,15 +177,28 @@ export class StoreWriter { context, }); } else { - // if this is a defered field we don't need to throw / wanr - const isDefered = - selection.directives && - selection.directives.length && - selection.directives.some( + let isDefered = false; + let isClient = false; + if (selection.directives && selection.directives.length) { + // If this is a defered field we don't need to throw / warn. + isDefered = selection.directives.some( directive => directive.name && directive.name.value === 'defer', ); - if (!isDefered && context.fragmentMatcherFunction) { + // When using the @client directive, it might be desirable in + // some cases to want to write a selection set to the store, + // without having all of the selection set values available. + // This is because the @client field values might have already + // been written to the cache separately (e.g. via Apollo + // Cache's `writeData` capabilities). Because of this, we'll + // skip the missing field warning for fields with @client + // directives. + isClient = selection.directives.some( + directive => directive.name && directive.name.value === 'client', + ); + } + + if (!isDefered && !isClient && context.fragmentMatcherFunction) { // XXX We'd like to throw an error, but for backwards compatibility's sake // we just print a warning for the time being. //throw new WriteError(`Missing field ${resultFieldKey} in ${JSON.stringify(result, null, 2).substring(0, 100)}`); From c8764bf316adda90f7e9058d1ee38b08d260b0fa Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:13:26 -0500 Subject: [PATCH 004/230] Use `alpha` tag when publishing `apollo-client` to npm This is a temporary change, while working on the local state alpha changes. --- packages/apollo-client/scripts/deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-client/scripts/deploy.sh b/packages/apollo-client/scripts/deploy.sh index dfdb51cc462..9c59deaf305 100755 --- a/packages/apollo-client/scripts/deploy.sh +++ b/packages/apollo-client/scripts/deploy.sh @@ -62,4 +62,4 @@ node -e "\ cp ../../README.md npm/ cp ../../LICENSE npm/ -cd npm && npm publish +cd npm && npm publish --tag alpha From 4f723feea8fbb68de039ddf5af33bcedc9714c24 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:16:17 -0500 Subject: [PATCH 005/230] Apollo Client integrated local state handling This commit provides the bulk of the new Apollo Client local state handling capabilities. It replaces the need to use `apollo-link-state` in a link chain for local state management, by merging local state handling directly into the Apollo Client core. The majority of the new local state functionality can be found in the `LocalState` class, which is tied into the `QueryManager` to integrate with Queries, Mutations and Subscriptions. Key Changes: - Replaces the need to use `apollo-link-state`. - `apollo-link-state` defaults have been replaced with new initializer functions, which are a much more capable and flexible way to initialize the cache. - Initializers and local resolvers can be set through the `ApolloClient` constructor, or set separately using new public API functions. - A local schema can be set through `ApolloClient`, which can then be used by external tooling (like Apollo Client Devtools). - Mixing remote and local (`@client` based) data together in queries is supported. - Queries can now use the `@export` directive to export the result of a local resolver into a variable, that can then be automatically passed into a subsequent query. E.g. `@client @export(as: "someVar")` - Full SSR support. - Numerous bug fixes made to address the oustanding `apollo-link-state` issue backlog. --- package-lock.json | 3065 ++++++----------- package.json | 11 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-client/src/ApolloClient.ts | 109 +- .../apollo-client/src/__mocks__/mockLinks.ts | 34 +- .../apollo-client/src/__tests__/client.ts | 12 +- packages/apollo-client/src/core/LocalState.ts | 616 ++++ .../apollo-client/src/core/ObservableQuery.ts | 36 +- .../apollo-client/src/core/QueryManager.ts | 335 +- .../src/core/__tests__/QueryManager/index.ts | 11 +- packages/apollo-client/src/core/types.ts | 19 +- .../src/core/watchQueryOptions.ts | 34 +- packages/apollo-client/src/index.ts | 8 +- packages/graphql-anywhere/package.json | 4 +- 15 files changed, 2138 insertions(+), 2160 deletions(-) create mode 100644 packages/apollo-client/src/core/LocalState.ts diff --git a/package-lock.json b/package-lock.json index 6c014da59e5..328dee84492 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,14 +39,6 @@ "requires": { "core-js": "^2.5.7", "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - } } }, "@iamstarkov/listr-update-renderer": { @@ -105,7 +97,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } @@ -126,14 +118,6 @@ "libnpm": "^2.0.1", "p-map": "^1.2.0", "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "@lerna/batch-packages": { @@ -176,14 +160,6 @@ "p-waterfall": "^1.0.0", "read-package-tree": "^5.1.6", "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "@lerna/changed": { @@ -231,19 +207,6 @@ "supports-color": "^5.3.0" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -284,12 +247,6 @@ "once": "^1.3.1" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -341,19 +298,6 @@ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -474,12 +418,6 @@ "once": "^1.3.1" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -562,19 +500,6 @@ "lodash": "^4.17.5" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -608,12 +533,6 @@ "end-of-stream": "^1.1.0", "once": "^1.3.1" } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true } } }, @@ -633,17 +552,6 @@ "semver": "^5.5.0" }, "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -662,12 +570,6 @@ "end-of-stream": "^1.1.0", "once": "^1.3.1" } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true } } }, @@ -696,23 +598,6 @@ "whatwg-url": "^7.0.0" }, "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "whatwg-url": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", @@ -735,19 +620,6 @@ "cmd-shim": "^2.0.2", "fs-extra": "^7.0.0", "libnpm": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/describe-ref": { @@ -828,23 +700,6 @@ "tar": "^4.4.8" }, "dependencies": { - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "tar": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", @@ -882,14 +737,6 @@ "requires": { "@lerna/child-process": "3.3.0", "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "@lerna/import": { @@ -906,19 +753,6 @@ "dedent": "^0.7.0", "fs-extra": "^7.0.0", "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/init": { @@ -932,19 +766,6 @@ "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/link": { @@ -1055,19 +876,6 @@ "libnpm": "^2.0.1", "signal-exit": "^3.0.2", "write-pkg": "^3.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/npm-publish": { @@ -1080,19 +888,6 @@ "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpm": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/npm-run-script": { @@ -1131,12 +926,6 @@ "temp-write": "^3.4.0" }, "dependencies": { - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, "tar": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", @@ -1180,14 +969,6 @@ "@lerna/validation-error": "3.6.0", "libnpm": "^2.0.1", "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "@lerna/project": { @@ -1285,25 +1066,6 @@ "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", "semver": "^5.5.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "@lerna/pulse-till-done": { @@ -1324,19 +1086,6 @@ "fs-extra": "^7.0.0", "libnpm": "^2.0.1", "read-cmd-shim": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/rimraf-dir": { @@ -1399,19 +1148,6 @@ "@lerna/package": "3.7.2", "fs-extra": "^7.0.0", "p-map": "^1.2.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/symlink-dependencies": { @@ -1427,19 +1163,6 @@ "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } } }, "@lerna/timer": { @@ -1503,12 +1226,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1538,6 +1255,14 @@ "requires": { "call-me-maybe": "^1.0.1", "glob-to-regexp": "^0.3.0" + }, + "dependencies": { + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + } } }, "@nodelib/fs.stat": { @@ -1714,20 +1439,52 @@ } }, "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", "dev": true, "requires": { - "acorn": "^5.0.0" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "dev": true + } } }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -1747,15 +1504,15 @@ } }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -1775,12 +1532,6 @@ "repeat-string": "^1.5.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -2095,12 +1846,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2139,7 +1884,6 @@ "apollo-link": "^1.0.6", "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", - "apollo-link-state": "^0.4.0", "graphql-tag": "^2.4.2", "tslib": "^1.9.3" } @@ -2158,6 +1902,15 @@ "apollo-utilities": "file:packages/apollo-utilities", "optimism": "^0.6.9", "tslib": "^1.9.3" + }, + "dependencies": { + "optimism": { + "version": "0.6.9", + "bundled": true, + "requires": { + "immutable-tuple": "^0.4.9" + } + } } }, "apollo-client": { @@ -2171,37 +1924,21 @@ "symbol-observable": "^1.0.2", "tslib": "^1.9.3", "zen-observable": "^0.8.0" - }, - "dependencies": { - "@types/async": { - "version": "2.0.50", - "bundled": true - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - } } }, "apollo-link": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.2.tgz", - "integrity": "sha512-Uk/BC09dm61DZRDSu52nGq0nFhq7mcBPTjy5EEH1eunJndtCaNXQhQz/BjkI2NdrfGI+B+i5he6YSoRBhYizdw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.6.tgz", + "integrity": "sha512-sUNlA20nqIF3gG3F8eyMD+mO80fmf3dPZX+GUOs3MI9oZR8ug09H3F0UsWJMcpEg6h55Yy5wZ+BMmAjrbenF/Q==", "requires": { - "@types/graphql": "0.12.6", "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.9" + "zen-observable-ts": "^0.8.13" }, "dependencies": { - "@types/graphql": { - "version": "0.12.6", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.12.6.tgz", - "integrity": "sha512-wXAVyLfkG1UMkKOdMijVWFky39+OD/41KftzqfX1Oejd0Gm6dOIKjCihSVECg6X7PHjftxXmfOKA/d1H79ZfvQ==" - }, "apollo-utilities": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.18.tgz", - "integrity": "sha512-hHrmsoMYzzzfUlTOPpxr0qRpTLotMkBIQ93Ub7ki2SWdLfYYKrp6/KB8YOUkbCwXxSFvYSV24ccuwUEqZIaHIA==", + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.27.tgz", + "integrity": "sha512-nzrMQ89JMpNmYnVGJ4t8zN75gQbql27UDhlxNi+3OModp0Masx5g+fQmQJ5B4w2dpRuYOsdwFLmj3lQbwOKV1Q==", "requires": { "fast-json-stable-stringify": "^2.0.0" } @@ -2209,63 +1946,37 @@ } }, "apollo-link-dedup": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.9.tgz", - "integrity": "sha512-RbuEKpmSHVMtoREMPh2wUFTeh65q+0XPVeqgaOP/rGEAfvLyOMvX0vT2nVaejMohoMxuUnfZwpldXaDFWnlVbg==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.13.tgz", + "integrity": "sha512-i4NuqT3DSFczFcC7NMUzmnYjKX7NggLY+rqYVf+kE9JjqKOQhT6wqhaWsVIABfIUGE/N0DTgYJBCMu/18aXmYA==", "requires": { - "apollo-link": "^1.2.2" + "apollo-link": "^1.2.6" } }, "apollo-link-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.0.tgz", - "integrity": "sha512-4Vu/IUn6Kn6+Fthym4iuqypCKcLdwTg3MaCvtLdaLbt9X2hNCq3y8mv6vuWIlAY51X8wKhCgYghQSOs5R/embQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.5.tgz", + "integrity": "sha512-gE0P711K+rI3QcTzfYhzRI9axXaiuq/emu8x8Y5NHK9jl9wxh7qmEc3ZTyGpnGFDDTXfhalmX17X5lp3RCVHDQ==", "requires": { - "apollo-link": "^1.2.2" + "apollo-link": "^1.2.6", + "apollo-link-http-common": "^0.2.8" } }, "apollo-link-http": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.4.tgz", - "integrity": "sha512-e9Ng3HfnW00Mh3TI6DhNRfozmzQOtKgdi+qUAsHBOEcTP0PTAmb+9XpeyEEOueLyO0GXhB92HUCIhzrWMXgwyg==", + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.9.tgz", + "integrity": "sha512-9tJy2zGm4Cm/1ycScDNZJe51dgnTSfKx7pKIgPZmcxkdDpgUY2DZitDH6ZBv4yp9z8MC9Xr9wgwc29s6hcadUQ==", "requires": { - "apollo-link": "^1.2.2", - "apollo-link-http-common": "^0.2.4" + "apollo-link": "^1.2.6", + "apollo-link-http-common": "^0.2.8" } }, "apollo-link-http-common": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.4.tgz", - "integrity": "sha512-4j6o6WoXuSPen9xh4NBaX8/vL98X1xY2cYzUEK1F8SzvHe2oFONfxJBTekwU8hnvapcuq8Qh9Uct+gelu8T10g==", - "requires": { - "apollo-link": "^1.2.2" - } - }, - "apollo-link-state": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/apollo-link-state/-/apollo-link-state-0.4.1.tgz", - "integrity": "sha512-69/til4ENfl/Fvf7br2xSsLSBcxcXPbOHVNkzLLejvUZickl93HLO4/fO+uvoBi4dCYRgN17Zr8FwI41ueRx0g==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.8.tgz", + "integrity": "sha512-gGmXZN8mr7e9zjopzKQfZ7IKnh8H12NxBDzvp9nXI3U82aCVb72p+plgoYLcpMY8w6krvoYjgicFmf8LO20TCQ==", "requires": { - "apollo-utilities": "^1.0.8", - "graphql-anywhere": "^4.1.0-alpha.0" - }, - "dependencies": { - "apollo-utilities": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.18.tgz", - "integrity": "sha512-hHrmsoMYzzzfUlTOPpxr0qRpTLotMkBIQ93Ub7ki2SWdLfYYKrp6/KB8YOUkbCwXxSFvYSV24ccuwUEqZIaHIA==", - "requires": { - "fast-json-stable-stringify": "^2.0.0" - } - }, - "graphql-anywhere": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.16.tgz", - "integrity": "sha512-DNQGxrh2p8w4vQwHIW1Sw65ZDbOr6ktQCeol6itH3LeWy1a3IoZ67jxrhgrHM+Upg8oiazvteSr64VRxJ8n5+g==", - "requires": { - "apollo-utilities": "^1.0.18" - } - } + "apollo-link": "^1.2.6" } }, "apollo-utilities": { @@ -2400,10 +2111,13 @@ "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } }, "asn1.js": { "version": "4.10.1", @@ -2461,10 +2175,13 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } }, "async-each": { "version": "1.0.1", @@ -2485,9 +2202,9 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { @@ -2496,6 +2213,12 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, "axios": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", @@ -2635,7 +2358,7 @@ }, "babel-plugin-istanbul": { "version": "4.1.6", - "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { @@ -2653,7 +2376,7 @@ }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -2666,6 +2389,14 @@ "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } } }, "babel-preset-jest": { @@ -2829,12 +2560,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2854,15 +2579,14 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { "tweetnacl": "^0.14.3" } }, "before-after-hook": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.1.tgz", - "integrity": "sha512-BIjg60OP/sQvG7Q2L9Xkc77gyyFw1B4T73LIfZVQtXbutJinC1+t2HRl4qeR3EWAmY+tA6z9vpRi02q6ZXyluQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.2.tgz", + "integrity": "sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==", "dev": true }, "benchmark": { @@ -2888,9 +2612,9 @@ } }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "bin-links": { @@ -2907,9 +2631,9 @@ } }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, "bl": { @@ -2932,9 +2656,9 @@ } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { @@ -2969,6 +2693,15 @@ "requires": { "ms": "2.0.0" } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } } } }, @@ -3010,9 +2743,9 @@ } }, "browser-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, "browser-resolve": { @@ -3022,14 +2755,6 @@ "dev": true, "requires": { "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } } }, "browserify-aes": { @@ -3118,6 +2843,17 @@ "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -3147,9 +2883,9 @@ "dev": true }, "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-xor": { @@ -3234,38 +2970,6 @@ "y18n": "^4.0.0" }, "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3304,14 +3008,6 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "call-me-maybe": { @@ -3320,6 +3016,24 @@ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", @@ -3503,12 +3217,6 @@ "requires": { "kind-of": "^3.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -3525,9 +3233,9 @@ "dev": true }, "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, "cipher-base": { @@ -3560,12 +3268,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -3696,18 +3398,18 @@ } }, "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "columnify": { @@ -3721,18 +3423,18 @@ } }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, "compare-func": { @@ -3876,14 +3578,6 @@ "semver": "^5.5.0", "split": "^1.0.0", "through2": "^2.0.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "conventional-commits-filter": { @@ -3969,9 +3663,9 @@ "dev": true }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==", "dev": true }, "core-util-is": { @@ -3981,11 +3675,12 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", "dev": true, "requires": { + "import-fresh": "^2.0.0", "is-directory": "^0.3.1", "js-yaml": "^3.9.0", "parse-json": "^4.0.0" @@ -4029,12 +3724,14 @@ } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -4154,12 +3851,6 @@ "supports-color": "^5.3.0" } }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -4223,24 +3914,16 @@ "dev": true, "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "data-urls": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz", - "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "dev": true, "requires": { "abab": "^2.0.0", - "whatwg-mimetype": "^2.1.0", + "whatwg-mimetype": "^2.2.0", "whatwg-url": "^7.0.0" }, "dependencies": { @@ -4430,12 +4113,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -4460,7 +4137,7 @@ "dependencies": { "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -4473,7 +4150,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -4574,9 +4251,9 @@ } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "domexception": { @@ -4616,13 +4293,13 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ecdsa-sig-formatter": { @@ -4734,33 +4411,34 @@ } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "^1.1.1", + "is-callable": "^1.1.4", "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "is-symbol": "^1.0.2" } }, "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "version": "0.10.47", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", + "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", "dev": true, "requires": { "es6-iterator": "~2.0.3", @@ -4794,9 +4472,9 @@ } }, "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", "dev": true }, "es6-promisify": { @@ -4868,6 +4546,12 @@ "source-map": "~0.6.1" }, "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4890,9 +4574,9 @@ } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esrecurse": { @@ -4964,12 +4648,12 @@ } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", + "cross-spawn": "^6.0.0", "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", @@ -5086,6 +4770,12 @@ } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -5104,17 +4794,6 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { @@ -5133,9 +4812,9 @@ "dev": true }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-glob": { @@ -5459,12 +5138,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -5524,14 +5197,6 @@ "glob-to-regexp": "^0.4.0", "path-to-regexp": "^2.2.1", "whatwg-url": "^6.5.0" - }, - "dependencies": { - "glob-to-regexp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.0.tgz", - "integrity": "sha512-fyPCII4vn9Gvjq2U/oDAfP433aiE64cyP/CJjRJcpVGjqqNdioUYn9+r0cSzT1XPwmGAHuTT7iv+rQT8u/YHKQ==", - "dev": true - } } }, "figgy-pudding": { @@ -5582,6 +5247,17 @@ "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } } }, "finalhandler": { @@ -5678,13 +5354,13 @@ "dev": true }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -5732,9 +5408,9 @@ "dev": true }, "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -5781,532 +5457,14 @@ "dev": true }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz", + "integrity": "sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==", "dev": true, "optional": true, "requires": { "nan": "^2.9.2", "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true - } } }, "fstream": { @@ -6605,22 +5763,14 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "dev": true, + "requires": { + "assert-plus": "^1.0.0" } }, "git-config-path": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", "integrity": "sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=", "dev": true, "requires": { @@ -6668,14 +5818,6 @@ "requires": { "meow": "^4.0.0", "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "gitconfiglocal": { @@ -6732,9 +5874,9 @@ "dev": true }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6765,9 +5907,9 @@ } }, "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.0.tgz", + "integrity": "sha512-fyPCII4vn9Gvjq2U/oDAfP433aiE64cyP/CJjRJcpVGjqqNdioUYn9+r0cSzT1XPwmGAHuTT7iv+rQT8u/YHKQ==", "dev": true }, "globals": { @@ -6792,9 +5934,9 @@ } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, "graphql": { @@ -6835,85 +5977,22 @@ } }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "dev": true, "requires": { - "async": "^1.4.0", + "async": "^2.5.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -6924,12 +6003,12 @@ "dev": true }, "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^5.3.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, @@ -6957,6 +6036,12 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -6972,14 +6057,6 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "has-values": { @@ -7034,9 +6111,9 @@ } }, "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -7165,9 +6242,9 @@ "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -7363,9 +6440,9 @@ "dev": true }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "invariant": { @@ -7441,12 +6518,12 @@ "dev": true }, "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^1.0.0" + "ci-info": "^1.5.0" } }, "is-data-descriptor": { @@ -7616,14 +6693,6 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "is-posix-bracket": { @@ -7672,10 +6741,13 @@ "dev": true }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "is-text-path": { "version": "1.0.1", @@ -7717,13 +6789,10 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", @@ -7770,17 +6839,6 @@ "js-yaml": "^3.7.0", "mkdirp": "^0.5.1", "once": "^1.4.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - } } }, "istanbul-lib-coverage": { @@ -7930,28 +6988,6 @@ "yargs": "^11.0.0" } }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7992,36 +7028,6 @@ "jest-validate": "^23.6.0", "micromatch": "^2.3.11", "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-diff": { @@ -8034,24 +7040,6 @@ "diff": "^3.2.0", "jest-get-type": "^22.1.0", "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-docblock": { @@ -8071,24 +7059,6 @@ "requires": { "chalk": "^2.0.1", "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-environment-jsdom": { @@ -8152,24 +7122,6 @@ "jest-snapshot": "^23.6.0", "jest-util": "^23.4.0", "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-junit": { @@ -8209,24 +7161,6 @@ "dev": true, "requires": { "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-matcher-utils": { @@ -8238,24 +7172,6 @@ "chalk": "^2.0.1", "jest-get-type": "^22.1.0", "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-message-util": { @@ -8332,9 +7248,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -8370,36 +7286,6 @@ "strip-bom": "3.0.0", "write-file-atomic": "^2.1.0", "yargs": "^11.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - } } }, "jest-serializer": { @@ -8424,30 +7310,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^23.6.0", "semver": "^5.5.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - }, - "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", - "dev": true - } } }, "jest-util": { @@ -8513,29 +7375,20 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsdom": { "version": "11.12.0", @@ -8635,9 +7488,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stringify-safe": { @@ -8657,7 +7510,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -8719,14 +7572,6 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "jwa": { @@ -8853,14 +7698,6 @@ "pacote": "^9.2.3", "read-package-json": "^2.0.13", "stringify-package": "^1.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - } } }, "libnpmaccess": { @@ -9077,12 +7914,6 @@ "end-of-stream": "^1.1.0", "once": "^1.3.1" } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true } } }, @@ -9232,9 +8063,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -9242,17 +8073,15 @@ "supports-color": "^5.3.0" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "cosmiconfig": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", + "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" } }, "execa": { @@ -9530,12 +8359,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -9573,12 +8396,6 @@ "once": "^1.3.1" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9696,9 +8513,9 @@ }, "dependencies": { "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -9736,26 +8553,35 @@ } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "big.js": "^3.1.3", + "big.js": "^5.2.2", "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "json5": "^1.0.1" }, "dependencies": { "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -9778,14 +8604,6 @@ "requires": { "npm-package-arg": "^5.1.2 || 6", "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "lodash": { @@ -10022,9 +8840,9 @@ } }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", @@ -10114,19 +8932,20 @@ } }, "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -10186,9 +9005,9 @@ } }, "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, "merge-descriptors": { @@ -10256,18 +9075,18 @@ "dev": true }, "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "dev": true }, "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "~1.35.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -10457,9 +9276,9 @@ "dev": true }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true }, "nanomatch": { @@ -10526,6 +9345,30 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "needle": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -10533,9 +9376,9 @@ "dev": true }, "neo-async": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz", - "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, "next-tick": { @@ -10608,6 +9451,14 @@ "semver": "~5.3.0", "tar": "^2.0.0", "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } } }, "node-int64": { @@ -10647,57 +9498,85 @@ "vm-browserify": "0.0.4" }, "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } }, "node-notifier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", - "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", + "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", "dev": true, "requires": { "growly": "^1.3.0", - "semver": "^5.4.1", + "semver": "^5.5.0", "shellwords": "^0.1.1", "which": "^1.3.0" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" }, "dependencies": { - "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", - "dev": true + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true } } }, @@ -10783,14 +9662,6 @@ "osenv": "^0.1.5", "semver": "^5.5.0", "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "npm-packlist": { @@ -10821,14 +9692,6 @@ "figgy-pudding": "^3.5.1", "npm-package-arg": "^6.0.0", "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "npm-profile": { @@ -10900,6 +9763,12 @@ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", "dev": true }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10941,14 +9810,6 @@ "dev": true, "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "object.getownpropertydescriptors": { @@ -10978,14 +9839,6 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "octokit-pagination-methods": { @@ -11043,14 +9896,6 @@ "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } } }, "optionator": { @@ -11065,6 +9910,14 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, "os-browserify": { @@ -11088,6 +9941,34 @@ "execa": "^0.7.0", "lcid": "^1.0.0", "mem": "^1.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } } }, "os-name": { @@ -11241,18 +10122,6 @@ "which": "^1.3.1" }, "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -11262,20 +10131,6 @@ "pump": "^3.0.0" } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11295,12 +10150,6 @@ "once": "^1.3.1" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "tar": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", @@ -11325,9 +10174,9 @@ } }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", "dev": true }, "parallel-transform": { @@ -11438,6 +10287,12 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -11469,9 +10324,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-to-regexp": { @@ -11490,9 +10345,9 @@ } }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -11582,6 +10437,17 @@ "which": "1.2.x" }, "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "which": { "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", @@ -11776,22 +10642,23 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -11816,9 +10683,9 @@ } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "q": { @@ -11852,9 +10719,9 @@ "dev": true }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { "is-number": "^4.0.0", @@ -11911,6 +10778,17 @@ "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "rc": { @@ -11955,18 +10833,6 @@ "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.12.0" - }, - "dependencies": { - "scheduler": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", - "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } } }, "read": { @@ -12062,15 +10928,314 @@ } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "readline-sync": { @@ -12099,9 +11264,9 @@ } }, "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", "dev": true }, "regex-cache": { @@ -12151,9 +11316,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -12197,36 +11362,6 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" - }, - "dependencies": { - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } } }, "request-promise-core": { @@ -12268,13 +11403,10 @@ "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true }, "resolve-cwd": { "version": "2.0.0", @@ -12335,12 +11467,12 @@ } }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { @@ -12394,6 +11526,15 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", "dev": true + }, + "resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, @@ -12408,9 +11549,9 @@ } }, "rollup-pluginutils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz", - "integrity": "sha512-xB6hsRsjdJdIYWEyYUJy/3ki5g69wrf0luHPGNK3ZSocV6HLNfio59l3dZ3TL4xUwEKgROhFi9jOCt6c5gfUWw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", "dev": true, "requires": { "estree-walker": "^0.5.2", @@ -12759,12 +11900,6 @@ } } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -12794,7 +11929,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -12817,9 +11952,9 @@ } }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "semver-compare": { @@ -12878,12 +12013,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -13112,12 +12241,6 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -13165,9 +12288,9 @@ } }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { @@ -13215,9 +12338,9 @@ } }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -13225,9 +12348,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -13241,9 +12364,9 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, "split": { @@ -13301,9 +12424,9 @@ "dev": true }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", + "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -13315,14 +12438,6 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "ssri": { @@ -13335,9 +12450,9 @@ } }, "stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, "staged-git-files": { @@ -13581,8 +12696,7 @@ "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "symbol-tree": { "version": "3.2.2", @@ -13591,9 +12705,9 @@ "dev": true }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", "dev": true }, "tar": { @@ -13797,6 +12911,15 @@ "xtend": "~4.0.1" } }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13901,6 +13024,14 @@ "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } } }, "tr46": { @@ -13910,14 +13041,6 @@ "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "trim-newlines": { @@ -13956,6 +13079,17 @@ "lodash": "^4.17.10" }, "dependencies": { + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -14006,6 +13140,15 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14026,6 +13169,12 @@ "tslib": "^1.8.1" } }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -14039,8 +13188,7 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -14220,9 +13368,9 @@ } }, "universal-user-agent": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.2.tgz", - "integrity": "sha512-nOwvHWLH3dBazyuzbECPA5uVFNd7AlgviXRHgR4yf48QqitIvpdncRrxMbZNMpPPEfgz30I9ubd1XmiJiqsTrg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.3.tgz", + "integrity": "sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==", "dev": true, "requires": { "os-name": "^3.0.0" @@ -14277,12 +13425,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -14299,14 +13441,6 @@ "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "urix": { @@ -14389,9 +13523,9 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -14422,14 +13556,6 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "vm-browserify": { @@ -14477,7 +13603,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -14539,50 +13665,12 @@ "yargs": "^8.0.2" }, "dependencies": { - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -14607,18 +13695,6 @@ } } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -14761,16 +13837,10 @@ "ws": "^6.0.0" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -14778,12 +13848,6 @@ "supports-color": "^5.3.0" } }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "gzip-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", @@ -14810,9 +13874,9 @@ } }, "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -14821,9 +13885,9 @@ } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -14839,24 +13903,24 @@ } }, "whatwg-encoding": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz", - "integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "0.4.24" } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", "dev": true }, "whatwg-mimetype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", - "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "whatwg-url": { @@ -14913,48 +13977,12 @@ "dev": true, "requires": { "execa": "^0.10.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { @@ -15081,17 +14109,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -15129,14 +14146,14 @@ } }, "zen-observable": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.9.tgz", - "integrity": "sha512-Y9kPzjGvIZ5jchSlqlCpBW3I82zBBL4z+ulXDRVA1NwsKzjt5kwAi+gOYIy0htNkfuehGZZtP5mRXHRV6TjDWw==" + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.11.tgz", + "integrity": "sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==" }, "zen-observable-ts": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.9.tgz", - "integrity": "sha512-KJz2O8FxbAdAU5CSc8qZ1K2WYEJb1HxS6XDRF+hOJ1rOYcg6eTMmS9xYHCXzqZZzKw6BbXWyF4UpwSsBQnHJeA==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.13.tgz", + "integrity": "sha512-WDb8SM0tHCb6c0l1k60qXWlm1ok3zN9U4VkLdnBKQwIYwUoB9psH7LIFgR+JVCCMmBxUgOjskIid8/N02k/2Bg==", "requires": { "zen-observable": "^0.8.0" } diff --git a/package.json b/package.json index 6f694744dc0..0929bda4994 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "license": "MIT", "scripts": { - "postinstall": "lerna exec -- npm install && lerna run prepare", + "postinstall": "lerna exec -- npm install --package-lock=false && lerna run prepare", "diff": "check-if-folder-contents-changed-in-git-commit-range", "build": "lerna run build", "test": "jest --verbose", @@ -17,7 +17,7 @@ "coverage": "jest --verbose --coverage", "coverage:upload": "codecov", "danger": "danger run --verbose --dangerfile=./config/dangerfile.ts", - "deploy": "lerna publish -m \"chore: Publish\" && cd packages/apollo-client && npm run deploy", + "deploy": "lerna publish -m \"chore: Publish\" --npm-tag alpha && cd packages/apollo-client && npm run deploy", "clean": "find . -name \"node_modules\" -exec rm -rf '{}' + && find . -name \"lib\" -exec rm -rf '{}' +" }, "bundlesize": [ @@ -34,12 +34,12 @@ { "name": "apollo-client", "path": "./packages/apollo-client/lib/bundle.min.js", - "maxSize": "9.4 kB" + "maxSize": "13 kB" }, { "name": "apollo-utilities", "path": "./packages/apollo-utilities/lib/bundle.min.js", - "maxSize": "4.3 kB" + "maxSize": "4.75 kB" } ], "jest": { @@ -53,6 +53,9 @@ "js", "json" ], + "modulePathIgnorePatterns": [ + "/npm/" + ], "testURL": "http://localhost", "testPathIgnorePatterns": [ "/npm/", diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 212289db887..ce639326603 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.1.25", + "version": "1.2.0-alpha.9", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index ca3e2a61d47..ef4c115f2b5 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.4.12", + "version": "2.5.0-alpha.10", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.umd.js", "module": "./lib/index.js", diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 7021b4c5b70..1cf65d3563d 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -14,9 +14,14 @@ import { } from 'apollo-utilities'; import { QueryManager } from './core/QueryManager'; -import { ApolloQueryResult, OperationVariables } from './core/types'; +import { + ApolloQueryResult, + OperationVariables, + Initializers, + Resolvers, +} from './core/types'; import { ObservableQuery } from './core/ObservableQuery'; - +import { LocalState, FragmentMatcher } from './core/LocalState'; import { Observable } from './util/Observable'; import { @@ -42,13 +47,17 @@ export interface DefaultOptions { let hasSuggestedDevtools = false; export type ApolloClientOptions = { - link: ApolloLink; + link?: ApolloLink; cache: ApolloCache; - ssrMode?: boolean; ssrForceFetchDelay?: number; + ssrMode?: boolean; connectToDevTools?: boolean; queryDeduplication?: boolean; defaultOptions?: DefaultOptions; + initializers?: Initializers | Initializers[]; + resolvers?: Resolvers | Resolvers[]; + typeDefs?: string | string[] | DocumentNode | DocumentNode[]; + fragmentMatcher?: FragmentMatcher; name?: string; version?: string; }; @@ -75,6 +84,7 @@ export default class ApolloClient implements DataProxy { private resetStoreCallbacks: Array<() => Promise> = []; private clearStoreCallbacks: Array<() => Promise> = []; private clientAwareness: Record = {}; + private localState: LocalState; /** * Constructs an instance of {@link ApolloClient}. @@ -106,17 +116,28 @@ export default class ApolloClient implements DataProxy { */ constructor(options: ApolloClientOptions) { const { - link, cache, ssrMode = false, ssrForceFetchDelay = 0, connectToDevTools, queryDeduplication = true, defaultOptions, + initializers, + resolvers, + typeDefs, + fragmentMatcher, name: clientAwarenessName, version: clientAwarenessVersion, } = options; + let { link } = options; + + // If a link hasn't been defined, but local state initializers/resolvers + // have been set, setup a default empty link. + if (!link && (initializers || resolvers)) { + link = ApolloLink.empty(); + } + if (!link || !cache) { throw new Error(` In order to initialize Apollo Client, you must specify link & cache properties on the config object. @@ -218,6 +239,15 @@ export default class ApolloClient implements DataProxy { if (clientAwarenessVersion) { this.clientAwareness.version = clientAwarenessVersion; } + + this.localState = new LocalState({ + cache, + client: this, + initializers, + resolvers, + typeDefs, + fragmentMatcher, + }); } /** @@ -440,6 +470,7 @@ export default class ApolloClient implements DataProxy { queryDeduplication: this.queryDeduplication, ssrMode: this.ssrMode, clientAwareness: this.clientAwareness, + localState: this.localState, onBroadcast: () => { if (this.devToolsHookCb) { this.devToolsHookCb({ @@ -568,6 +599,74 @@ export default class ApolloClient implements DataProxy { return this.initProxy().restore(serializedState); } + /** + * Run one or many initializer functions to put the cache into a desired + * state. + */ + public runInitializers( + initializers: Initializers | Initializers[], + ) { + return this.localState.runInitializers(initializers); + } + + /** + * Clear out all initializer run tracking. Initializer runs are tracked to + * help prevent the same initializers from running again, which could lead + * to certain cache values being wiped out. + */ + public resetInitializers() { + this.localState.resetInitializers(); + } + + /** + * Add additional local resolvers. + */ + public addResolvers(resolvers: Resolvers | Resolvers[]) { + this.localState.addResolvers(resolvers); + } + + /** + * Set (override existing) local resolvers. + */ + public setResolvers(resolvers: Resolvers | Resolvers[]) { + this.localState.setResolvers(resolvers); + } + + /** + * Get all registered local resolvers. + */ + public getResolvers() { + return this.localState.getResolvers(); + } + + /** + * Set the local schema type definitions. + */ + public setTypeDefs( + typeDefs: string | string[] | DocumentNode | DocumentNode[], + ) { + this.localState.setTypeDefs(typeDefs); + } + + /** + * Get local schema type definitions. + */ + public getTypeDefs(): + | string + | string[] + | DocumentNode + | DocumentNode[] + | undefined { + return this.localState.getTypeDefs(); + } + + /** + * Set a custom local state fragment matcher. + */ + public setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher) { + this.localState.setFragmentMatcher(fragmentMatcher); + } + /** * Initializes a data proxy for this client instance if one does not already * exist and returns either a previously initialized proxy instance or the diff --git a/packages/apollo-client/src/__mocks__/mockLinks.ts b/packages/apollo-client/src/__mocks__/mockLinks.ts index ac6e917d19a..1c86c089ff0 100644 --- a/packages/apollo-client/src/__mocks__/mockLinks.ts +++ b/packages/apollo-client/src/__mocks__/mockLinks.ts @@ -3,7 +3,8 @@ import { ApolloLink, FetchResult, Observable, - // Observer, + DocumentNode, + GraphQLRequest, } from 'apollo-link'; import { print } from 'graphql/language/printer'; @@ -24,6 +25,16 @@ export function mockObservableLink(): MockSubscriptionLink { return new MockSubscriptionLink(); } +interface MockOperation { + query: DocumentNode; + variables: Record; + operationName?: string; + extensions?: Record; + setContext?: (context: Record) => Record; + getContext?: () => Record; + toKey?: () => string; +} + export interface MockedResponse { request: Operation; result?: FetchResult; @@ -82,14 +93,17 @@ export class MockLink extends ApolloLink { } return new Observable(observer => { - let timer = setTimeout(() => { - if (error) { - observer.error(error); - } else { - if (result) observer.next(result); - observer.complete(); - } - }, delay ? delay : 0); + let timer = setTimeout( + () => { + if (error) { + observer.error(error); + } else { + if (result) observer.next(result); + observer.complete(); + } + }, + delay ? delay : 0, + ); return () => { clearTimeout(timer); @@ -116,7 +130,7 @@ export class MockSubscriptionLink extends ApolloLink { unsubscribe: () => { this.unsubscribers.forEach(x => x()); }, - closed: false + closed: false, }; }); } diff --git a/packages/apollo-client/src/__tests__/client.ts b/packages/apollo-client/src/__tests__/client.ts index 27aed28de30..2d3b477e264 100644 --- a/packages/apollo-client/src/__tests__/client.ts +++ b/packages/apollo-client/src/__tests__/client.ts @@ -84,21 +84,21 @@ describe('client', () => { }).toThrowError('You must wrap the query string in a "gql" tag.'); }); - it('should throw an error if mutation option is missing', () => { + it('should throw an error if mutation option is missing', async () => { const client = new ApolloClient({ link: ApolloLink.empty(), cache: new InMemoryCache(), }); - expect(() => { + return await expect( client.mutate({ query: gql` { a } `, - } as any); - }).toThrowError( + } as any) + ).rejects.toThrow( 'mutation option is required. You must specify your GraphQL document in the mutation option.', ); }); @@ -2365,7 +2365,7 @@ describe('client', () => { expect(count).toEqual(2); try { - console.log(client.readQuery({ query })); + client.readQuery({ query }); fail('should not see any data'); } catch (e) { expect(e.message).toMatch(/Can't find field/); @@ -2378,7 +2378,7 @@ describe('client', () => { client.onResetStore(onResetStoreTwo); let called = false; - const next = jest.fn(async d => { + const next = jest.fn(d => { if (called) { expect(onResetStoreOne).toHaveBeenCalled(); } else { diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts new file mode 100644 index 00000000000..edc38038309 --- /dev/null +++ b/packages/apollo-client/src/core/LocalState.ts @@ -0,0 +1,616 @@ +import { + ExecutionResult, + DocumentNode, + OperationDefinitionNode, + print, + SelectionSetNode, + SelectionNode, + InlineFragmentNode, + FragmentDefinitionNode, + FieldNode, +} from 'graphql'; +import { ApolloCache } from 'apollo-cache'; +import { + getMainDefinition, + buildQueryFromSelectionSet, + hasDirectives, + removeClientSetsFromDocument, + mergeDeep, + warnOnceInDevelopment, + FragmentMap, + DirectiveInfo, + argumentsObjectFromField, + resultKeyNameFromField, + getDirectiveInfoFromField, + getFragmentDefinitions, + createFragmentMap, + shouldInclude, + isField, + isInlineFragment, +} from 'apollo-utilities'; + +import ApolloClient from '../ApolloClient'; +import { Initializers, Resolvers, OperationVariables } from './types'; +import { capitalizeFirstLetter } from '../util/capitalizeFirstLetter'; + +export type Resolver = ( + fieldName: string, + rootValue: any, + args: any, + context: any, + info: ExecInfo, +) => any; + +export type VariableMap = { [name: string]: any }; + +export type ResultMapper = ( + values: { [fieldName: string]: any }, + rootValue: any, +) => any; + +export type FragmentMatcher = ( + rootValue: any, + typeCondition: string, + context: any, +) => boolean; + +export type ExecContext = { + fragmentMap: FragmentMap; + context: any; + variables: VariableMap; + resultMapper?: ResultMapper; + fragmentMatcher: FragmentMatcher; + defaultOperationType?: string | null; + exportedVariables: Record; +}; + +export type ExecInfo = { + isLeaf: boolean; + resultKey: string; + directives: DirectiveInfo; +}; + +export type ExecOptions = { + resultMapper?: ResultMapper; + fragmentMatcher?: FragmentMatcher; +}; + +export class LocalState { + private cache: ApolloCache; + private client: ApolloClient; + private resolvers: Resolvers | Resolvers[] = {}; + private typeDefs: string | string[] | DocumentNode | DocumentNode[]; + private fragmentMatcher: FragmentMatcher; + private firedInitializers: string[] = []; + + constructor({ + cache, + client, + initializers, + resolvers, + typeDefs, + fragmentMatcher, + }: { + cache: ApolloCache; + client?: ApolloClient; + initializers?: Initializers | Initializers[]; + resolvers?: Resolvers | Resolvers[]; + typeDefs?: string | string[] | DocumentNode | DocumentNode[]; + fragmentMatcher?: FragmentMatcher; + }) { + this.cache = cache; + + if (client) { + this.client = client; + } + + if (initializers) { + this.runInitializersSync(initializers); + } + + if (resolvers) { + this.addResolvers(resolvers); + } + + if (typeDefs) { + this.setTypeDefs(typeDefs); + } + + if (fragmentMatcher) { + this.setFragmentMatcher(fragmentMatcher); + } + } + + // Run the incoming initializer functions, asynchronously. Initializers that + // have already been run are tracked against the initializer field name, to + // prevent them from being run a second time. + // + // NOTE: Initializers do not currently check to see if data already exists + // in the cache, before writing to the cache. This means existing data + // can be overwritten. We might decide to query into the cache first to + // see if any previous data exists before overwritting it, but TBD. + public runInitializers( + initializers: Initializers | Initializers[], + ) { + if (!initializers) { + throw new Error('Invalid/missing initializers'); + } + + const mergedInitializers = this.mergeInitializers(initializers); + + const initializerPromises: Promise[] = []; + this.processInitializers( + mergedInitializers, + (fieldName: string, initializer: any) => { + initializerPromises.push( + Promise.resolve(initializer()).then(result => { + if (result !== undefined) { + this.cache.writeData({ data: { [fieldName]: result } }); + } + }), + ); + }, + ); + + return Promise.all(initializerPromises); + } + + // Run incoming intializer functions, synchronously. + public runInitializersSync( + initializers: Initializers | Initializers[], + ) { + if (!initializers) { + throw new Error('Invalid/missing initializers'); + } + + const mergedInitializers = this.mergeInitializers(initializers); + + this.processInitializers( + mergedInitializers, + (fieldName: string, initializer: any) => { + const result = initializer(this); + if (result !== undefined) { + this.cache.writeData({ data: { [fieldName]: result } }); + } + }, + ); + } + + public addResolvers(resolvers: Resolvers | Resolvers[]) { + if (Array.isArray(resolvers)) { + resolvers.forEach(resolverGroup => { + this.resolvers = mergeDeep(this.resolvers, resolverGroup); + }); + } else { + this.resolvers = mergeDeep(this.resolvers, resolvers); + } + } + + public setResolvers(resolvers: Resolvers | Resolvers[]) { + this.resolvers = {}; + this.addResolvers(resolvers); + } + + public getResolvers() { + return this.resolvers; + } + + // Run local client resolvers against the incoming query and remote data. + // Locally resolved field values are merged with the incoming remote data, + // and returned. Note that locally resolved fields will overwrite + // remote data using the same field name. + public async runResolvers({ + document, + remoteResult, + context, + variables, + onError, + }: { + document: DocumentNode | null; + remoteResult?: ExecutionResult; + context?: Record; + variables?: Record; + onError?: (error: any) => void; + }) { + let localResult: Record = {}; + + if (document) { + let rootValue = this.buildRootValueFromCache(document, variables); + rootValue = rootValue ? mergeDeep(rootValue, remoteResult) : remoteResult; + + try { + const data = await this.resolveDocument( + document, + rootValue, + context, + variables, + { fragmentMatcher: this.fragmentMatcher }, + ); + localResult = data.result; + } catch (error) { + if (onError) { + onError(error); + return; + } else { + throw error; + } + } + } + + return { + ...remoteResult, + ...localResult, + }; + } + + public setTypeDefs( + typeDefs: string | string[] | DocumentNode | DocumentNode[], + ) { + this.typeDefs = typeDefs; + } + + public getTypeDefs(): string | string[] | DocumentNode | DocumentNode[] { + return this.typeDefs; + } + + public setFragmentMatcher(fragmentMatcher: FragmentMatcher) { + this.fragmentMatcher = fragmentMatcher; + } + + public getFragmentMatcher(): FragmentMatcher { + return this.fragmentMatcher; + } + + // Client queries contain everything in the incoming document (if a @client + // directive is found). + public clientQuery(document: DocumentNode) { + return hasDirectives(['client'], document) ? document : null; + } + + // Server queries are stripped of all @client based selection sets. + public serverQuery(document: DocumentNode) { + return removeClientSetsFromDocument(document); + } + + public prepareContext(context = {}) { + const cache = this.cache; + + let schemas: object[] = []; + if (this.typeDefs) { + const directives = 'directive @client on FIELD'; + const definition = this.normalizeTypeDefs(this.typeDefs); + schemas = schemas.concat([{ definition, directives }]); + } + + const newContext = { + ...context, + cache, + // Getting an entry's cache key is useful for local state resolvers. + getCacheKey: (obj: { __typename: string; id: string | number }) => { + if ((cache as any).config) { + return (cache as any).config.dataIdFromObject(obj); + } else { + throw new Error( + 'To use context.getCacheKey, you need to use a cache that has ' + + 'a configurable dataIdFromObject, like apollo-cache-inmemory.', + ); + } + }, + schemas, + }; + + return newContext; + } + + // To support `@client @export(as: "someVar")` syntax, we'll first resolve + // @client @export fields locally, then pass the resolved values back to be + // used alongside the original operation variables. + public async addExportedVariables( + document: DocumentNode, + variables: OperationVariables = {}, + context = {}, + ) { + let exportedVariables: Record = {}; + + if (document) { + const rootValue = this.buildRootValueFromCache(document, variables); + const updatedContext = this.prepareContext(context); + const data = await this.resolveDocument( + document, + rootValue || {}, + updatedContext, + variables, + ); + exportedVariables = data.exportedVariables; + } + + return { + ...variables, + ...exportedVariables, + }; + } + + public resetInitializers() { + this.firedInitializers = []; + } + + private mergeInitializers( + initializers: Initializers | Initializers[], + ) { + let mergedInitializers: Initializers = {}; + if (Array.isArray(initializers)) { + initializers.forEach(initializerGroup => { + mergedInitializers = { ...mergedInitializers, ...initializerGroup }; + }); + } else { + mergedInitializers = initializers; + } + return mergedInitializers; + } + + private processInitializers( + initializers: Initializers, + runFunc: (fieldName: string, initializer: any) => any, + ) { + const alreadyFired: string[] = []; + + Object.keys(initializers).forEach(fieldName => { + if (this.firedInitializers.indexOf(fieldName) < 0) { + runFunc(fieldName, initializers[fieldName]); + this.firedInitializers.push(fieldName); + } else { + alreadyFired.push(fieldName); + } + }); + + if (alreadyFired.length > 0) { + warnOnceInDevelopment( + "You're attempting to re-fire initializers for fields that have " + + 'already been initalized once. These repeat initializer calls have ' + + 'been ignored. If you really want them to run again, ' + + 'call `ApolloClient.resetInitializers()` first. ' + + `Fields: ${alreadyFired.join(', ')}`, + ); + } + } + + // Query the cache and return matching data. + private buildRootValueFromCache( + document: DocumentNode, + variables?: Record, + ) { + const query = buildQueryFromSelectionSet(document); + const cachedData = this.cache.diff({ + query, + variables, + optimistic: false, + }); + return cachedData.result; + } + + private normalizeTypeDefs( + typeDefs: string | string[] | DocumentNode | DocumentNode[], + ) { + const defs = Array.isArray(typeDefs) ? typeDefs : [typeDefs]; + + return defs + .map(typeDef => (typeof typeDef === 'string' ? typeDef : print(typeDef))) + .map(str => str.trim()) + .join('\n'); + } + + private async resolveDocument( + document: DocumentNode, + rootValue?: any, + context?: any, + variables?: VariableMap, + execOptions: ExecOptions = {}, + ) { + const mainDefinition = getMainDefinition(document); + const fragments = getFragmentDefinitions(document); + const fragmentMap = createFragmentMap(fragments); + const resultMapper = execOptions.resultMapper; + + const definitionOperation = (mainDefinition) + .operation; + let defaultOperationType: string | null = definitionOperation + ? capitalizeFirstLetter(definitionOperation) + : 'Query'; + + // Default matcher always matches all fragments. + const fragmentMatcher = execOptions.fragmentMatcher || (() => true); + + const { cache, client } = this; + const execContext: ExecContext = { + fragmentMap, + context: { + ...(context || {}), + cache, + client, + }, + variables: variables || {}, + resultMapper, + fragmentMatcher, + defaultOperationType, + exportedVariables: {}, + }; + + const result = await this.resolveSelectionSet( + mainDefinition.selectionSet, + rootValue, + execContext, + ); + + return { + result, + exportedVariables: execContext.exportedVariables, + }; + } + + private async resolveSelectionSet( + selectionSet: SelectionSetNode, + rootValue: any, + execContext: ExecContext, + ) { + const { fragmentMap, context, variables } = execContext; + const result: Record = {}; + + const execute = async (selection: SelectionNode) => { + if (!shouldInclude(selection, variables)) { + // Skip this entirely. + return; + } + + if (isField(selection)) { + const fieldResult = await this.resolveField( + selection, + rootValue, + execContext, + ); + const resultFieldKey = resultKeyNameFromField(selection); + + if (fieldResult !== undefined) { + if (result[resultFieldKey] === undefined) { + result[resultFieldKey] = fieldResult; + } else { + this.mergeIntoResults(result[resultFieldKey], fieldResult); + } + } + } else { + let fragment: InlineFragmentNode | FragmentDefinitionNode; + + if (isInlineFragment(selection)) { + fragment = selection; + } else { + // This is a named fragment. + fragment = fragmentMap[selection.name.value]; + if (!fragment) { + throw new Error(`No fragment named ${selection.name.value}`); + } + } + + if (fragment && fragment.typeCondition) { + const typeCondition = fragment.typeCondition.name.value; + if (execContext.fragmentMatcher(rootValue, typeCondition, context)) { + const fragmentResult = await this.resolveSelectionSet( + fragment.selectionSet, + rootValue, + execContext, + ); + this.mergeIntoResults(result, fragmentResult); + } + } + } + + return Promise.resolve(undefined); + }; + + await Promise.all(selectionSet.selections.map(execute)); + + return execContext.resultMapper + ? execContext.resultMapper(result, rootValue) + : result; + } + + private async resolveField( + field: FieldNode, + rootValue: any, + execContext: ExecContext, + ): Promise { + const { variables } = execContext; + const fieldName = field.name.value; + const args = argumentsObjectFromField(field, variables); + + const aliasedFieldName = resultKeyNameFromField(field); + const info: ExecInfo = { + isLeaf: !field.selectionSet, + resultKey: aliasedFieldName, + directives: getDirectiveInfoFromField(field, variables), + }; + + const aliasUsed = fieldName !== aliasedFieldName; + + let result; + const resolverType = + rootValue.__typename || execContext.defaultOperationType; + const resolverMap = (this.resolvers as any)[resolverType]; + if (resolverMap) { + const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; + if (resolve) { + result = await resolve(rootValue, args, execContext.context, info); + } + } + + if (result === undefined) { + result = rootValue[aliasedFieldName] || rootValue[fieldName]; + } + + // If an @export directive is associated with the current field, store + // the `as` export variable name and current result for later use. + if (info.directives && info.directives.export) { + const exportedVariable = info.directives.export.as; + execContext.exportedVariables[exportedVariable] = result; + } + + // Handle all scalar types here. + if (!field.selectionSet) { + return result; + } + + // From here down, the field has a selection set, which means it's trying + // to query a GraphQLObjectType. + if (result == null) { + // Basically any field in a GraphQL response can be null, or missing + return result; + } + + if (Array.isArray(result)) { + return this.resolveSubSelectedArray(field, result, execContext); + } + + // Returned value is an object, and the query has a sub-selection. Recurse. + if (field.selectionSet) { + return this.resolveSelectionSet(field.selectionSet, result, execContext); + } + } + + private resolveSubSelectedArray( + field: FieldNode, + result: any, + execContext: ExecContext, + ): any { + return Promise.all( + result.map((item: any) => { + if (item === null) { + return null; + } + + // This is a nested array, recurse. + if (Array.isArray(item)) { + return this.resolveSubSelectedArray(field, item, execContext); + } + + // This is an object, run the selection set on it. + if (field.selectionSet) { + return this.resolveSelectionSet(field.selectionSet, item, execContext); + } + }), + ); + } + + private mergeIntoResults( + dest: Record, + src: Record, + ) { + if (src !== null && typeof src === 'object') { + Object.keys(src).forEach((key: string) => { + const srcVal = src[key]; + if (!Object.prototype.hasOwnProperty.call(dest, key)) { + dest[key] = srcVal; + } else { + this.mergeIntoResults(dest[key], srcVal); + } + }); + } + } +} diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index ad43ceee3c4..3c06fa7941d 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -117,8 +117,27 @@ export class ObservableQuery< return new Promise((resolve, reject) => { let subscription: Subscription; const observer: Observer> = { - next(result: ApolloQueryResult) { - resolve(result); + async next(result: ApolloQueryResult) { + // If a local resolver policy of `resolver-always` is set, fire all + // local resolvers using the current result as the starting data + // set. Override the result data with the local resolver + // modified data set. + let modifiedResult = result; + if (that.options.resolverPolicy === 'resolver-always') { + const { query, variables, context } = that.options; + const localState = that.queryManager.getLocalState(); + const modifiedData = await localState.runResolvers({ + document: query, + remoteResult: result.data, + context, + variables, + }); + if (modifiedData && Object.keys(modifiedData).length > 0) { + modifiedResult.data = modifiedData as TData; + } + } + + resolve(modifiedResult); // Stop the query within the QueryManager if we can before // this function returns. @@ -176,6 +195,19 @@ export class ObservableQuery< }; } + // Variables might have been added dynamically at query time, when + // using `@client @export(as: "varname")` for example. When this happens, + // the variables have been updated in the query store, but not updated on + // the original `ObservableQuery`. We'll update the observable query + // variables here to match, so retrieving from the cache doesn't fail. + if (queryStoreValue && queryStoreValue.variables) { + this.options.variables = Object.assign( + {}, + this.options.variables, + queryStoreValue.variables, + ); + } + const { data, partial } = this.queryManager.getCurrentQueryResult(this); const queryLoading = diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index e45e93ec382..260a70b9c50 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -11,14 +11,14 @@ import { getQueryDefinition, isProduction, hasDirectives, + graphQLResultHasError, + hasClientExports, } from 'apollo-utilities'; import { QueryScheduler } from '../scheduler/scheduler'; import { isApolloError, ApolloError } from '../errors/ApolloError'; - import { Observer, Subscription, Observable } from '../util/Observable'; - import { QueryWithUpdater, DataStore } from '../data/store'; import { MutationStore } from '../data/mutations'; import { QueryStore, QueryStoreValue } from '../data/queries'; @@ -37,7 +37,7 @@ import { FetchType, OperationVariables, } from './types'; -import { graphQLResultHasError } from 'apollo-utilities'; +import { LocalState } from './LocalState'; export interface QueryInfo { listeners: QueryListener[]; @@ -63,6 +63,7 @@ export class QueryManager { private deduplicator: ApolloLink; private queryDeduplication: boolean; private clientAwareness: Record = {}; + private localState: LocalState; private onBroadcast: () => void; @@ -90,6 +91,7 @@ export class QueryManager { onBroadcast = () => undefined, ssrMode = false, clientAwareness = {}, + localState, }: { link: ApolloLink; queryDeduplication?: boolean; @@ -97,6 +99,7 @@ export class QueryManager { onBroadcast?: () => void; ssrMode?: boolean; clientAwareness?: Record; + localState?: LocalState; }) { this.link = link; this.deduplicator = ApolloLink.from([new Deduplicator(), link]); @@ -104,6 +107,7 @@ export class QueryManager { this.dataStore = store; this.onBroadcast = onBroadcast; this.clientAwareness = clientAwareness; + this.localState = localState || new LocalState({ cache: store.getCache() }); this.scheduler = new QueryScheduler({ queryManager: this, ssrMode }); } @@ -118,7 +122,7 @@ export class QueryManager { }); } - public mutate({ + public async mutate({ mutation, variables, optimisticResponse, @@ -173,12 +177,25 @@ export class QueryManager { return ret; }; - this.mutationStore.initMutation(mutationId, mutation, variables); + const updatedVariables: OperationVariables = + hasClientExports(mutation) + ? await this.localState.addExportedVariables( + mutation, + variables, + context, + ) + : variables; + + this.mutationStore.initMutation( + mutationId, + mutation, + updatedVariables, + ); this.dataStore.markMutationInit({ mutationId, document: mutation, - variables: variables || {}, + variables: updatedVariables || {}, updateQueries: generateUpdateQueriesInfo(), update: updateWithProxyFn, optimisticResponse, @@ -190,7 +207,7 @@ export class QueryManager { let storeResult: FetchResult | null; let error: ApolloError; - const operation = this.buildOperationForLink(mutation, variables, { + const operation = this.buildOperationForLink(mutation, updatedVariables, { ...context, optimisticResponse, }); @@ -260,39 +277,79 @@ export class QueryManager { }); }; - execute(this.link, operation).subscribe({ - next: (result: ExecutionResult) => { + const clientQuery = this.localState.clientQuery(operation.query); + const serverQuery = this.localState.serverQuery(operation.query); + if (serverQuery) { + operation.query = serverQuery; + } + + const obs: Observable = serverQuery + ? execute(this.link, operation) + : Observable.of({ + data: {}, + }); + + const self = this; + let complete = false; + let handlingNext = false; + obs.subscribe({ + next: async (result: ExecutionResult) => { + handlingNext = true; + if (graphQLResultHasError(result) && errorPolicy === 'none') { + handlingNext = false; error = new ApolloError({ graphQLErrors: result.errors, }); return; } - this.mutationStore.markMutationResult(mutationId); + self.mutationStore.markMutationResult(mutationId); + let updatedResult = result; + const { context, variables } = operation; + + // Run the query through local client resolvers. + if (clientQuery && hasDirectives(['client'], clientQuery)) { + updatedResult.data = await self.localState.runResolvers({ + document: clientQuery, + remoteResult: result.data, + context, + variables, + onError(error) { + handlingNext = false; + reject(error); + }, + }); + } if (fetchPolicy !== 'no-cache') { - this.dataStore.markMutationResult({ + self.dataStore.markMutationResult({ mutationId, - result, + result: updatedResult, document: mutation, - variables: variables || {}, + variables: updatedVariables || {}, updateQueries: generateUpdateQueriesInfo(), update: updateWithProxyFn, }); } - storeResult = result as FetchResult; + + storeResult = updatedResult as FetchResult; + + handlingNext = false; + if (complete) { + completeMutation().then(resolve, reject); + } }, - error: (err: Error) => { - this.mutationStore.markMutationError(mutationId, err); - this.dataStore.markMutationComplete({ + error(err: Error) { + self.mutationStore.markMutationError(mutationId, err); + self.dataStore.markMutationComplete({ mutationId, optimisticResponse, }); - this.broadcastQueries(); + self.broadcastQueries(); - this.setQuery(mutationId, () => ({ document: undefined })); + self.setQuery(mutationId, () => ({ document: undefined })); reject( new ApolloError({ networkError: err, @@ -300,12 +357,17 @@ export class QueryManager { ); }, - complete: () => completeMutation().then(resolve, reject), + complete() { + if (!handlingNext) { + completeMutation().then(resolve, reject); + } + complete = true; + }, }); }); } - public fetchQuery( + public async fetchQuery( queryId: string, options: WatchQueryOptions, fetchType?: FetchType, @@ -318,11 +380,21 @@ export class QueryManager { variables = {}, metadata = null, fetchPolicy = 'cache-first', // cache-first is the default fetch policy. + context = {}, } = options; const cache = this.dataStore.getCache(); - const query = cache.transformDocument(options.query); + const updatedVariables: OperationVariables = + hasClientExports(query) + ? await this.localState.addExportedVariables(query, variables, context) + : variables; + + const updatedOptions: WatchQueryOptions = { + ...options, + ...{ variables: updatedVariables }, + }; + let storeResult: any; let needToFetch: boolean = fetchPolicy === 'network-only' || fetchPolicy === 'no-cache'; @@ -337,7 +409,7 @@ export class QueryManager { ) { const { complete, result } = this.dataStore.getCache().diff({ query, - variables, + variables: updatedVariables, returnPartialData: true, optimistic: false, }); @@ -356,7 +428,7 @@ export class QueryManager { const requestId = this.generateRequestId(); // set up a watcher to listen to cache updates - const cancel = this.updateQueryWatch(queryId, query, options); + const cancel = this.updateQueryWatch(queryId, query, updatedOptions); // Initialize query in store with unique requestId this.setQuery(queryId, () => ({ @@ -372,7 +444,7 @@ export class QueryManager { queryId, document: query, storePreviousVariables: shouldFetch, - variables, + variables: updatedVariables, isPoll: fetchType === FetchType.poll, isRefetch: fetchType === FetchType.refetch, metadata, @@ -385,12 +457,9 @@ export class QueryManager { // fetchPolicy is cache-only), we just write the store result as the final result. const shouldDispatchClientResult = !shouldFetch || fetchPolicy === 'cache-and-network'; - if (shouldDispatchClientResult) { this.queryStore.markQueryResultClient(queryId, !shouldFetch); - this.invalidate(true, queryId, fetchMoreForQueryId); - this.broadcastQueries(); } @@ -399,7 +468,7 @@ export class QueryManager { requestId, queryId, document: query, - options, + options: updatedOptions, fetchMoreForQueryId, }).catch(error => { // This is for the benefit of `refetch` promises, which currently don't get their errors @@ -823,6 +892,10 @@ export class QueryManager { // begin removing data from the store const reset = this.dataStore.reset(); + + // Reset initializer tracking. + this.localState.resetInitializers(); + return reset; } @@ -881,8 +954,10 @@ export class QueryManager { options.variables, ); + let updatedVariables = variables; let sub: Subscription; let observers: Observer[] = []; + const clientQuery = this.localState.clientQuery(transformedDoc); return new Observable(observer => { observers.push(observer); @@ -890,13 +965,29 @@ export class QueryManager { // If this is the first observer, actually initiate the network // subscription. if (observers.length === 1) { + let activeNextCalls = 0; + let complete = false; + const handler = { - next: (result: FetchResult) => { + next: async (result: FetchResult) => { + activeNextCalls += 1; + let updatedResult = result; + + // Run the query through local client resolvers. + if (clientQuery && hasDirectives(['client'], clientQuery)) { + updatedResult.data = await this.localState.runResolvers({ + document: clientQuery, + remoteResult: result.data, + context: {}, + variables: updatedVariables, + }); + } + if (isCacheEnabled) { this.dataStore.markSubscriptionResult( - result, + updatedResult, transformedDoc, - variables, + updatedVariables, ); this.broadcastQueries(); } @@ -908,16 +999,21 @@ export class QueryManager { // still passing any errors that might occur into the `next` // handler, to give that handler a chance to deal with the // error (we're doing this for backwards compatibilty). - if (graphQLResultHasError(result) && obs.error) { + if (graphQLResultHasError(updatedResult) && obs.error) { obs.error( new ApolloError({ - graphQLErrors: result.errors, + graphQLErrors: updatedResult.errors, }), ); } else if (obs.next) { - obs.next(result); + obs.next(updatedResult); } + activeNextCalls -= 1; }); + + if (activeNextCalls === 0 && complete) { + handler.complete(); + } }, error: (error: Error) => { observers.forEach(obs => { @@ -927,18 +1023,36 @@ export class QueryManager { }); }, complete: () => { - observers.forEach(obs => { - if (obs.complete) { - obs.complete(); - } - }); + if (activeNextCalls === 0) { + observers.forEach(obs => { + if (obs.complete) { + obs.complete(); + } + }); + } + complete = true; } }; - // TODO: Should subscriptions also accept a `context` option to pass - // through to links? - const operation = this.buildOperationForLink(transformedDoc, variables); - sub = execute(this.link, operation).subscribe(handler); + (async () => { + const updatedVariables: OperationVariables = + hasClientExports(transformedDoc) + ? await this.localState.addExportedVariables( + transformedDoc, + variables + ) + : variables; + const serverQuery = this.localState.serverQuery(transformedDoc); + if (serverQuery) { + const operation = this.buildOperationForLink( + serverQuery, + updatedVariables, + ); + sub = execute(this.link, operation).subscribe(handler); + } else { + sub = Observable.of({ data: {} }).subscribe(handler); + } + })(); } return () => { @@ -971,6 +1085,7 @@ export class QueryManager { const { variables, query } = observableQuery.options; const lastResult = observableQuery.getLastResult(); const { newData } = this.getQuery(observableQuery.queryId); + // XXX test this if (newData && newData.complete) { return { data: newData.result, partial: false }; @@ -983,7 +1098,6 @@ export class QueryManager { previousResult: lastResult ? lastResult.data : undefined, optimistic, }); - return { data, partial: false }; } catch (e) { return { data: {}, partial: true }; @@ -1038,6 +1152,10 @@ export class QueryManager { }); } + public getLocalState(): LocalState { + return this.localState; + } + private getObservableQueryPromises( includeStandby?: boolean, ): Promise>[] { @@ -1078,50 +1196,81 @@ export class QueryManager { fetchMoreForQueryId?: string; }): Promise> { const { variables, context, errorPolicy = 'none', fetchPolicy } = options; - const operation = this.buildOperationForLink(document, variables, { - ...context, - // TODO: Should this be included for all entry points via - // buildOperationForLink? - forceFetch: !this.queryDeduplication, - }); - let resultFromStore: any; let errorsFromStore: any; let rejectFetchPromise: (reason?: any) => void; return new Promise>((resolve, reject) => { + let obs: Observable; + let updatedContext = {}; + + const clientQuery = this.localState.clientQuery(document); + const serverQuery = this.localState.serverQuery(document); + if (serverQuery) { + const operation = this.buildOperationForLink(serverQuery, variables, { + ...context, + forceFetch: !this.queryDeduplication, + }); + updatedContext = operation.context; + obs = execute(this.deduplicator, operation); + } else { + updatedContext = this.prepareContext(context); + obs = Observable.of({ data: {} }); + } + // Need to assign the reject function to the rejectFetchPromise variable // in the outer scope so that we can refer to it in the .catch handler. this.fetchQueryRejectFns.add(rejectFetchPromise = reject); - const subscription = execute(this.deduplicator, operation).subscribe({ - next: (result: ExecutionResult) => { + let complete = false; + let handlingNext = true; + + const subscriber = { + next: async (result: ExecutionResult) => { + handlingNext = true; + let updatedResult = result; + // default the lastRequestId to 1 const { lastRequestId } = this.getQuery(queryId); if (requestId >= (lastRequestId || 1)) { + // Run the query through local client resolvers. + if (clientQuery && hasDirectives(['client'], clientQuery)) { + updatedResult.data = await this.localState.runResolvers({ + document: clientQuery, + remoteResult: result.data, + context: updatedContext, + variables, + onError(error) { + handlingNext = false; + reject(error); + }, + }); + } + if (fetchPolicy !== 'no-cache') { try { this.dataStore.markQueryResult( - result, + updatedResult, document, variables, fetchMoreForQueryId, errorPolicy === 'ignore' || errorPolicy === 'all', ); } catch (e) { + handlingNext = false; reject(e); return; } } else { this.setQuery(queryId, () => ({ - newData: { result: result.data, complete: true }, + newData: { result: updatedResult.data, complete: true }, })); } this.queryStore.markQueryResult( queryId, - result, + updatedResult, fetchMoreForQueryId, ); @@ -1130,21 +1279,22 @@ export class QueryManager { this.broadcastQueries(); } - if (result.errors && errorPolicy === 'none') { + if (updatedResult.errors && errorPolicy === 'none') { + handlingNext = false; reject( new ApolloError({ - graphQLErrors: result.errors, + graphQLErrors: updatedResult.errors, }), ); return; } else if (errorPolicy === 'all') { - errorsFromStore = result.errors; + errorsFromStore = updatedResult.errors; } if (fetchMoreForQueryId || fetchPolicy === 'no-cache') { // We don't write fetchMore results to the store because this would overwrite // the original result in case an @connection directive is used. - resultFromStore = result.data; + resultFromStore = updatedResult.data; } else { try { // ensure result is combined with data already in store @@ -1158,6 +1308,11 @@ export class QueryManager { // tslint:disable-next-line } catch (e) {} } + + handlingNext = false; + if (complete) { + subscriber.complete(); + } }, error: (error: ApolloError) => { this.fetchQueryRejectFns.delete(reject); @@ -1169,21 +1324,25 @@ export class QueryManager { reject(error); }, complete: () => { - this.fetchQueryRejectFns.delete(reject); - - this.setQuery(queryId, ({ subscriptions }) => ({ - subscriptions: subscriptions.filter(x => x !== subscription), - })); - - resolve({ - data: resultFromStore, - errors: errorsFromStore, - loading: false, - networkStatus: NetworkStatus.ready, - stale: false, - }); + if (!handlingNext) { + this.fetchQueryRejectFns.delete(reject); + this.setQuery(queryId, ({ subscriptions }) => ({ + subscriptions: subscriptions.filter(x => x !== subscription), + })); + + resolve({ + data: resultFromStore, + errors: errorsFromStore, + loading: false, + networkStatus: NetworkStatus.ready, + stale: false, + }); + } + complete = true; }, - }); + }; + + const subscription = obs.subscribe(subscriber); this.setQuery(queryId, ({ subscriptions }) => ({ subscriptions: subscriptions.concat([subscription]), @@ -1255,29 +1414,21 @@ export class QueryManager { extraContext?: any, ) { const cache = this.dataStore.getCache(); - return { query: cache.transformForLink ? cache.transformForLink(document) : document, variables, operationName: getOperationName(document) || undefined, - context: { - ...extraContext, - cache, - // getting an entry's cache key is useful for cacheResolvers & state-link - getCacheKey: (obj: { __typename: string; id: string | number }) => { - if ((cache as any).config) { - // on the link, we just want the id string, not the full id value from toIdValue - return (cache as any).config.dataIdFromObject(obj); - } else { - throw new Error( - 'To use context.getCacheKey, you need to use a cache that has a configurable dataIdFromObject, like apollo-cache-inmemory.', - ); - } - }, - clientAwareness: this.clientAwareness, - }, + context: this.prepareContext(extraContext), + }; + } + + private prepareContext(context = {}) { + const newContext = this.localState.prepareContext(context); + return { + ...newContext, + clientAwareness: this.clientAwareness, }; } } diff --git a/packages/apollo-client/src/core/__tests__/QueryManager/index.ts b/packages/apollo-client/src/core/__tests__/QueryManager/index.ts index 225af84aa41..540eeac842c 100644 --- a/packages/apollo-client/src/core/__tests__/QueryManager/index.ts +++ b/packages/apollo-client/src/core/__tests__/QueryManager/index.ts @@ -1613,7 +1613,7 @@ describe('QueryManager', () => { ); }); - it('warns if you forget the template literal tag', () => { + it('warns if you forget the template literal tag', async () => { const queryManager = mockQueryManager(); expect(() => { queryManager.query({ @@ -1622,12 +1622,12 @@ describe('QueryManager', () => { }); }).toThrowError(/wrap the query string in a "gql" tag/); - expect(() => { + await expect( queryManager.mutate({ // Bamboozle TypeScript into letting us do this mutation: ('string' as any) as DocumentNode, - }); - }).toThrowError(/wrap the query string in a "gql" tag/); + }) + ).rejects.toThrow(/wrap the query string in a "gql" tag/); expect(() => { queryManager.watchQuery({ @@ -3490,7 +3490,7 @@ describe('QueryManager', () => { }); }); - it('should only refetch once when we refetch observable queries', () => { + it.only('should only refetch once when we refetch observable queries', (done) => { let queryManager: QueryManager; const query = gql` query { @@ -3544,6 +3544,7 @@ describe('QueryManager', () => { // only refetch once and make sure data has changed expect(stripSymbols(result.data)).toEqual(data2); expect(timesFired).toBe(2); + done(); }, ).catch(e => { done.fail(e); diff --git a/packages/apollo-client/src/core/types.ts b/packages/apollo-client/src/core/types.ts index 4df7e21bf9c..64f3697cbb3 100644 --- a/packages/apollo-client/src/core/types.ts +++ b/packages/apollo-client/src/core/types.ts @@ -1,7 +1,9 @@ +import { FetchResult } from 'apollo-link'; import { DocumentNode, GraphQLError } from 'graphql'; + +import ApolloClient from '../ApolloClient'; import { QueryStoreValue } from '../data/queries'; import { NetworkStatus } from './networkStatus'; -import { FetchResult } from 'apollo-link'; export type QueryListener = ( queryStoreValue: QueryStoreValue, @@ -43,3 +45,18 @@ export type MutationQueryReducer = ( export type MutationQueryReducersMap = { [queryName: string]: MutationQueryReducer; }; + +export interface Initializers { + [field: string]: (client: ApolloClient) => any; +} + +export interface Resolvers { + [key: string]: { + [field: string]: ( + rootValue?: any, + args?: any, + context?: any, + info?: any, + ) => any; + }; +} diff --git a/packages/apollo-client/src/core/watchQueryOptions.ts b/packages/apollo-client/src/core/watchQueryOptions.ts index 7a0c9d57710..5b4fc3821ef 100644 --- a/packages/apollo-client/src/core/watchQueryOptions.ts +++ b/packages/apollo-client/src/core/watchQueryOptions.ts @@ -15,7 +15,6 @@ import { PureQueryOptions, OperationVariables } from './types'; * - network-only: return result from network, fail if network call doesn't succeed, save to cache * - standby: only for queries that aren't actively watched, but should be available for refetch and updateQueries. */ - export type FetchPolicy = | 'cache-first' | 'cache-and-network' @@ -30,9 +29,29 @@ export type FetchPolicy = * - ignore: errors from the request do not stop the observable, but also don't call `next` * - all: errors are treated like data and will notify observables */ - export type ErrorPolicy = 'none' | 'ignore' | 'all'; +/** + * `resolverPolicy` can be used to control when Apollo Client's local state + * resolvers (`@client`) are fired. The options are: + * + * - cache-first (default): By default, local resolvers only fire if a field + * value can't be found in the cache first (unless + * `fetchPolicy` is set to `no-cache` or + * `network-only`, in which case local resolvers are + * fired on each request, since they're then treated + * just like network based resolvers). + * - resolver-always: When this option is set, queries resolve using the cache + * as they would normally, which means if a `@client` + * field can be found in the cache (and the `fetchPolicy` + * is not `no-cache` or `network-only`), it will be loaded. + * After the vaue is done loading from the cache however, + * if a local resolver is specified for the field in + * question, it will then be fired and override the loaded + * cache value, which will be returned in the query response. + */ +export type ResolverPolicy = 'cache-first' | 'resolver-always'; + /** * Common options shared across all query interfaces. */ @@ -53,6 +72,11 @@ export interface QueryBaseOptions { */ errorPolicy?: ErrorPolicy; + /** + * Specifies the {@link ResolverPolicy} to be used for this query + */ + resolverPolicy?: ResolverPolicy; + /** * Whether or not to fetch results */ @@ -113,7 +137,11 @@ export interface FetchMoreQueryOptions { variables?: Pick; } -export type UpdateQueryFn = ( +export type UpdateQueryFn< + TData = any, + TVariables = OperationVariables, + TSubscriptionData = TData +> = ( previousQueryResult: TData, options: { subscriptionData: { data: TSubscriptionData }; diff --git a/packages/apollo-client/src/index.ts b/packages/apollo-client/src/index.ts index fcb7db015e5..d8d86d9d66b 100644 --- a/packages/apollo-client/src/index.ts +++ b/packages/apollo-client/src/index.ts @@ -21,10 +21,10 @@ export * from './core/types'; export { isApolloError, ApolloError } from './errors/ApolloError'; -import ApolloClient, { ApolloClientOptions } from './ApolloClient'; +import ApolloClient, { ApolloClientOptions, DefaultOptions } from './ApolloClient'; +export { ApolloClientOptions, DefaultOptions }; -export { ApolloClientOptions }; - -// export the client as both default and named +// Export the client as both default and named. export { ApolloClient }; export default ApolloClient; + diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 7ca272f338b..d708b26e947 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.1.27", + "version": "4.2.0-alpha.9", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.umd.js", "module": "./lib/index.js", @@ -13,7 +13,7 @@ "test": "jest", "build": "tsc", "postbuild": "npm run bundle", - "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js && ../../node_modules/rollup/bin/rollup -c rollup.async.config.js", + "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js && ../../node_modules/rollup/bin/rollup -c rollup.async.config.js && cp ./lib/graphql-async.d.ts ./lib/async.d.ts", "watch": "tsc -w", "prepublishOnly": "npm run build", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", From 39a8c81a1d8da82601339978ad527590b502e565 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:29:25 -0500 Subject: [PATCH 006/230] Local state test suite Various tests to cover Apollo Client local state handling. --- .../local-state/__snapshots__/general.ts.snap | 5 + .../__snapshots__/typeDefs.ts.snap | 37 + .../src/__tests__/local-state/export.ts | 587 ++++++++ .../src/__tests__/local-state/general.ts | 1272 +++++++++++++++++ .../src/__tests__/local-state/initializers.ts | 232 +++ .../src/__tests__/local-state/resolvers.ts | 907 ++++++++++++ .../__tests__/local-state/subscriptions.ts | 87 ++ .../src/__tests__/local-state/typeDefs.ts | 92 ++ 8 files changed, 3219 insertions(+) create mode 100644 packages/apollo-client/src/__tests__/local-state/__snapshots__/general.ts.snap create mode 100644 packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap create mode 100644 packages/apollo-client/src/__tests__/local-state/export.ts create mode 100644 packages/apollo-client/src/__tests__/local-state/general.ts create mode 100644 packages/apollo-client/src/__tests__/local-state/initializers.ts create mode 100644 packages/apollo-client/src/__tests__/local-state/resolvers.ts create mode 100644 packages/apollo-client/src/__tests__/local-state/subscriptions.ts create mode 100644 packages/apollo-client/src/__tests__/local-state/typeDefs.ts diff --git a/packages/apollo-client/src/__tests__/local-state/__snapshots__/general.ts.snap b/packages/apollo-client/src/__tests__/local-state/__snapshots__/general.ts.snap new file mode 100644 index 00000000000..adb045df4da --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/__snapshots__/general.ts.snap @@ -0,0 +1,5 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Combining client and server state/operations should correctly propagate an error from a client resolver 1`] = `"Network error: Illegal Query Operation Occurred"`; + +exports[`Combining client and server state/operations should correctly propagate an error from a client resolver 2`] = `"Illegal Mutation Operation Occurred"`; diff --git a/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap b/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap new file mode 100644 index 00000000000..a1a46ea8877 --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap @@ -0,0 +1,37 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Default use should add a schema string in SDL format to the context as definition if typeDefs are passed in 1`] = ` +Array [ + Object { + "definition": "type Todo { + id: String + message: String! + } + + type Query { + todo(id: String!): Todo + }", + "directives": "directive @client on FIELD", + }, +] +`; + +exports[`Default use should concatenate schema strings if typeDefs are passed in as an array 1`] = ` +Array [ + Object { + "definition": "type Todo { + id: String + message: String! + } + + type Query { + todo(id: String!): Todo + } +type Foo { + foo: String! + bar: String + }", + "directives": "directive @client on FIELD", + }, +] +`; diff --git a/packages/apollo-client/src/__tests__/local-state/export.ts b/packages/apollo-client/src/__tests__/local-state/export.ts new file mode 100644 index 00000000000..6167aa7f8af --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/export.ts @@ -0,0 +1,587 @@ +import gql from 'graphql-tag'; + +import ApolloClient from '../..'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink, Observable } from 'apollo-link'; + +describe('@client @export tests', () => { + it( + 'should not break @client only queries when the @export directive is ' + + 'used', + done => { + const query = gql` + { + field @client @export(as: "someVar") + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + field: () => 1, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ field: 1 }); + done(); + }); + }, + ); + + it( + 'should not break @client only queries when the @export directive is ' + + 'used on nested fields', + done => { + const query = gql` + { + car @client { + engine { + torque @export(as: "torque") + } + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + car: () => ({ + engine: { + cylinders: 8, + torque: 7200, + __typename: 'Engine', + }, + __typename: 'Car', + }), + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + car: { + engine: { + torque: 7200, + }, + }, + }); + done(); + }); + }, + ); + + it( + 'should store the @client field value in the specified @export ' + + 'variable, and make it avilable to a subsequent resolver', + done => { + const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthorId @client @export(as: "authorId") + postCount(authorId: $authorId) @client + } + `; + + const testAuthorId = 100; + const testPostCount = 200; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + currentAuthorId: () => testAuthorId, + }, + resolvers: { + Query: { + postCount(_, { authorId }) { + return authorId === testAuthorId ? testPostCount : 0; + }, + }, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + currentAuthorId: testAuthorId, + postCount: testPostCount, + }); + done(); + }); + }, + ); + + it( + 'should store the @client nested field value in the specified @export ' + + 'variable, and make it avilable to a subsequent resolver', + done => { + const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthor @client { + name + authorId @export(as: "authorId") + } + postCount(authorId: $authorId) @client + } + `; + + const testAuthor = { + name: 'John Smith', + authorId: 100, + __typename: 'Author', + }; + + const testPostCount = 200; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + currentAuthor: () => testAuthor, + }, + resolvers: { + Query: { + postCount(_, { authorId }) { + return authorId === testAuthor.authorId ? testPostCount : 0; + }, + }, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + currentAuthor: testAuthor, + postCount: testPostCount, + }); + done(); + }); + }, + ); + + it('should allow @client @export variables to be used with remote queries', done => { + const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthor @client { + name + authorId @export(as: "authorId") + } + postCount(authorId: $authorId) + } + `; + + const testAuthor = { + name: 'John Smith', + authorId: 100, + __typename: 'Author', + }; + + const testPostCount = 200; + + const link = new ApolloLink(() => + Observable.of({ + data: { + postCount: testPostCount, + }, + }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + currentAuthor: () => testAuthor, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + currentAuthor: testAuthor, + postCount: testPostCount, + }); + done(); + }); + }); + + it( + 'should support @client @export variables that are nested multiple ' + + 'levels deep', + done => { + const query = gql` + query currentAuthorPostCount($authorId: Int!) { + appContainer @client { + systemDetails { + currentAuthor { + name + authorId @export(as: "authorId") + } + } + } + postCount(authorId: $authorId) + } + `; + + const appContainer = { + systemDetails: { + currentAuthor: { + name: 'John Smith', + authorId: 100, + __typename: 'Author', + }, + __typename: 'SystemDetails', + }, + __typename: 'AppContainer', + }; + + const testPostCount = 200; + + const link = new ApolloLink(() => + Observable.of({ + data: { + postCount: testPostCount, + }, + }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + appContainer: () => appContainer, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + appContainer, + postCount: testPostCount, + }); + done(); + }); + }, + ); + + it('should ignore @export directives if not used with @client', done => { + const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthor { + name + authorId @export(as: "authorId") + } + postCount(authorId: $authorId) + } + `; + + const testAuthor = { + name: 'John Smith', + authorId: 100, + __typename: 'Author', + }; + const testPostCount = 200; + + const link = new ApolloLink(() => + Observable.of({ + data: { + currentAuthor: testAuthor, + postCount: testPostCount, + }, + }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + currentAuthor: testAuthor, + postCount: testPostCount, + }); + done(); + }); + }); + + it( + 'should support setting an @client @export variable, loaded from the ' + + 'cache, on a virtual field that is combined into a remote query.', + done => { + const query = gql` + query postRequiringReview($reviewerId: Int!) { + postRequiringReview { + id + title + loggedInReviewerId @client @export(as: "reviewerId") + } + reviewerDetails(reviewerId: $reviewerId) { + name + } + } + `; + + const postRequiringReview = { + id: 10, + title: 'The Local State Conundrum', + __typename: 'Post', + }; + const reviewerDetails = { + name: 'John Smith', + __typename: 'Reviewer', + }; + const loggedInReviewerId = 100; + + const link = new ApolloLink(({ variables }) => { + expect(variables).toMatchObject({ reviewerId: loggedInReviewerId }); + return Observable.of({ + data: { + postRequiringReview, + reviewerDetails, + }, + }); + }); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + postRequiringReview() { + return { + loggedInReviewerId, + __typename: 'Post', + }; + }, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + postRequiringReview: { + id: postRequiringReview.id, + title: postRequiringReview.title, + loggedInReviewerId, + }, + reviewerDetails, + }); + done(); + }); + }, + ); + + it( + 'should support setting a @client @export variable, loaded via a ' + + 'local resolver, on a virtual field that is combined into a remote query.', + done => { + const query = gql` + query postRequiringReview($reviewerId: Int!) { + postRequiringReview { + id + title + currentReviewer @client { + id @export(as: "reviewerId") + } + } + reviewerDetails(reviewerId: $reviewerId) { + name + } + } + `; + + const postRequiringReview = { + id: 10, + title: 'The Local State Conundrum', + __typename: 'Post', + }; + const reviewerDetails = { + name: 'John Smith', + __typename: 'Reviewer', + }; + const currentReviewer = { + id: 100, + __typename: 'CurrentReviewer', + }; + + const link = new ApolloLink(({ variables }) => { + expect(variables).toMatchObject({ reviewerId: currentReviewer.id }); + return Observable.of({ + data: { + postRequiringReview, + reviewerDetails, + }, + }); + }); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + postRequiringReview() { + return { + currentReviewer: { + __typename: 'CurrentReviewer', + }, + __typename: 'Post', + }; + }, + }, + resolvers: { + CurrentReviewer: { + id: () => currentReviewer.id, + }, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + postRequiringReview: { + id: postRequiringReview.id, + title: postRequiringReview.title, + currentReviewer, + }, + reviewerDetails, + }); + done(); + }); + }, + ); + + it( + 'should support combining @client @export variables, calculated by a ' + + 'local resolver, with remote mutations', + done => { + const mutation = gql` + mutation upvotePost($postId: Int!) { + topPost @client @export(as: "postId") + upvotePost(postId: $postId) { + title + votes + } + } + `; + + const testPostId = 100; + const testPost = { + title: 'The Day of the Jackal', + votes: 10, + __typename: 'post', + }; + + const link = new ApolloLink(({ variables }) => { + expect(variables).toMatchObject({ postId: testPostId }); + return Observable.of({ + data: { + upvotePost: testPost, + }, + }); + }); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Mutation: { + topPost() { + return testPostId; + }, + }, + }, + }); + + return client.mutate({ mutation }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + upvotePost: testPost, + }); + done(); + }); + }, + ); + + it( + 'should support combining @client @export variables, calculated by ' + + 'reading from the cache, with remote mutations', + done => { + const mutation = gql` + mutation upvotePost($postId: Int!) { + topPost @client @export(as: "postId") + upvotePost(postId: $postId) { + title + votes + } + } + `; + + const testPostId = 100; + const testPost = { + title: 'The Day of the Jackal', + votes: 10, + __typename: 'post', + }; + + const link = new ApolloLink(({ variables }) => { + expect(variables).toMatchObject({ postId: testPostId }); + return Observable.of({ + data: { + upvotePost: testPost, + }, + }); + }); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + topPost: () => testPostId, + }, + }); + + return client.mutate({ mutation }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + upvotePost: testPost, + }); + done(); + }); + }, + ); + + it( + 'should use the value of the last @export variable defined, if multiple ' + + 'variables are defined with the same name', + done => { + const query = gql` + query reviewerPost($reviewerId: Int!) { + primaryReviewerId @client @export(as: "reviewerId") + secondaryReviewerId @client @export(as: "reviewerId") + post(reviewerId: $reviewerId) { + title + } + } + `; + + const post = { + title: 'The One Post to Rule Them All', + __typename: 'Post', + }; + const primaryReviewerId = 100; + const secondaryReviewerId = 200; + + const link = new ApolloLink(({ variables }) => { + expect(variables).toMatchObject({ reviewerId: secondaryReviewerId }); + return Observable.of({ + data: { + post, + }, + }); + }); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + initializers: { + primaryReviewerId: () => primaryReviewerId, + secondaryReviewerId: () => secondaryReviewerId, + }, + }); + + return client.query({ query }).then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + post, + }); + done(); + }); + }, + ); +}); diff --git a/packages/apollo-client/src/__tests__/local-state/general.ts b/packages/apollo-client/src/__tests__/local-state/general.ts new file mode 100644 index 00000000000..c4df2728e7e --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/general.ts @@ -0,0 +1,1272 @@ +import gql from 'graphql-tag'; +import { DocumentNode, GraphQLError } from 'graphql'; +import { introspectionQuery } from 'graphql/utilities'; + +import ApolloClient from '../..'; +import { ApolloCache } from 'apollo-cache'; +import { + InMemoryCache, + IntrospectionFragmentMatcher, +} from 'apollo-cache-inmemory'; +import { ApolloLink, Observable } from 'apollo-link'; + +describe('General functionality', () => { + it('should not impact normal non-@client use', () => { + const query = gql` + { + field + } + `; + + const link = new ApolloLink(() => Observable.of({ data: { field: 1 } })); + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + count: () => 0, + }, + }, + }); + + return client.query({ query }).then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + }); + }); + + it('should not interfere with server introspection queries', () => { + const query = gql` + ${introspectionQuery} + `; + + const error = new GraphQLError('no introspection result found'); + const link = new ApolloLink(() => Observable.of({ errors: [error] })); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + count: () => 0, + }, + }, + }); + + return client + .query({ query }) + .then(() => { + throw new global.Error('should not call'); + }) + .catch((error: GraphQLError) => + expect(error.message).toMatch(/no introspection/), + ); + }); + + it('should support returning default values from resolvers', () => { + const query = gql` + { + field @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Query: { + field: () => 1, + }, + }, + }); + + return client.query({ query }).then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + }); + }); + + it('should cache data for future lookups', () => { + const query = gql` + { + field @client + } + `; + + let count = 0; + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Query: { + field: () => { + count += 1; + return 1; + }, + }, + }, + }); + + return client + .query({ query }) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + expect(count).toBe(1); + }) + .then(() => + client.query({ query }).then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + expect(count).toBe(1); + }), + ); + }); + + it('should honour `fetchPolicy` settings', () => { + const query = gql` + { + field @client + } + `; + + let count = 0; + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Query: { + field: () => { + count += 1; + return 1; + }, + }, + }, + }); + + return client + .query({ query }) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + expect(count).toBe(1); + }) + .then(() => + client + .query({ query, fetchPolicy: 'network-only' }) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + expect(count).toBe(2); + }), + ); + }); + + it('should work with a custom fragment matcher', () => { + const query = gql` + { + foo { + ... on Bar { + bar @client + } + ... on Baz { + baz @client + } + } + } + `; + + const link = new ApolloLink(() => + Observable.of({ + data: { foo: [{ __typename: 'Bar' }, { __typename: 'Baz' }] }, + }), + ); + + const resolvers = { + Bar: { + bar: () => 'Bar', + }, + Baz: { + baz: () => 'Baz', + }, + }; + + const fragmentMatcher = ( + { __typename }: { __typename: string }, + typeCondition: string, + ) => __typename === typeCondition; + + const client = new ApolloClient({ + cache: new InMemoryCache({ + fragmentMatcher: new IntrospectionFragmentMatcher({ + introspectionQueryResultData: { + __schema: { + types: [ + { + kind: 'UnionTypeDefinition', + name: 'Foo', + possibleTypes: [{ name: 'Bar' }, { name: 'Baz' }], + }, + ], + }, + }, + }), + }), + link, + resolvers, + fragmentMatcher, + }); + + return client.query({ query }).then(({ data }) => { + expect(data).toMatchObject({ foo: [{ bar: 'Bar' }, { baz: 'Baz' }] }); + }); + }); +}); + +describe('Cache manipulation', () => { + it( + 'should be able to query @client fields and the cache without defining ' + + 'local resolvers', + () => { + const query = gql` + { + field @client + } + `; + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + }); + + cache.writeQuery({ query, data: { field: 'yo' } }); + + client + .query({ query }) + .then(({ data }) => expect({ ...data }).toMatchObject({ field: 'yo' })); + }, + ); + + it('should be able to write to the cache using a local mutation', () => { + const query = gql` + { + field @client + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const resolvers = { + Mutation: { + start: (_1: any, _2: any, { cache }: { cache: InMemoryCache }) => { + cache.writeQuery({ query, data: { field: 1 } }); + return { start: true }; + }, + }, + }; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers, + }); + + return client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + }); + }); + + it( + 'should be able to write to the cache with a local mutation and have ' + + 'things rerender automatically', + done => { + const query = gql` + { + field @client + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const resolvers = { + Query: { + field: () => 0, + }, + Mutation: { + start: (_1: any, _2: any, { cache }: { cache: InMemoryCache }) => { + cache.writeQuery({ query, data: { field: 1 } }); + return { start: true }; + }, + }, + }; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers, + }); + + let count = 0; + client.watchQuery({ query }).subscribe({ + next: ({ data }) => { + count++; + if (count === 1) { + expect({ ...data }).toMatchObject({ field: 0 }); + client.mutate({ mutation }); + } + + if (count === 2) { + expect({ ...data }).toMatchObject({ field: 1 }); + done(); + } + }, + }); + }, + ); + + it('should support writing to the cache with a local mutation using variables', () => { + const query = gql` + { + field @client + } + `; + + const mutation = gql` + mutation start($id: ID!) { + start(field: $id) @client { + field + } + } + `; + + const resolvers = { + Mutation: { + start: ( + _1: any, + variables: { field: string }, + { cache }: { cache: ApolloCache }, + ) => { + cache.writeQuery({ query, data: { field: variables.field } }); + return { + __typename: 'Field', + field: variables.field, + }; + }, + }, + }; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers, + }); + + return client + .mutate({ mutation, variables: { id: '1234' } }) + .then(({ data }) => { + expect({ ...data }).toEqual({ + start: { field: '1234', __typename: 'Field' }, + }); + }) + .then(() => client.query({ query })) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: '1234' }); + }); + }); +}); + +describe('Sample apps', () => { + it('should support a simple counter app using local state', done => { + const query = gql` + query GetCount { + count @client + lastCount # stored in db on server + } + `; + + const increment = gql` + mutation Increment($amount: Int = 1) { + increment(amount: $amount) @client + } + `; + + const decrement = gql` + mutation Decrement($amount: Int = 1) { + decrement(amount: $amount) @client + } + `; + + const link = new ApolloLink(operation => { + expect(operation.operationName).toBe('GetCount'); + return Observable.of({ data: { lastCount: 1 } }); + }); + + const client = new ApolloClient({ + link, + cache: new InMemoryCache(), + }); + + const update = ( + query: DocumentNode, + updater: (data: { count: number }, variables: { amount: number }) => any, + ) => { + return ( + result: {}, + variables: { amount: number }, + { cache }: { cache: ApolloCache }, + ): null => { + const data = updater(client.readQuery({ query, variables }), variables); + cache.writeQuery({ query, variables, data }); + return null; + }; + }; + + const resolvers = { + Query: { + count: () => 0, + }, + Mutation: { + increment: update(query, ({ count, ...rest }, { amount }) => ({ + ...rest, + count: count + amount, + })), + decrement: update(query, ({ count, ...rest }, { amount }) => ({ + ...rest, + count: count - amount, + })), + }, + }; + + client.addResolvers(resolvers); + + let count = 0; + client.watchQuery({ query }).subscribe({ + next: ({ data }) => { + count++; + if (count === 1) { + try { + expect({ ...data }).toMatchObject({ count: 0, lastCount: 1 }); + } catch (e) { + done.fail(e); + } + client.mutate({ mutation: increment, variables: { amount: 2 } }); + } + + if (count === 2) { + try { + expect({ ...data }).toMatchObject({ count: 2, lastCount: 1 }); + } catch (e) { + done.fail(e); + } + client.mutate({ mutation: decrement, variables: { amount: 1 } }); + } + if (count === 3) { + try { + expect({ ...data }).toMatchObject({ count: 1, lastCount: 1 }); + } catch (e) { + done.fail(e); + } + done(); + } + }, + error: e => done.fail(e), + complete: done.fail, + }); + }); + + it('should support a simple todo app using local state', done => { + const query = gql` + query GetTasks { + todos @client { + message + title + } + } + `; + + const mutation = gql` + mutation AddTodo($message: String, $title: String) { + addTodo(message: $message, title: $title) @client + } + `; + + const client = new ApolloClient({ + link: ApolloLink.empty(), + cache: new InMemoryCache(), + }); + + interface Todo { + title: string; + message: string; + __typename: string; + } + + const update = ( + query: DocumentNode, + updater: (todos, variables) => any, + ) => { + return ( + result: {}, + variables: Todo, + { cache }: { cache: ApolloCache }, + ): null => { + const data = updater(client.readQuery({ query, variables }), variables); + cache.writeQuery({ query, variables, data }); + return null; + }; + }; + + const resolvers = { + Query: { + todos: () => [], + }, + Mutation: { + addTodo: update(query, ({ todos }, { title, message }: Todo) => ({ + todos: todos.concat([{ message, title, __typename: 'Todo' }]), + })), + }, + }; + + client.addResolvers(resolvers); + + let count = 0; + client.watchQuery({ query }).subscribe({ + next: ({ data }: any) => { + count++; + if (count === 1) { + expect({ ...data }).toMatchObject({ todos: [] }); + client.mutate({ + mutation, + variables: { + title: 'Apollo Client 2.0', + message: 'ship it', + }, + }); + } else if (count === 2) { + expect(data.todos.map((x: Todo) => ({ ...x }))).toMatchObject([ + { + title: 'Apollo Client 2.0', + message: 'ship it', + __typename: 'Todo', + }, + ]); + done(); + } + }, + }); + }); +}); + +describe('Reset/clear store', () => { + it('should allow initializers to be called after the store is reset', done => { + const mutation = gql` + mutation foo { + foo @client + } + `; + + const query = gql` + { + foo @client + } + `; + + const cache = new InMemoryCache(); + const initializers = { + foo: () => 'bar', + }; + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + initializers, + resolvers: { + Mutation: { + foo: (_, $, { cache }) => { + cache.writeData({ data: { foo: 'woo' } }); + return null; + }, + }, + }, + }); + + client.onResetStore(() => + Promise.resolve(client.runInitializers(initializers)), + ); + + client + .query({ query }) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ foo: 'bar' }); + }) + .catch(done.fail); + + client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ foo: 'woo' }); + }) + // Should be default after this reset call + .then(() => client.resetStore()) + .then(() => client.query({ query })) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ foo: 'bar' }); + done(); + }) + .catch(done.fail); + }); + + it( + 'should return initializer data after the store is reset, the ' + + 'initializers are re-run, and Query resolver is specified', + done => { + const counterQuery = gql` + query { + counter @client + } + `; + + const plusMutation = gql` + mutation plus { + plus @client + } + `; + + const cache = new InMemoryCache(); + const initializers = { + counter: () => 10, + }; + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + resolvers: { + Mutation: { + plus: (_, __, { cache }) => { + const { counter } = cache.readQuery({ query: counterQuery }); + const data = { + counter: counter + 1, + }; + cache.writeData({ data }); + return null; + }, + }, + }, + initializers, + }); + + let checkedCount = [10, 11, 12, 10]; + const componentObservable = client.watchQuery({ query: counterQuery }); + componentObservable.subscribe({ + next: ({ data }) => { + try { + expect(data).toMatchObject({ counter: checkedCount.shift() }); + } catch (e) { + done.fail(e); + } + }, + error: done.fail, + complete: done.fail, + }); + + client.onResetStore(() => + Promise.resolve(client.runInitializers(initializers)), + ); + + client + .mutate({ mutation: plusMutation }) + .then(() => { + expect(cache.readQuery({ query: counterQuery })).toMatchObject({ + counter: 11, + }); + expect(client.query({ query: counterQuery })).resolves.toMatchObject({ + data: { counter: 11 }, + }); + }) + .then(() => client.mutate({ mutation: plusMutation })) + .then(() => { + expect(cache.readQuery({ query: counterQuery })).toMatchObject({ + counter: 12, + }); + expect(client.query({ query: counterQuery })).resolves.toMatchObject({ + data: { counter: 12 }, + }); + }) + .then(() => client.resetStore() as Promise) + .then(() => { + expect(client.query({ query: counterQuery })) + .resolves.toMatchObject({ data: { counter: 10 } }) + .then(() => { + expect(checkedCount.length).toBe(0); + done(); + }); + }) + .catch(done.fail); + }, + ); + + it('should return a Query result via resolver after the store has been reset', async () => { + const counterQuery = gql` + query { + counter @client + } + `; + + const plusMutation = gql` + mutation plus { + plus @client + } + `; + + const cache = new InMemoryCache(); + const initializers = { + counter: () => 10, + }; + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + resolvers: { + Query: { + counter: () => 0, + }, + Mutation: { + plus: (_, __, { cache }) => { + const { counter } = cache.readQuery({ query: counterQuery }); + const data = { + counter: counter + 1, + }; + cache.writeData({ data }); + return null; + }, + }, + }, + initializers, + }); + + await client.mutate({ mutation: plusMutation }); + expect(cache.readQuery({ query: counterQuery })).toMatchObject({ + counter: 11, + }); + + await client.mutate({ mutation: plusMutation }); + expect(cache.readQuery({ query: counterQuery })).toMatchObject({ + counter: 12, + }); + await expect(client.query({ query: counterQuery })).resolves.toMatchObject({ + data: { counter: 12 }, + }); + + (client.resetStore() as Promise) + .then(() => { + expect(client.query({ query: counterQuery })) + .resolves.toMatchObject({ data: { counter: 0 } }) + .catch(fail); + }) + .catch(fail); + }); + + it( + 'should return default data from the cache in a Query resolver after ' + + 'the store has been reset, and intializers have been re-run', + async () => { + const counterQuery = gql` + query { + counter @client + } + `; + + const plusMutation = gql` + mutation plus { + plus @client + } + `; + + const cache = new InMemoryCache(); + const initializers = { + counter: () => 10, + }; + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + resolvers: { + Query: { + counter: () => { + return (cache.readQuery({ query: counterQuery }) as any).counter; + }, + }, + Mutation: { + plus: (_, __, { cache }) => { + const { counter } = cache.readQuery({ query: counterQuery }); + const data = { + counter: counter + 1, + }; + cache.writeData({ data }); + return null; + }, + }, + }, + initializers, + }); + + client.onResetStore(() => + Promise.resolve(client.runInitializers(initializers)), + ); + + await client.mutate({ mutation: plusMutation }); + await client.mutate({ mutation: plusMutation }); + expect(cache.readQuery({ query: counterQuery })).toMatchObject({ + counter: 12, + }); + const result = await client.query({ query: counterQuery }); + expect(result).toMatchObject({ + data: { counter: 12 }, + }); + + let called = false; + const componentObservable = client.watchQuery({ query: counterQuery }); + + const unsub = componentObservable.subscribe({ + next: ({ data }) => { + try { + if (called) { + expect(data).toMatchObject({ counter: 10 }); + } + called = true; + } catch (e) { + fail(e); + } + }, + error: fail, + complete: fail, + }); + + const makeTerminatingCheck = (body, done) => { + return (...args) => { + try { + body(...args); + done(); + } catch (error) { + fail(error); + } + }; + }; + + try { + await client.resetStore(); + } catch (error) { + // Do nothing + } + + expect(client.query({ query: counterQuery })) + .resolves.toMatchObject({ data: { counter: 10 } }) + .then( + makeTerminatingCheck( + () => { + unsub.unsubscribe(); + }, + () => { + expect(called); + }, + ), + ) + .catch(fail); + }, + ); + + it( + 'should not find data in the cache via a Query resolver if the store ' + + 'is reset and initializers are not re-run', + done => { + const counterQuery = gql` + query { + counter @client + } + `; + + const cache = new InMemoryCache(); + const initializers = { + counter: () => 10, + }; + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + resolvers: { + Query: { + counter: () => { + try { + return (cache.readQuery({ query: counterQuery }) as any) + .counter; + } catch (error) { + try { + expect(error.message).toMatch(/field counter/); + } catch (e) { + done.fail(e); + } + unsub.unsubscribe(); + done(); + } + return -1; // to remove warning from in-memory-cache + }, + }, + }, + initializers, + }); + + const componentObservable = client.watchQuery({ query: counterQuery }); + + const unsub = componentObservable.subscribe({ + next: ({ data }) => done.fail, + error: done.fail, + complete: done.fail, + }); + + client.resetStore() as Promise; + }, + ); +}); + +describe('Combining client and server state/operations', () => { + it('should merge remote and local state', done => { + const query = gql` + query list { + list(name: "my list") { + items { + id + name + isDone + isSelected @client + } + } + } + `; + + const data = { + list: { + __typename: 'List', + items: [ + { __typename: 'ListItem', id: 1, name: 'first', isDone: true }, + { __typename: 'ListItem', id: 2, name: 'second', isDone: false }, + ], + }, + }; + + const link = new ApolloLink(() => Observable.of({ data })); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Mutation: { + toggleItem: async (_, { id }, { cache }) => { + id = `ListItem:${id}`; + const fragment = gql` + fragment item on ListItem { + __typename + isSelected + } + `; + const previous = cache.readFragment({ fragment, id }); + const data = { + ...previous, + isSelected: !previous.isSelected, + }; + await cache.writeFragment({ + id, + fragment, + data, + }); + + return data; + }, + }, + ListItem: { + isSelected: (source, args, context) => { + expect(source.name).toBeDefined(); + // List items default to an unselected state + return false; + }, + }, + }, + }); + + const observer = client.watchQuery({ query }); + + let count = 0; + const sub = observer.subscribe({ + next: response => { + if (count === 0) { + const initial = { ...data }; + initial.list.items = initial.list.items.map(x => ({ + ...x, + isSelected: false, + })); + expect(response.data).toMatchObject(initial); + } + if (count === 1) { + expect(response.data.list.items[0].isSelected).toBe(true); + expect(response.data.list.items[1].isSelected).toBe(false); + done(); + } + count++; + }, + error: done.fail, + }); + const variables = { id: 1 }; + const mutation = gql` + mutation SelectItem($id: Int!) { + toggleItem(id: $id) @client + } + `; + // After initial result, toggle the state of one of the items + setTimeout(() => { + client.mutate({ mutation, variables }); + }, 10); + }); + + it('should correctly propagate an error from a client resolver', async done => { + const data = { + list: { + __typename: 'List', + items: [ + { __typename: 'ListItem', id: 1, name: 'first', isDone: true }, + { __typename: 'ListItem', id: 2, name: 'second', isDone: false }, + ], + }, + }; + + const link = new ApolloLink(() => Observable.of({ data })); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + hasBeenIllegallyTouched: (_, _v, _c) => { + throw new Error('Illegal Query Operation Occurred'); + }, + }, + + Mutation: { + touchIllegally: (_, _v, _c) => { + throw new Error('Illegal Mutation Operation Occurred'); + }, + }, + }, + }); + + const variables = { id: 1 }; + const query = gql` + query hasBeenIllegallyTouched($id: Int!) { + hasBeenIllegallyTouched(id: $id) @client + } + `; + const mutation = gql` + mutation SelectItem($id: Int!) { + touchIllegally(id: $id) @client + } + `; + + try { + await client.query({ query, variables }); + done.fail('Should have thrown!'); + } catch (e) { + // Test Passed! + expect(() => { + throw e; + }).toThrowErrorMatchingSnapshot(); + } + + try { + await client.mutate({ mutation, variables }); + done.fail('Should have thrown!'); + } catch (e) { + // Test Passed! + expect(() => { + throw e; + }).toThrowErrorMatchingSnapshot(); + } + + done(); + }); + + it('should handle a simple query with both server and client fields', done => { + const query = gql` + query GetCount { + count @client + lastCount + } + `; + const cache = new InMemoryCache(); + + const link = new ApolloLink(operation => { + expect(operation.operationName).toBe('GetCount'); + return Observable.of({ data: { lastCount: 1 } }); + }); + + const client = new ApolloClient({ + cache, + link, + initializers: { + count: () => 0, + }, + }); + + client.watchQuery({ query }).subscribe({ + next: ({ data }) => { + expect({ ...data }).toMatchObject({ count: 0, lastCount: 1 }); + done(); + }, + }); + }); + + it('should support nested quering of both server and client fields', done => { + const query = gql` + query GetUser { + user { + firstName @client + lastName + } + } + `; + + const cache = new InMemoryCache(); + const link = new ApolloLink(operation => { + expect(operation.operationName).toBe('GetUser'); + return Observable.of({ + data: { user: { lastName: 'Doe', __typename: 'User' } }, + }); + }); + + const client = new ApolloClient({ + cache, + link, + initializers: { + user() { + return { + __typename: 'User', + firstName: 'John', + }; + }, + }, + }); + + client.watchQuery({ query }).subscribe({ + next: ({ data }: any) => { + const { user } = data; + try { + expect(user).toMatchObject({ + firstName: 'John', + lastName: 'Doe', + __typename: 'User', + }); + } catch (e) { + done.fail(e); + } + done(); + }, + }); + }); + + it('should combine both server and client mutations', done => { + const query = gql` + query SampleQuery { + count @client + user { + firstName + } + } + `; + + const mutation = gql` + mutation SampleMutation { + incrementCount @client + updateUser(firstName: "Harry") { + firstName + } + } + `; + + const counterQuery = gql` + { + count @client + } + `; + + const userQuery = gql` + { + user { + firstName + } + } + `; + + let watchCount = 0; + const link = new ApolloLink(operation => { + if (operation.operationName === 'SampleQuery') { + return Observable.of({ + data: { user: { __typename: 'User', firstName: 'John' } }, + }); + } + if (operation.operationName === 'SampleMutation') { + return Observable.of({ + data: { updateUser: { __typename: 'User', firstName: 'Harry' } }, + }); + } + }); + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link, + initializers: { + count: () => 0, + }, + resolvers: { + Mutation: { + incrementCount: (_, __, { cache }) => { + const { count } = cache.readQuery({ query: counterQuery }); + const data = { count: count + 1 }; + cache.writeData({ data }); + return null; + }, + }, + }, + }); + + client.watchQuery({ query }).subscribe({ + next: ({ data }: any) => { + if (watchCount === 0) { + expect(data.count).toEqual(0); + expect({ ...data.user }).toMatchObject({ + __typename: 'User', + firstName: 'John', + }); + watchCount += 1; + client.mutate({ + mutation, + update: (proxy, { data: { updateUser } }) => { + proxy.writeQuery({ + query: userQuery, + data: { + user: { ...updateUser }, + }, + }); + }, + }); + } else { + expect(data.count).toEqual(1); + expect({ ...data.user }).toMatchObject({ + __typename: 'User', + firstName: 'Harry', + }); + done(); + } + }, + }); + }); +}); diff --git a/packages/apollo-client/src/__tests__/local-state/initializers.ts b/packages/apollo-client/src/__tests__/local-state/initializers.ts new file mode 100644 index 00000000000..03e264ce784 --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/initializers.ts @@ -0,0 +1,232 @@ +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink } from 'apollo-link'; +import gql from 'graphql-tag'; + +import ApolloClient from '../..'; + +describe('General', () => { + it('should write the result of initiailizer functions to the cache', () => { + const cache = new InMemoryCache(); + new ApolloClient({ + cache, + initializers: { + foo: () => ({ bar: false, __typename: 'Bar' }), + }, + resolvers: { + Query: { + foo: () => ({ bar: true }), + }, + }, + }); + expect(cache.extract()).toEqual({ + '$ROOT_QUERY.foo': { + bar: false, + __typename: 'Bar', + }, + ROOT_QUERY: { + foo: { + generated: true, + id: '$ROOT_QUERY.foo', + type: 'id', + typename: 'Bar', + }, + }, + }); + }); + + it( + 'should not attempt to write the return value of an initializer ' + + 'function if it returns `undefined`', + async done => { + const firstNameQuery = gql` + query FirstName { + firstName @client + } + `; + + const lastNameQuery = gql` + query LastName { + lastName @client + } + `; + + const firstName = 'John'; + const lastName = 'Smith'; + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + initializers: { + firstName() { + cache.writeQuery({ + query: firstNameQuery, + data: { + firstName, + }, + }); + }, + lastName() { + return lastName; + }, + }, + }); + + const { + data: { firstName: loadedFirstName }, + } = await client.query({ query: firstNameQuery }); + expect(loadedFirstName).toEqual(firstName); + const { + data: { lastName: loadedLastName }, + } = await client.query({ query: lastNameQuery }); + expect(loadedLastName).toEqual(lastName); + return done(); + }, + ); + + it('should be able to write `null` values to the cache from an initializer', async done => { + const firstNameQuery = gql` + query FirstName { + firstName @client + } + `; + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + initializers: { + firstName() { + return null; + }, + }, + }); + + const { data } = await client.query({ query: firstNameQuery }); + expect(data).not.toBe(null); + expect(data.firstName).toBe(null); + return done(); + }); + + it('should not call the resolver if the data is already in the cache', () => { + const fooResolver = jest.fn(); + const resolvers = { Query: { foo: fooResolver } }; + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + initializers: { + foo: () => ({ bar: false, __typename: 'Bar' }), + }, + resolvers, + }); + + const query = gql` + { + foo @client { + bar + } + } + `; + + client + .query({ query }) + .then(({ data }) => { + expect(fooResolver).not.toHaveBeenCalled(); + }) + .catch(e => console.error(e)); + }); +}); + +describe('#runInitializers', () => { + it('should run initializers asynchronously', async (done) => { + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + }); + + client.runInitializers({ + primaryUserId: () => 100, + }); + expect(cache.extract()).toEqual({}); + + await client.runInitializers({ + secondaryUserId: () => 200, + }); + expect(cache.extract()).toEqual({ + ROOT_QUERY: { + primaryUserId: 100, + secondaryUserId: 200, + }, + }); + + return done(); + }); + + it( + 'should prevent initializers from running more than once, by default', + async (done) => { + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + }); + + await client.runInitializers({ + primaryUserId: () => 100, + }); + expect(cache.extract()).toEqual({ + ROOT_QUERY: { + primaryUserId: 100, + }, + }); + + const spy = + jest.spyOn(global.console, 'warn').mockImplementation(() => {}); + await client.runInitializers({ + primaryUserId: () => 100, + }); + expect(spy).toBeCalled(); + spy.mockRestore(); + return done(); + } + ); + + it( + 'should be able to run initializers a second time after calling ' + + '`ApolloClient.resetInitializers()`', + async (done) => { + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + }); + + await client.runInitializers({ + primaryUserId: () => 100, + }); + expect(cache.extract()).toEqual({ + ROOT_QUERY: { + primaryUserId: 100, + }, + }); + + client.resetInitializers(); + + const spy = + jest.spyOn(global.console, 'warn').mockImplementation(() => {}); + await client.runInitializers({ + primaryUserId: () => 200, + }); + expect(spy).not.toBeCalled(); + spy.mockRestore(); + + expect(cache.extract()).toEqual({ + ROOT_QUERY: { + primaryUserId: 200, + }, + }); + return done(); + } + ); +}); diff --git a/packages/apollo-client/src/__tests__/local-state/resolvers.ts b/packages/apollo-client/src/__tests__/local-state/resolvers.ts new file mode 100644 index 00000000000..075e168b09d --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/resolvers.ts @@ -0,0 +1,907 @@ +import gql from 'graphql-tag'; +import { DocumentNode, ExecutionResult } from 'graphql'; +import { assign } from 'lodash'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink, Observable } from 'apollo-link'; + +import ApolloClient from '../..'; +import mockQueryManager from '../../__mocks__/mockQueryManager'; +import { Observer } from '../../util/Observable'; +import wrap from '../../util/wrap'; +import { ApolloQueryResult, Resolvers } from '../../core/types'; +import { WatchQueryOptions } from '../../core/watchQueryOptions'; + +// Helper method that sets up a mockQueryManager and then passes on the +// results to an observer. +const assertWithObserver = ({ + done, + resolvers, + query, + serverQuery, + variables = {}, + queryOptions = {}, + serverResult, + error, + delay, + observer, +}: { + done: jest.DoneCallback; + resolvers?: Resolvers; + query: DocumentNode; + serverQuery?: DocumentNode; + variables?: object; + queryOptions?: object; + error?: Error; + serverResult?: ExecutionResult; + delay?: number; + observer: Observer>; +}) => { + const queryManager = mockQueryManager({ + request: { query: serverQuery, variables }, + result: serverResult, + error, + delay, + }); + + if (resolvers) { + queryManager.getLocalState().addResolvers(resolvers); + } + + const finalOptions = assign( + { query, variables }, + queryOptions, + ) as WatchQueryOptions; + return queryManager.watchQuery(finalOptions).subscribe({ + next: wrap(done, observer.next!), + error: observer.error, + }); +}; + +describe('Basic resolver capabilities', () => { + it('should run resolvers for @client queries', done => { + const query = gql` + query Test { + foo @client { + bar + } + } + `; + + const resolvers = { + Query: { + foo: () => ({ bar: true }), + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + observer: { + next({ data }) { + try { + expect(data).toEqual({ foo: { bar: true } }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }); + + it('should handle queries with a mix of @client and server fields', done => { + const query = gql` + query Mixed { + foo @client { + bar + } + bar { + baz + } + } + `; + + const serverQuery = gql` + query Mixed { + bar { + baz + } + } + `; + + const resolvers = { + Query: { + foo: () => ({ bar: true }), + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + serverQuery, + serverResult: { data: { bar: { baz: true } } }, + observer: { + next({ data }) { + try { + expect(data).toEqual({ foo: { bar: true }, bar: { baz: true } }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }); + + it('should handle a mix of @client fields with fragments and server fields', done => { + const query = gql` + fragment client on ClientData { + bar + __typename + } + + query Mixed { + foo @client { + ...client + } + bar { + baz + } + } + `; + + const serverQuery = gql` + query Mixed { + bar { + baz + } + } + `; + + const resolvers = { + Query: { + foo: () => ({ bar: true, __typename: 'ClientData' }), + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + serverQuery, + serverResult: { data: { bar: { baz: true, __typename: 'Bar' } } }, + observer: { + next({ data }) { + try { + expect(data).toEqual({ + foo: { bar: true, __typename: 'ClientData' }, + bar: { baz: true }, + }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }); + + it('should have access to query variables when running @client resolvers', done => { + const query = gql` + query WithVariables($id: ID!) { + foo @client { + bar(id: $id) + } + } + `; + + const resolvers = { + Query: { + foo: () => ({ __typename: 'Foo' }), + }, + Foo: { + bar: (data: any, { id }: { id: number }) => id, + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + variables: { id: 1 }, + observer: { + next({ data }) { + try { + expect(data).toEqual({ foo: { bar: 1 } }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }); + + it('should pass context to @client resolvers', done => { + const query = gql` + query WithContext { + foo @client { + bar + } + } + `; + + const resolvers = { + Query: { + foo: () => ({ __typename: 'Foo' }), + }, + Foo: { + bar: (data: any, _: any, { id }: { id: number }) => id, + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + queryOptions: { context: { id: 1 } }, + observer: { + next({ data }) { + try { + expect(data).toEqual({ foo: { bar: 1 } }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }); + + it( + 'should combine local @client resolver results with server results, for ' + + 'the same field', + done => { + const query = gql` + query author { + author { + name + stats { + totalPosts + postsToday @client + } + } + } + `; + + const serverQuery = gql` + query author { + author { + name + stats { + totalPosts + } + } + } + `; + + const resolvers = { + Stats: { + postsToday: () => 10, + }, + }; + + assertWithObserver({ + done, + resolvers, + query, + serverQuery, + serverResult: { + data: { + author: { + name: 'John Smith', + stats: { + totalPosts: 100, + __typename: 'Stats', + }, + __typename: 'Author', + }, + }, + }, + observer: { + next({ data }) { + try { + expect(data).toEqual({ + author: { + name: 'John Smith', + stats: { + totalPosts: 100, + postsToday: 10, + }, + }, + }); + } catch (error) { + done.fail(error); + } + done(); + }, + }, + }); + }, + ); + + it('should handle resolvers that work with booleans properly', done => { + const query = gql` + query CartDetails { + isInCart @client + } + `; + + const cache = new InMemoryCache(); + cache.writeQuery({ query, data: { isInCart: true } }); + + const client = new ApolloClient({ + cache, + resolvers: { + Query: { + isInCart: () => false, + }, + }, + }); + + return client + .query({ query, fetchPolicy: 'network-only' }) + .then(({ data }: any) => { + expect({ ...data }).toMatchObject({ + isInCart: false, + }); + done(); + }); + }); +}); + +describe('Writing cache data from resolvers', () => { + it('should let you write to the cache with a mutation', () => { + const query = gql` + { + field @client + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Mutation: { + start: (_, $, { cache }) => { + cache.writeData({ data: { field: 1 } }); + return { start: true }; + }, + }, + }, + }); + + return client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }) => { + expect({ ...data }).toMatchObject({ field: 1 }); + }); + }); + + it('should let you write to the cache with a mutation using an ID', () => { + const query = gql` + { + obj @client { + field + } + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Mutation: { + start: (_, $, { cache }) => { + cache.writeQuery({ + query, + data: { + obj: { field: 1, id: 'uniqueId', __typename: 'Object' }, + }, + }); + cache.writeData({ id: 'Object:uniqueId', data: { field: 2 } }); + return { start: true }; + }, + }, + }, + }); + + return client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }: any) => { + expect(data.obj.field).toEqual(2); + }); + }); + + it('should not overwrite __typename when writing to the cache with an id', () => { + const query = gql` + { + obj @client { + field { + field2 + } + id + } + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Mutation: { + start: (_, $, { cache }) => { + cache.writeQuery({ + query, + data: { + obj: { + field: { field2: 1, __typename: 'Field' }, + id: 'uniqueId', + __typename: 'Object', + }, + }, + }); + cache.writeData({ + id: 'Object:uniqueId', + data: { field: { field2: 2, __typename: 'Field' } }, + }); + return { start: true }; + }, + }, + }, + }); + + return client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }: any) => { + expect(data.obj.__typename).toEqual('Object'); + expect(data.obj.field.__typename).toEqual('Field'); + }) + .catch(e => console.log(e)); + }); + + it( + 'should add a __typename for an object without one when writing to the ' + + 'cache with an id', + () => { + const query = gql` + { + obj @client { + field { + field2 + } + id + } + } + `; + + const mutation = gql` + mutation start { + start @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Mutation: { + start: (_, $, { cache }) => { + // This would cause a warning to be printed because we don't have + // __typename on the obj field. But that's intentional because + // that's exactly the situation we're trying to test... + + // Let's swap out console.warn to suppress this one message + const suppressString = '__typename'; + const originalWarn = console.warn; + console.warn = (...args: any[]) => { + if ( + args.find(element => { + if (typeof element === 'string') { + return element.indexOf(suppressString) !== -1; + } + return false; + }) != null + ) { + // Found a thing in the args we told it to exclude + return; + } + originalWarn.apply(console, args); + }; + // Actually call the problematic query + cache.writeQuery({ + query, + data: { + obj: { + field: { field2: 1, __typename: 'Field' }, + id: 'uniqueId', + }, + }, + }); + // Restore warning logger + console.warn = originalWarn; + + cache.writeData({ + id: '$ROOT_QUERY.obj', + data: { field: { field2: 2, __typename: 'Field' } }, + }); + return { start: true }; + }, + }, + }, + }); + + return client + .mutate({ mutation }) + .then(() => client.query({ query })) + .then(({ data }: any) => { + expect(data.obj.__typename).toEqual('__ClientData'); + expect(data.obj.field.__typename).toEqual('Field'); + }) + .catch(e => console.log(e)); + }, + ); +}); + +describe('Resolving field aliases', () => { + it('should run resolvers for missing client queries with aliased field', done => { + // expect.assertions(1); + const query = gql` + query Aliased { + foo @client { + bar + } + baz: bar { + foo + } + } + `; + + const link = new ApolloLink(() => + // Each link is responsible for implementing their own aliasing so it + // returns baz not bar + Observable.of({ data: { baz: { foo: true, __typename: 'Baz' } } }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + foo: () => ({ bar: true, __typename: 'Foo' }), + }, + }, + }); + + client.query({ query }).then(({ data }) => { + try { + expect(data).toEqual({ + foo: { bar: true, __typename: 'Foo' }, + baz: { foo: true, __typename: 'Baz' }, + }); + } catch (e) { + done.fail(e); + return; + } + done(); + }, done.fail); + }); + + it( + 'should run resolvers for client queries when aliases are in use on ' + + 'the @client-tagged node', + done => { + const aliasedQuery = gql` + query Test { + fie: foo @client { + bar + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + resolvers: { + Query: { + foo: () => ({ bar: true, __typename: 'Foo' }), + fie: () => { + done.fail( + "Called the resolver using the alias' name, instead of " + + 'the correct resolver name.', + ); + }, + }, + }, + }); + + client.query({ query: aliasedQuery }).then(({ data }) => { + expect(data).toEqual({ fie: { bar: true, __typename: 'Foo' } }); + done(); + }, done.fail); + }, + ); + + it('should respect aliases for *nested fields* on the @client-tagged node', done => { + const aliasedQuery = gql` + query Test { + fie: foo @client { + fum: bar + } + baz: bar { + foo + } + } + `; + + const link = new ApolloLink(() => + Observable.of({ data: { baz: { foo: true, __typename: 'Baz' } } }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + foo: () => ({ bar: true, __typename: 'Foo' }), + fie: () => { + done.fail( + "Called the resolver using the alias' name, instead of " + + 'the correct resolver name.', + ); + }, + }, + }, + }); + + client.query({ query: aliasedQuery }).then(({ data }) => { + expect(data).toEqual({ + fie: { fum: true, __typename: 'Foo' }, + baz: { foo: true, __typename: 'Baz' }, + }); + done(); + }, done.fail); + }); + + it( + 'should pull initialized values for aliased fields tagged with @client ' + + 'from the cache', + () => { + const query = gql` + { + fie: foo @client { + bar + } + } + `; + + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), + initializers: { + foo: () => ({ + bar: 'yo', + __typename: 'Foo', + }), + }, + }); + + return client.query({ query }).then(({ data }) => { + expect({ ...data }).toMatchObject({ + fie: { bar: 'yo', __typename: 'Foo' }, + }); + }); + }, + ); +}); + +describe('Force local resolvers', () => { + it( + 'should always run resolvers when using a `resolverPolicy` of ' + + '`resolver-always`', + async () => { + const query = gql` + query Author { + author { + name + isLoggedIn @client + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + author: () => ({ + name: 'John Smith', + isLoggedIn: false, + __typename: 'Author', + }), + }, + }); + + const { data: data1 } = await client.query({ query }); + expect(data1.author.isLoggedIn).toEqual(false); + + client.addResolvers({ + Author: { + isLoggedIn() { + return true; + }, + }, + }); + + const { data: data2 } = await client.query({ query }); + expect(data2.author.isLoggedIn).toEqual(false); + + return client + .query({ query, resolverPolicy: 'resolver-always' }) + .then(({ data }) => { + expect(data.author.isLoggedIn).toEqual(true); + }); + }, + ); + + it( + 'should be able to retrieve values loaded from both the cache and ' + + 'resolvers, when using a `resolverPolicy` of `resolver-always`', + async () => { + const query = gql` + query Author { + author { + name + isLoggedIn @client + lastLogin @client + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + initializers: { + author: () => ({ + name: 'John Smith', + isLoggedIn: false, + lastLogin: 'yesterday', + __typename: 'Author', + }), + }, + }); + + const { data: data1 } = await client.query({ query }); + expect(data1.author.isLoggedIn).toEqual(false); + expect(data1.author.lastLogin).toEqual('yesterday'); + + client.addResolvers({ + Author: { + isLoggedIn() { + return true; + }, + }, + }); + + const { data: data2 } = await client.query({ query }); + expect(data2.author.isLoggedIn).toEqual(false); + expect(data2.author.lastLogin).toEqual('yesterday'); + + return client + .query({ query, resolverPolicy: 'resolver-always' }) + .then(({ data }) => { + expect(data.author.isLoggedIn).toEqual(true); + expect(data.author.lastLogin).toEqual('yesterday'); + }); + }, + ); +}); + +describe('Async resolvers', () => { + it('should support async @client resolvers', async (done) => { + const query = gql` + query Member { + isLoggedIn @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Query: { + isLoggedIn() { + return Promise.resolve(true); + }, + }, + }, + }); + + const { data: { isLoggedIn } } = await client.query({ query }); + expect(isLoggedIn).toBe(true); + return done(); + }); + + it( + 'should support async @client resolvers mixed with remotely resolved data', + async (done) => { + const query = gql` + query Member { + member { + name + sessionCount @client + isLoggedIn @client + } + } + `; + + const testMember = { + name: 'John Smithsonian', + isLoggedIn: true, + sessionCount: 10, + } + + const link = new ApolloLink(() => + Observable.of({ + data: { + member: { + name: testMember.name, + __typename: 'Member' + } + } + }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Member: { + isLoggedIn() { + return Promise.resolve(testMember.isLoggedIn); + }, + sessionCount() { + return testMember.sessionCount; + }, + }, + }, + }); + + const { data: { member } } = await client.query({ query }); + expect(member.name).toBe(testMember.name); + expect(member.isLoggedIn).toBe(testMember.isLoggedIn); + expect(member.sessionCount).toBe(testMember.sessionCount); + return done(); + } + ); +}); diff --git a/packages/apollo-client/src/__tests__/local-state/subscriptions.ts b/packages/apollo-client/src/__tests__/local-state/subscriptions.ts new file mode 100644 index 00000000000..6aac8fbd28d --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/subscriptions.ts @@ -0,0 +1,87 @@ +import gql from 'graphql-tag'; + +import ApolloClient from '../..'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink, Observable } from 'apollo-link'; + +describe('Basic functionality', () => { + it('should not break subscriptions', done => { + const query = gql` + subscription { + field + } + `; + + const link = new ApolloLink(() => + Observable.of({ data: { field: 1 } }, { data: { field: 2 } }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Query: { + count: () => 0, + }, + }, + }); + + let counter = 0; + expect.assertions(2); + return client.subscribe({ query }).forEach(item => { + expect(item).toMatchObject({ data: { field: ++counter } }); + if (counter === 2) { + done(); + } + }); + }); + + it('should be able to mix @client fields with subscription results', done => { + const query = gql` + subscription { + field + count @client + } + `; + + const link = new ApolloLink(() => + Observable.of({ data: { field: 1 } }, { data: { field: 2 } }), + ); + + let subCounter = 0; + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Subscription: { + count: () => { + subCounter += 1; + return subCounter; + } + }, + }, + }); + + expect.assertions(2); + const obs = client.subscribe({ query }); + let resultCounter = 1; + obs.subscribe({ + next(result) { + try { + expect(result).toMatchObject({ + data: { + field: resultCounter, + count: resultCounter, + }, + }); + } catch (error) { + done.fail(error); + } + resultCounter += 1; + }, + complete() { + done(); + } + }); + }); +}); diff --git a/packages/apollo-client/src/__tests__/local-state/typeDefs.ts b/packages/apollo-client/src/__tests__/local-state/typeDefs.ts new file mode 100644 index 00000000000..b85fea29400 --- /dev/null +++ b/packages/apollo-client/src/__tests__/local-state/typeDefs.ts @@ -0,0 +1,92 @@ +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink, Observable } from 'apollo-link'; +import gql from 'graphql-tag'; + +import ApolloClient from '../..'; + +describe('Default use', () => { + it( + 'should add a schema string in SDL format to the context as definition ' + + 'if typeDefs are passed in', + done => { + const link = new ApolloLink(operation => { + const { schemas } = operation.getContext(); + expect(schemas).toMatchSnapshot(); + return Observable.of({ + data: { foo: { bar: true, __typename: 'Bar' } }, + }); + }); + + const typeDefs = ` + type Todo { + id: String + message: String! + } + + type Query { + todo(id: String!): Todo + } + `; + + const remoteQuery = gql` + { + foo { + bar + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + typeDefs, + }); + + client.query({ query: remoteQuery }).then(() => done(), done.fail); + }, + ); + + it('should concatenate schema strings if typeDefs are passed in as an array', done => { + const anotherSchema = ` + type Foo { + foo: String! + bar: String + } + `; + + const link = new ApolloLink(operation => { + const { schemas } = operation.getContext(); + expect(schemas).toMatchSnapshot(); + return Observable.of({ + data: { foo: { bar: true, __typename: 'Bar' } }, + }); + }); + + const typeDefs = ` + type Todo { + id: String + message: String! + } + + type Query { + todo(id: String!): Todo + } + `; + + const remoteQuery = gql` + { + foo { + bar + } + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + typeDefs: [typeDefs, anotherSchema], + }); + + client.query({ query: remoteQuery }).then(() => done(), done.fail); + }); +}); From dc98e1ef8b00a3d1228c8f214ffa4f1e98f66c5c Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sat, 19 Jan 2019 13:31:26 -0500 Subject: [PATCH 007/230] Update Apollo Boost to use AC's integrated local state handling Remove Boost's dependency on `apollo-link-state`, and wire it up with AC's local state functionality. --- packages/apollo-boost/package.json | 3 +- packages/apollo-boost/rollup.config.js | 1 - packages/apollo-boost/src/__tests__/config.ts | 34 ++++++++++--- packages/apollo-boost/src/index.ts | 49 ++++++++++++++----- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 6bfe3d41488..ba38d1e2480 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.1.27", + "version": "0.3.0-alpha.12", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ @@ -44,7 +44,6 @@ "apollo-link": "^1.0.6", "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", - "apollo-link-state": "^0.4.0", "graphql-tag": "^2.4.2", "tslib": "^1.9.3" }, diff --git a/packages/apollo-boost/rollup.config.js b/packages/apollo-boost/rollup.config.js index 0f0185ca630..29445a404c3 100644 --- a/packages/apollo-boost/rollup.config.js +++ b/packages/apollo-boost/rollup.config.js @@ -5,7 +5,6 @@ const globals = { 'apollo-cache-inmemory': 'apolloCacheInMemory', 'apollo-link': 'apolloLink.core', 'apollo-link-http': 'apolloLinkHttp', - 'apollo-link-state': 'apolloLinkState', 'apollo-link-error': 'apolloLinkError', 'graphql-tag': 'graphqlTag', }; diff --git a/packages/apollo-boost/src/__tests__/config.ts b/packages/apollo-boost/src/__tests__/config.ts index d91f0fb057f..5b0352ac4bc 100644 --- a/packages/apollo-boost/src/__tests__/config.ts +++ b/packages/apollo-boost/src/__tests__/config.ts @@ -15,6 +15,12 @@ describe('config', () => { } `; + const remoteQuery = gql` + { + foo + } + `; + const resolvers = { Query: { foo: () => 'woo', @@ -49,17 +55,23 @@ describe('config', () => { }); it('allows you to pass in a request handler', () => { + const customFetcher = jest.fn(() => + Promise.resolve({ + text: () => Promise.resolve('{"data": {"foo": "woo" }}'), + }), + ); + let requestCalled; const client = new ApolloClient({ request: () => { requestCalled = true; }, - clientState: { resolvers }, + fetch: customFetcher, }); return client - .query({ query, fetchPolicy: 'network-only' }) + .query({ query: remoteQuery, fetchPolicy: 'network-only' }) .then(({ data }) => { expect(stripSymbols(data)).toEqual({ foo: 'woo' }); expect(requestCalled).toEqual(true); @@ -67,6 +79,12 @@ describe('config', () => { }); it('allows you to pass in an async request handler', () => { + const customFetcher = jest.fn(() => + Promise.resolve({ + text: () => Promise.resolve('{"data": {"foo": "woo" }}'), + }), + ); + let requestCalled; const client = new ApolloClient({ @@ -75,11 +93,11 @@ describe('config', () => { requestCalled = true; }); }, - clientState: { resolvers }, + fetch: customFetcher, }); return client - .query({ query, fetchPolicy: 'network-only' }) + .query({ query: remoteQuery, fetchPolicy: 'network-only' }) .then(({ data }) => { expect(stripSymbols(data)).toEqual({ foo: 'woo' }); expect(requestCalled).toEqual(true); @@ -147,7 +165,7 @@ describe('config', () => { it('should set `credentials` to `same-origin` by default', () => { const client = new ApolloClient({}); - client.query({ query, errorPolicy: 'ignore' }); + client.query({ query: remoteQuery, errorPolicy: 'ignore' }); const [uri, options] = fetchMock.lastCall(); expect(options.credentials).toEqual('same-origin'); }); @@ -156,7 +174,7 @@ describe('config', () => { const client = new ApolloClient({ credentials: 'some-new-value', }); - client.query({ query, errorPolicy: 'ignore' }); + client.query({ query: remoteQuery, errorPolicy: 'ignore' }); const [uri, options] = fetchMock.lastCall(); expect(options.credentials).toEqual('some-new-value'); }); @@ -177,7 +195,7 @@ describe('config', () => { 'provided', () => { const client = new ApolloClient({}); - client.query({ query, errorPolicy: 'ignore' }); + client.query({ query: remoteQuery, errorPolicy: 'ignore' }); const [uri, options] = fetchMock.lastCall(); expect(options.headers).toEqual({ accept: '*/*', @@ -193,7 +211,7 @@ describe('config', () => { 'new-header2': 'value2', }, }); - client.query({ query, errorPolicy: 'ignore' }); + client.query({ query: remoteQuery, errorPolicy: 'ignore' }); const [uri, options] = fetchMock.lastCall(); expect(options.headers).toEqual({ accept: '*/*', diff --git a/packages/apollo-boost/src/index.ts b/packages/apollo-boost/src/index.ts index 930d440b6c1..8f711963897 100644 --- a/packages/apollo-boost/src/index.ts +++ b/packages/apollo-boost/src/index.ts @@ -5,16 +5,23 @@ export * from 'apollo-cache-inmemory'; import { Operation, ApolloLink, Observable } from 'apollo-link'; import { HttpLink } from 'apollo-link-http'; -import { withClientState, ClientStateConfig } from 'apollo-link-state'; import { onError, ErrorLink } from 'apollo-link-error'; - import { ApolloCache } from 'apollo-cache'; import { InMemoryCache, CacheResolverMap } from 'apollo-cache-inmemory'; import gql from 'graphql-tag'; import ApolloClient from 'apollo-client'; +import { DocumentNode } from 'graphql'; export { gql, HttpLink }; +type ClientStateConfig = { + cache?: ApolloCache; + resolvers: any | (() => any); + defaults?: any; + typeDefs?: string | string[] | DocumentNode | DocumentNode[]; + fragmentMatcher?: any; +}; + export interface PresetConfig { request?: (operation: Operation) => Promise; uri?: string; @@ -99,10 +106,6 @@ export default class DefaultClient extends ApolloClient { : new InMemoryCache(); } - const stateLink = clientState - ? withClientState({ ...clientState, cache }) - : false; - const errorLink = errorCallback ? onError(errorCallback) : onError(({ graphQLErrors, networkError }) => { @@ -154,14 +157,34 @@ export default class DefaultClient extends ApolloClient { headers: headers || {}, }); - const link = ApolloLink.from([ - errorLink, - requestHandler, - stateLink, - httpLink, - ].filter(x => !!x) as ApolloLink[]); + const link = ApolloLink.from([errorLink, requestHandler, httpLink].filter( + x => !!x, + ) as ApolloLink[]); + + let initializers: { [field: string]: any }; + let resolvers; + let typeDefs; + if (clientState) { + if (clientState.defaults) { + initializers = {}; + Object.keys(clientState.defaults).forEach((field: string) => { + initializers[field] = () => clientState.defaults[field]; + }); + } + + resolvers = clientState.resolvers; + typeDefs = clientState.typeDefs; + } // super hacky, we will fix the types eventually - super({ cache, link, name, version } as any); + super({ + cache, + link, + name, + version, + initializers, + resolvers, + typeDefs, + } as any); } } From ff89ccd45eba538148a1d9b960ad16f1faff9691 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 21 Jan 2019 10:35:22 -0500 Subject: [PATCH 008/230] Wire up `@client(always: true)` to force local resolvers By default, local resolvers are controlled by a query's `fetchPolicy`. If a query that has configured local resolvers is run with a fresh cache, and that query is using `ApolloClient.query`'s default `fetchPolicy` of `cache-and-network`, the local resolvers will be fired and the result will be stored in the AC cache. If the same query fires again however, since the query result already exists in the cache, it will be loaded and used instead of firing the query's local resolvers again. This functionality can be altered by using a `fetchPolicy` of `no-cache` for example, but setting a `fetchPolicy` impacts an entire query. So if mixing local and remote results and using a `fetchPolicy` of `no-cache`, local resolvers will always run, but so will the fetch to retrieve network based data. To address this, AC's local state functionality includes a new `resolverPolicy` approach. Setting a `resolverPolicy` of `resolver-always` makes sure local resolvers are always fired for a query, on every request. While this approach works, it is inflexible due to the fact that it does not provide a way to only always run certain local resolvers associated with a query, instead of running all of them. Apollo Client's `fetchPolicy` approach has also historically demonstrated that getting `fetchPolicy` settings right can be a bit tricky (especially for newcomers to the Apollo ecosystem), so adding another configurable policy based approach is not overly desirable. The changes in this commit remove the `resolverPolicy` functionality. They then ensure that fields marked with `@client(always: true)` always have their local resolvers run, on each request. This provides a way to control exactly which parts of a query should have its local resolvers always run, and which parts can continue to leverage the cache. Technical side note: when using `@client(always: true)`, the full query will be resolved from the cache first, before any local resolvers are run. So if data already exists in the cache for a field that's marked with `@client(always: true)`, it's loaded first as part of reading the fully executed query from the cache (including local and remote results). That data (if it exists) is then overwritten by the result from the associated local resolver, and returned as part of the query result. This load then override approach makes sure that the integrity of the cache is not affected by running local resolvers. --- package-lock.json | 677 ++++++++++++++---- .../src/__tests__/local-state/resolvers.ts | 212 +++++- packages/apollo-client/src/core/LocalState.ts | 64 +- .../apollo-client/src/core/ObservableQuery.ts | 23 +- .../apollo-client/src/core/QueryManager.ts | 28 +- packages/apollo-client/src/core/types.ts | 1 + .../src/core/watchQueryOptions.ts | 26 - 7 files changed, 808 insertions(+), 223 deletions(-) diff --git a/package-lock.json b/package-lock.json index 328dee84492..58d6e9d8e9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1902,15 +1902,6 @@ "apollo-utilities": "file:packages/apollo-utilities", "optimism": "^0.6.9", "tslib": "^1.9.3" - }, - "dependencies": { - "optimism": { - "version": "0.6.9", - "bundled": true, - "requires": { - "immutable-tuple": "^0.4.9" - } - } } }, "apollo-client": { @@ -1936,11 +1927,12 @@ }, "dependencies": { "apollo-utilities": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.27.tgz", - "integrity": "sha512-nzrMQ89JMpNmYnVGJ4t8zN75gQbql27UDhlxNi+3OModp0Masx5g+fQmQJ5B4w2dpRuYOsdwFLmj3lQbwOKV1Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.2.tgz", + "integrity": "sha512-EjDx8vToK+zkWIxc76ZQY/irRX52puNg04xf/w8R0kVTDAgHuVfnFVC01O5vE25kFnIaa5em0pFI0p9b6YMkhQ==", "requires": { - "fast-json-stable-stringify": "^2.0.0" + "fast-json-stable-stringify": "^2.0.0", + "tslib": "^1.9.3" } } } @@ -4623,9 +4615,9 @@ } }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "evp_bytestokey": { @@ -5457,14 +5449,532 @@ "dev": true }, "fsevents": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz", - "integrity": "sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "dev": true, "optional": true, "requires": { "nan": "^2.9.2", "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } } }, "fstream": { @@ -6294,6 +6804,16 @@ "resolved": "https://registry.npmjs.org/immutable-tuple/-/immutable-tuple-0.4.10.tgz", "integrity": "sha512-45jheDbc3Kr5Cw8EtDD+4woGRUV0utIrJBZT8XH0TPZRfm8tzT0/sLGGzyyCCFqFMG5Pv5Igf3WY/arn6+8V9Q==" }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, "import-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", @@ -9345,30 +9865,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -9400,14 +9896,6 @@ "dev": true, "requires": { "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "node-cleanup": { @@ -9468,9 +9956,9 @@ "dev": true }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { "assert": "^1.1.1", @@ -9480,7 +9968,7 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "0.0.0", @@ -9494,7 +9982,7 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", + "util": "^0.11.0", "vm-browserify": "0.0.4" }, "dependencies": { @@ -9518,68 +10006,6 @@ "which": "^1.3.0" } }, - "node-pre-gyp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true, - "optional": true - } - } - }, "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", @@ -10191,16 +10617,17 @@ } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", + "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-diff": { @@ -13486,9 +13913,9 @@ "dev": true }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" diff --git a/packages/apollo-client/src/__tests__/local-state/resolvers.ts b/packages/apollo-client/src/__tests__/local-state/resolvers.ts index 075e168b09d..c12f9bd3758 100644 --- a/packages/apollo-client/src/__tests__/local-state/resolvers.ts +++ b/packages/apollo-client/src/__tests__/local-state/resolvers.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { DocumentNode, ExecutionResult } from 'graphql'; import { assign } from 'lodash'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink, Observable } from 'apollo-link'; +import { ApolloLink, Observable, FetchResult } from 'apollo-link'; import ApolloClient from '../..'; import mockQueryManager from '../../__mocks__/mockQueryManager'; @@ -10,6 +10,7 @@ import { Observer } from '../../util/Observable'; import wrap from '../../util/wrap'; import { ApolloQueryResult, Resolvers } from '../../core/types'; import { WatchQueryOptions } from '../../core/watchQueryOptions'; +import { LocalState } from '../../core/LocalState'; // Helper method that sets up a mockQueryManager and then passes on the // results to an observer. @@ -731,14 +732,14 @@ describe('Resolving field aliases', () => { describe('Force local resolvers', () => { it( - 'should always run resolvers when using a `resolverPolicy` of ' + - '`resolver-always`', + 'should force the running of local resolvers marked with ' + + '`@client(always: true)` when using `ApolloClient.query`', async () => { const query = gql` query Author { author { name - isLoggedIn @client + isLoggedIn @client(always: true) } } `; @@ -754,6 +755,8 @@ describe('Force local resolvers', () => { }, }); + // When the resolver isn't defined, there isn't anything to force, so + // make sure the query resolves from the cache properly. const { data: data1 } = await client.query({ query }); expect(data1.author.isLoggedIn).toEqual(false); @@ -765,65 +768,149 @@ describe('Force local resolvers', () => { }, }); + // A resolver is defined, so make sure it's forced, and the result + // resolves properly as a combination of cache and local resolver + // data. const { data: data2 } = await client.query({ query }); - expect(data2.author.isLoggedIn).toEqual(false); - - return client - .query({ query, resolverPolicy: 'resolver-always' }) - .then(({ data }) => { - expect(data.author.isLoggedIn).toEqual(true); - }); + expect(data2.author.isLoggedIn).toEqual(true); }, ); it( - 'should be able to retrieve values loaded from both the cache and ' + - 'resolvers, when using a `resolverPolicy` of `resolver-always`', + 'should avoid running forced resolvers a second time when ' + + 'loading results over the network (so not from the cache)', async () => { const query = gql` query Author { author { name - isLoggedIn @client - lastLogin @client + isLoggedIn @client(always: true) } } `; + const link = new ApolloLink(() => + Observable.of({ + data: { + author: { + name: 'John Smith', + __typename: 'Author' + }, + }, + }), + ); + + let count = 0; const client = new ApolloClient({ cache: new InMemoryCache(), - initializers: { - author: () => ({ - name: 'John Smith', - isLoggedIn: false, - lastLogin: 'yesterday', - __typename: 'Author', - }), + link, + resolvers: { + Author: { + isLoggedIn() { + count += 1; + return true; + }, + }, }, }); - const { data: data1 } = await client.query({ query }); - expect(data1.author.isLoggedIn).toEqual(false); - expect(data1.author.lastLogin).toEqual('yesterday'); + const { data } = await client.query({ query }); + expect(data.author.isLoggedIn).toEqual(true); + expect(count).toEqual(1); + }, + ); - client.addResolvers({ - Author: { - isLoggedIn() { - return true; + it( + 'should only force resolvers for fields marked with ' + + '`@client(always: true)`, not all `@client` fields', + async () => { + const query = gql` + query UserDetails { + name @client + isLoggedIn @client(always: true) + } + `; + + let nameCount = 0; + let isLoggedInCount = 0; + const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Query: { + name() { + nameCount += 1; + return 'John Smith'; + }, + isLoggedIn() { + isLoggedInCount += 1; + return true; + }, }, }, }); - const { data: data2 } = await client.query({ query }); - expect(data2.author.isLoggedIn).toEqual(false); - expect(data2.author.lastLogin).toEqual('yesterday'); + await client.query({ query }); + expect(nameCount).toEqual(1); + expect(isLoggedInCount).toEqual(1); - return client - .query({ query, resolverPolicy: 'resolver-always' }) - .then(({ data }) => { - expect(data.author.isLoggedIn).toEqual(true); - expect(data.author.lastLogin).toEqual('yesterday'); - }); + // On the next request, `name` will be loaded from the cache only, + // whereas `isLoggedIn` will be loaded from the cache then overwritten + // by running its forced local resolver. + await client.query({ query }); + expect(nameCount).toEqual(1); + expect(isLoggedInCount).toEqual(2); + }, + ); + + it( + 'should force the running of local resolvers marked with ' + + '`@client(always: true)` when using `ApolloClient.watchQuery`', + (done) => { + const query = gql` + query IsUserLoggedIn { + isUserLoggedIn @client(always: true) + } + `; + + const queryNoForce = gql` + query IsUserLoggedIn { + isUserLoggedIn @client + } + `; + + let callCount = 0; + const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Query: { + isUserLoggedIn() { + callCount += 1; + return true; + } + } + }, + }); + + client.watchQuery({ query }).subscribe({ + next(result: FetchResult) { + expect(callCount).toBe(1); + + client.watchQuery({ query }).subscribe({ + next(result: FetchResult) { + expect(callCount).toBe(2); + + client.watchQuery({ query: queryNoForce }).subscribe({ + next(result: FetchResult) { + // Result is loaded from the cache since the resolver + // isn't being forced. + expect(callCount).toBe(2); + done(); + } + }); + } + }); + } + }); }, ); }); @@ -905,3 +992,52 @@ describe('Async resolvers', () => { } ); }); + +describe('LocalState helpers', () => { + describe('#shouldForceResolvers', () => { + it( + 'should return true if the document contains any @client directives ' + + 'with an `always` variable of true', + () => { + const localState = new LocalState({ cache: new InMemoryCache() }); + const query = gql` + query Author { + name + isLoggedIn @client(always: true) + } + `; + expect(localState.shouldForceResolvers(query)).toBe(true); + } + ); + + it( + 'should return false if the document contains any @client directives ' + + 'without an `always` variable', + () => { + const localState = new LocalState({ cache: new InMemoryCache() }); + const query = gql` + query Author { + name + isLoggedIn @client + } + `; + expect(localState.shouldForceResolvers(query)).toBe(false); + } + ); + + it( + 'should return false if the document contains any @client directives ' + + 'with an `always` variable of false', + () => { + const localState = new LocalState({ cache: new InMemoryCache() }); + const query = gql` + query Author { + name + isLoggedIn @client(always: false) + } + `; + expect(localState.shouldForceResolvers(query)).toBe(false); + } + ); + }); +}); diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index edc38038309..9b430c9fb87 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -2,13 +2,17 @@ import { ExecutionResult, DocumentNode, OperationDefinitionNode, - print, SelectionSetNode, SelectionNode, InlineFragmentNode, FragmentDefinitionNode, FieldNode, + BooleanValueNode, + ASTNode, } from 'graphql'; +import { print } from 'graphql/language/printer'; +import { visit, BREAK } from 'graphql/language/visitor'; + import { ApolloCache } from 'apollo-cache'; import { getMainDefinition, @@ -62,6 +66,7 @@ export type ExecContext = { fragmentMatcher: FragmentMatcher; defaultOperationType?: string | null; exportedVariables: Record; + onlyRunForcedResolvers?: boolean; }; export type ExecInfo = { @@ -205,12 +210,14 @@ export class LocalState { context, variables, onError, + onlyRunForcedResolvers = false, }: { document: DocumentNode | null; remoteResult?: ExecutionResult; context?: Record; variables?: Record; onError?: (error: any) => void; + onlyRunForcedResolvers?: boolean; }) { let localResult: Record = {}; @@ -225,6 +232,7 @@ export class LocalState { context, variables, { fragmentMatcher: this.fragmentMatcher }, + onlyRunForcedResolvers, ); localResult = data.result; } catch (error) { @@ -334,6 +342,33 @@ export class LocalState { this.firedInitializers = []; } + public shouldForceResolvers(document: ASTNode) { + let forceResolvers = false; + visit(document, { + Directive: { + enter(node) { + if (node.name.value === 'client' && node.arguments) { + forceResolvers = + node.arguments + .filter(arg => ( + arg.name.value === 'always' && + (arg.value as BooleanValueNode).value === true + )) + .length > 0; + if (forceResolvers) { + return BREAK; + } + } + }, + }, + }); + return forceResolvers; + } + + public shouldForceResolver(field: FieldNode) { + return this.shouldForceResolvers(field); + } + private mergeInitializers( initializers: Initializers | Initializers[], ) { @@ -405,6 +440,7 @@ export class LocalState { context?: any, variables?: VariableMap, execOptions: ExecOptions = {}, + onlyRunForcedResolvers?: boolean, ) { const mainDefinition = getMainDefinition(document); const fragments = getFragmentDefinitions(document); @@ -433,6 +469,7 @@ export class LocalState { fragmentMatcher, defaultOperationType, exportedVariables: {}, + onlyRunForcedResolvers, }; const result = await this.resolveSelectionSet( @@ -529,15 +566,24 @@ export class LocalState { }; const aliasUsed = fieldName !== aliasedFieldName; - let result; - const resolverType = - rootValue.__typename || execContext.defaultOperationType; - const resolverMap = (this.resolvers as any)[resolverType]; - if (resolverMap) { - const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; - if (resolve) { - result = await resolve(rootValue, args, execContext.context, info); + + // Usually all local resolvers are run when passing through here, but + // if we've specifically identified that we only want to run forced + // resolvers (that is, resolvers for fields marked with + // `@client(always: true)`), then we'll skip running non-forced resolvers. + if ( + !execContext.onlyRunForcedResolvers || + (execContext.onlyRunForcedResolvers && this.shouldForceResolver(field)) + ) { + const resolverType = + rootValue.__typename || execContext.defaultOperationType; + const resolverMap = (this.resolvers as any)[resolverType]; + if (resolverMap) { + const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; + if (resolve) { + result = await resolve(rootValue, args, execContext.context, info); + } } } diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 3c06fa7941d..bfaac3a919e 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -117,27 +117,8 @@ export class ObservableQuery< return new Promise((resolve, reject) => { let subscription: Subscription; const observer: Observer> = { - async next(result: ApolloQueryResult) { - // If a local resolver policy of `resolver-always` is set, fire all - // local resolvers using the current result as the starting data - // set. Override the result data with the local resolver - // modified data set. - let modifiedResult = result; - if (that.options.resolverPolicy === 'resolver-always') { - const { query, variables, context } = that.options; - const localState = that.queryManager.getLocalState(); - const modifiedData = await localState.runResolvers({ - document: query, - remoteResult: result.data, - context, - variables, - }); - if (modifiedData && Object.keys(modifiedData).length > 0) { - modifiedResult.data = modifiedData as TData; - } - } - - resolve(modifiedResult); + next(result: ApolloQueryResult) { + resolve(result); // Stop the query within the QueryManager if we can before // this function returns. diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 260a70b9c50..cd16a9f1d47 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -460,7 +460,7 @@ export class QueryManager { if (shouldDispatchClientResult) { this.queryStore.markQueryResultClient(queryId, !shouldFetch); this.invalidate(true, queryId, fetchMoreForQueryId); - this.broadcastQueries(); + this.broadcastQueries(this.localState.shouldForceResolvers(query)); } if (shouldFetch) { @@ -513,9 +513,10 @@ export class QueryManager { observer: Observer>, ): QueryListener { let previouslyHadError: boolean = false; - return ( + return async ( queryStoreValue: QueryStoreValue, newData?: Cache.DiffResult, + forceResolvers?: boolean, ) => { // we're going to take a look at the data, so the query is no longer invalidated this.invalidate(false, queryId); @@ -685,6 +686,25 @@ export class QueryManager { observableQuery.isDifferentFromLastResult(resultFromStore) ) { try { + // Local resolvers can be forced by using + // `@client(always: true)` syntax. If any resolvers are + // forced, we'll make sure they're run here to override any + // data returned from the cache. Only the selection sets and + // fields marked with `@client(always: true)` are overwritten. + if (forceResolvers) { + const { query, variables, context } = options; + const updatedResult = await this.localState.runResolvers({ + document: query, + remoteResult: resultFromStore.data, + context, + variables, + onlyRunForcedResolvers: forceResolvers, + }); + if (updatedResult) { + resultFromStore.data = updatedResult as T; + } + } + observer.next(resultFromStore); } catch (e) { // Throw error outside this control flow to avoid breaking Apollo's state @@ -1138,7 +1158,7 @@ export class QueryManager { }; } - public broadcastQueries() { + public broadcastQueries(forceResolvers = false) { this.onBroadcast(); this.queries.forEach((info, id) => { if (!info.invalidated || !info.listeners) return; @@ -1147,7 +1167,7 @@ export class QueryManager { // See here for more detail: https://github.com/apollostack/apollo-client/issues/231 .filter((x: QueryListener) => !!x) .forEach((listener: QueryListener) => { - listener(this.queryStore.get(id), info.newData); + listener(this.queryStore.get(id), info.newData, forceResolvers); }); }); } diff --git a/packages/apollo-client/src/core/types.ts b/packages/apollo-client/src/core/types.ts index 64f3697cbb3..2c44f12ee43 100644 --- a/packages/apollo-client/src/core/types.ts +++ b/packages/apollo-client/src/core/types.ts @@ -8,6 +8,7 @@ import { NetworkStatus } from './networkStatus'; export type QueryListener = ( queryStoreValue: QueryStoreValue, newData?: any, + forceResolvers?: boolean, ) => void; export type OperationVariables = { [key: string]: any }; diff --git a/packages/apollo-client/src/core/watchQueryOptions.ts b/packages/apollo-client/src/core/watchQueryOptions.ts index 5b4fc3821ef..7a155fca653 100644 --- a/packages/apollo-client/src/core/watchQueryOptions.ts +++ b/packages/apollo-client/src/core/watchQueryOptions.ts @@ -31,27 +31,6 @@ export type FetchPolicy = */ export type ErrorPolicy = 'none' | 'ignore' | 'all'; -/** - * `resolverPolicy` can be used to control when Apollo Client's local state - * resolvers (`@client`) are fired. The options are: - * - * - cache-first (default): By default, local resolvers only fire if a field - * value can't be found in the cache first (unless - * `fetchPolicy` is set to `no-cache` or - * `network-only`, in which case local resolvers are - * fired on each request, since they're then treated - * just like network based resolvers). - * - resolver-always: When this option is set, queries resolve using the cache - * as they would normally, which means if a `@client` - * field can be found in the cache (and the `fetchPolicy` - * is not `no-cache` or `network-only`), it will be loaded. - * After the vaue is done loading from the cache however, - * if a local resolver is specified for the field in - * question, it will then be fired and override the loaded - * cache value, which will be returned in the query response. - */ -export type ResolverPolicy = 'cache-first' | 'resolver-always'; - /** * Common options shared across all query interfaces. */ @@ -72,11 +51,6 @@ export interface QueryBaseOptions { */ errorPolicy?: ErrorPolicy; - /** - * Specifies the {@link ResolverPolicy} to be used for this query - */ - resolverPolicy?: ResolverPolicy; - /** * Whether or not to fetch results */ From b3961b956412fa95985676f825f08ee67b753aad Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 12:56:21 -0500 Subject: [PATCH 009/230] Fix local test failures by stopping QueryManager more thoroughly. The QueryManager#stop method cancels all pending fetches by running this.fetchQueryRejectFns. However, this leads to some unhandled promise rejections during tests, which might go unnoticed because they don't cause the test suite to fail. This commit makes the QueryManager#stop method a bit more aggressive about stopping active queries and unsubscribing from observables, which prevents the unhandled rejections. --- .../apollo-client/src/core/QueryManager.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index e45e93ec382..bdcb0ebf782 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -113,6 +113,11 @@ export class QueryManager { */ public stop() { this.scheduler.stop(); + + this.queries.forEach((_info, queryId) => { + this.stopQueryNoBroadcast(queryId); + }); + this.fetchQueryRejectFns.forEach(reject => { reject(new Error('QueryManager stopped while query was in flight')); }); @@ -721,9 +726,14 @@ export class QueryManager { } public stopQueryInStore(queryId: string) { + this.stopQueryInStoreNoBroadcast(queryId); + this.broadcastQueries(); + } + + private stopQueryInStoreNoBroadcast(queryId: string) { + this.scheduler.stopPollingQuery(queryId); this.queryStore.stopQuery(queryId); this.invalidate(true, queryId); - this.broadcastQueries(); } public addQueryListener(queryId: string, listener: QueryListener) { @@ -953,7 +963,12 @@ export class QueryManager { } public stopQuery(queryId: string) { - this.stopQueryInStore(queryId); + this.stopQueryNoBroadcast(queryId); + this.broadcastQueries(); + } + + private stopQueryNoBroadcast(queryId: string) { + this.stopQueryInStoreNoBroadcast(queryId); this.removeQuery(queryId); } From cf1d5df02b6568ebf2c964e4bf3bf25f5fa702af Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 18 Jan 2019 19:29:47 -0500 Subject: [PATCH 010/230] Un-revert "Improve (and shorten) query polling implementation. (#4243)" This reverts commit 9739ff6738925fc6851d0cdf81d8431abc8ba71e. Now that we have a uniform interface for terminating ApolloClient instances (#4336), there should be no need for any external code to access the QueryScheduler abstraction, which this commit removes. We should wait to merge and release this change until after https://github.com/apollographql/react-apollo/pull/2741 has been merged and released, so that we don't break older versions of MockedProvider. --- .../apollo-client/src/__mocks__/mockLinks.ts | 5 +- .../apollo-client/src/core/ObservableQuery.ts | 39 +--- .../apollo-client/src/core/QueryManager.ts | 142 +++++++++++- .../__tests__/scheduler.ts | 152 ++++++------ .../apollo-client/src/scheduler/scheduler.ts | 218 ------------------ packages/apollo-client/tsconfig.test.json | 1 - 6 files changed, 217 insertions(+), 340 deletions(-) rename packages/apollo-client/src/{scheduler => core}/__tests__/scheduler.ts (77%) delete mode 100644 packages/apollo-client/src/scheduler/scheduler.ts diff --git a/packages/apollo-client/src/__mocks__/mockLinks.ts b/packages/apollo-client/src/__mocks__/mockLinks.ts index ac6e917d19a..3dd4dbd49ac 100644 --- a/packages/apollo-client/src/__mocks__/mockLinks.ts +++ b/packages/apollo-client/src/__mocks__/mockLinks.ts @@ -3,6 +3,7 @@ import { ApolloLink, FetchResult, Observable, + GraphQLRequest, // Observer, } from 'apollo-link'; @@ -25,7 +26,7 @@ export function mockObservableLink(): MockSubscriptionLink { } export interface MockedResponse { - request: Operation; + request: GraphQLRequest; result?: FetchResult; error?: Error; delay?: number; @@ -145,7 +146,7 @@ export class MockSubscriptionLink extends ApolloLink { } } -function requestToKey(request: Operation): string { +function requestToKey(request: GraphQLRequest): string { const queryString = request.query && print(request.query); return JSON.stringify({ diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index ad43ceee3c4..26782b2cbdf 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -2,11 +2,7 @@ import { isEqual, tryFunctionOrLogError, cloneDeep } from 'apollo-utilities'; import { GraphQLError } from 'graphql'; import { NetworkStatus, isNetworkRequestInFlight } from './networkStatus'; import { Observable, Observer, Subscription } from '../util/Observable'; - -import { QueryScheduler } from '../scheduler/scheduler'; - import { ApolloError } from '../errors/ApolloError'; - import { QueryManager } from './QueryManager'; import { ApolloQueryResult, FetchType, OperationVariables } from './types'; import { @@ -68,10 +64,8 @@ export class ObservableQuery< */ public variables: TVariables; - private isCurrentlyPolling: boolean; private shouldSubscribe: boolean; private isTornDown: boolean; - private scheduler: QueryScheduler; private queryManager: QueryManager; private observers: Observer>[]; private subscriptionHandles: Subscription[]; @@ -81,11 +75,11 @@ export class ObservableQuery< private lastError: ApolloError; constructor({ - scheduler, + queryManager, options, shouldSubscribe = true, }: { - scheduler: QueryScheduler; + queryManager: QueryManager; options: WatchQueryOptions; shouldSubscribe?: boolean; }) { @@ -94,18 +88,16 @@ export class ObservableQuery< ); // active state - this.isCurrentlyPolling = false; this.isTornDown = false; // query information this.options = options; this.variables = options.variables || ({} as TVariables); - this.queryId = scheduler.queryManager.generateQueryId(); + this.queryId = queryManager.generateQueryId(); this.shouldSubscribe = shouldSubscribe; // related classes - this.scheduler = scheduler; - this.queryManager = scheduler.queryManager; + this.queryManager = queryManager; // interal data stores this.observers = []; @@ -524,11 +516,8 @@ export class ObservableQuery< } public stopPolling() { - if (this.isCurrentlyPolling) { - this.scheduler.stopPollingQuery(this.queryId); - this.options.pollInterval = undefined; - this.isCurrentlyPolling = false; - } + this.queryManager.stopPollingQuery(this.queryId); + this.options.pollInterval = undefined; } public startPolling(pollInterval: number) { @@ -541,13 +530,8 @@ export class ObservableQuery< ); } - if (this.isCurrentlyPolling) { - this.scheduler.stopPollingQuery(this.queryId); - this.isCurrentlyPolling = false; - } this.options.pollInterval = pollInterval; - this.isCurrentlyPolling = true; - this.scheduler.startPollingQuery(this.options, this.queryId); + this.queryManager.startPollingQuery(this.options, this.queryId); } private onSubscribe(observer: Observer>) { @@ -598,8 +582,7 @@ export class ObservableQuery< ); } - this.isCurrentlyPolling = true; - this.scheduler.startPollingQuery(this.options, this.queryId); + this.queryManager.startPollingQuery(this.options, this.queryId); } const observer: Observer> = { @@ -627,11 +610,7 @@ export class ObservableQuery< private tearDownQuery() { this.isTornDown = true; - - if (this.isCurrentlyPolling) { - this.scheduler.stopPollingQuery(this.queryId); - this.isCurrentlyPolling = false; - } + this.queryManager.stopPollingQuery(this.queryId); // stop all active GraphQL subscriptions this.subscriptionHandles.forEach(sub => sub.unsubscribe()); diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index bdcb0ebf782..37d5f3fb7cf 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -13,8 +13,6 @@ import { hasDirectives, } from 'apollo-utilities'; -import { QueryScheduler } from '../scheduler/scheduler'; - import { isApolloError, ApolloError } from '../errors/ApolloError'; import { Observer, Subscription, Observable } from '../util/Observable'; @@ -54,7 +52,6 @@ export interface QueryInfo { } export class QueryManager { - public scheduler: QueryScheduler; public link: ApolloLink; public mutationStore: MutationStore = new MutationStore(); public queryStore: QueryStore = new QueryStore(); @@ -66,6 +63,8 @@ export class QueryManager { private onBroadcast: () => void; + private ssrMode: boolean; + // let's not start at zero to avoid pain with bad checks private idCounter = 1; @@ -104,7 +103,7 @@ export class QueryManager { this.dataStore = store; this.onBroadcast = onBroadcast; this.clientAwareness = clientAwareness; - this.scheduler = new QueryScheduler({ queryManager: this, ssrMode }); + this.ssrMode = ssrMode; } /** @@ -112,8 +111,6 @@ export class QueryManager { * to dispose of this QueryManager instance. */ public stop() { - this.scheduler.stop(); - this.queries.forEach((_info, queryId) => { this.stopQueryNoBroadcast(queryId); }); @@ -678,7 +675,7 @@ export class QueryManager { let transformedOptions = { ...options } as WatchQueryOptions; return new ObservableQuery({ - scheduler: this.scheduler, + queryManager: this, options: transformedOptions, shouldSubscribe: shouldSubscribe, }); @@ -731,7 +728,7 @@ export class QueryManager { } private stopQueryInStoreNoBroadcast(queryId: string) { - this.scheduler.stopPollingQuery(queryId); + this.stopPollingQuery(queryId); this.queryStore.stopQuery(queryId); this.invalidate(true, queryId); } @@ -1295,4 +1292,133 @@ export class QueryManager { }, }; } + + public checkInFlight(queryId: string) { + const query = this.queryStore.get(queryId); + + return ( + query && + query.networkStatus !== NetworkStatus.ready && + query.networkStatus !== NetworkStatus.error + ); + } + + // Map from client ID to { interval, options }. + private pollingInfoByQueryId = new Map(); + + private nextPoll: { + time: number; + timeout: NodeJS.Timeout; + } | null = null; + + public startPollingQuery( + options: WatchQueryOptions, + queryId: string, + listener?: QueryListener, + ): string { + const { pollInterval } = options; + + if (!pollInterval) { + throw new Error( + 'Attempted to start a polling query without a polling interval.', + ); + } + + // Do not poll in SSR mode + if (!this.ssrMode) { + this.pollingInfoByQueryId.set(queryId, { + interval: pollInterval, + // Avoid polling until at least pollInterval milliseconds from now. + // The -10 is a fudge factor to help with tests that rely on simulated + // timeouts via jest.runTimersToTime. + lastPollTimeMs: Date.now() - 10, + options: { + ...options, + fetchPolicy: 'network-only', + }, + }); + + if (listener) { + this.addQueryListener(queryId, listener); + } + + this.schedulePoll(pollInterval); + } + + return queryId; + } + + public stopPollingQuery(queryId: string) { + // Since the master polling interval dynamically adjusts to the contents of + // this.pollingInfoByQueryId, stopping a query from polling is as easy as + // removing it from the map. + this.pollingInfoByQueryId.delete(queryId); + } + + // Calling this method ensures a poll will happen within the specified time + // limit, canceling any pending polls that would not happen in time. + private schedulePoll(timeLimitMs: number) { + const now = Date.now(); + + if (this.nextPoll) { + if (timeLimitMs < this.nextPoll.time - now) { + // The next poll will happen too far in the future, so cancel it, and + // fall through to scheduling a new timeout. + clearTimeout(this.nextPoll.timeout); + } else { + // The next poll will happen within timeLimitMs, so all is well. + return; + } + } + + this.nextPoll = { + // Estimated time when the timeout will fire. + time: now + timeLimitMs, + + timeout: setTimeout(() => { + this.nextPoll = null; + let nextTimeLimitMs = Infinity; + + this.pollingInfoByQueryId.forEach((info, queryId) => { + // Pick next timeout according to current minimum interval. + if (info.interval < nextTimeLimitMs) { + nextTimeLimitMs = info.interval; + } + + if (!this.checkInFlight(queryId)) { + // If this query was last polled more than interval milliseconds + // ago, poll it now. Note that there may be a small delay between + // the desired polling time and the actual polling time (equal to + // at most the minimum polling interval across all queries), but + // that's the tradeoff to batching polling intervals. + if (Date.now() - info.lastPollTimeMs >= info.interval) { + const updateLastPollTime = () => { + info.lastPollTimeMs = Date.now(); + }; + this.fetchQuery(queryId, info.options, FetchType.poll).then( + // Set info.lastPollTimeMs after the fetch completes, whether + // or not it succeeded. Promise.prototype.finally would be nice + // here, but we don't have a polyfill for that at the moment, + // and this code has historically silenced errors, which is not + // the behavior of .finally(updateLastPollTime). + updateLastPollTime, + updateLastPollTime + ); + } + } + }); + + // If there were no entries in this.pollingInfoByQueryId, then + // nextTimeLimitMs will still be Infinity, so this.schedulePoll will + // not be called, thus ending the master polling interval. + if (isFinite(nextTimeLimitMs)) { + this.schedulePoll(nextTimeLimitMs); + } + }, timeLimitMs), + }; + } } diff --git a/packages/apollo-client/src/scheduler/__tests__/scheduler.ts b/packages/apollo-client/src/core/__tests__/scheduler.ts similarity index 77% rename from packages/apollo-client/src/scheduler/__tests__/scheduler.ts rename to packages/apollo-client/src/core/__tests__/scheduler.ts index c009d8d9ef3..a4265d0a42e 100644 --- a/packages/apollo-client/src/scheduler/__tests__/scheduler.ts +++ b/packages/apollo-client/src/core/__tests__/scheduler.ts @@ -2,13 +2,38 @@ import { InMemoryCache } from 'apollo-cache-inmemory'; import gql from 'graphql-tag'; import { stripSymbols } from 'apollo-utilities'; -import { QueryScheduler } from '../scheduler'; -import { QueryManager } from '../../core/QueryManager'; +import { QueryManager } from '../QueryManager'; import { WatchQueryOptions } from '../../core/watchQueryOptions'; import { mockSingleLink } from '../../__mocks__/mockLinks'; import { NetworkStatus } from '../../core/networkStatus'; import { DataStore } from '../../data/store'; +import { ObservableQuery } from '../../core/ObservableQuery'; + +// Used only for unit testing. +function registerPollingQuery( + queryManager: QueryManager, + queryOptions: WatchQueryOptions, +): ObservableQuery { + if (!queryOptions.pollInterval) { + throw new Error( + 'Attempted to register a non-polling query with the scheduler.', + ); + } + return new ObservableQuery({ + queryManager, + options: queryOptions, + }); +} + +function eachPollingQuery( + queryManager: QueryManager, + callback: (queryId: string, info: any) => any, +) { + (queryManager as any).pollingInfoByQueryId.forEach( + (info: any, queryId: string) => callback(queryId, info), + ); +} describe('QueryScheduler', () => { it('should throw an error if we try to start polling a non-polling query', () => { @@ -17,10 +42,6 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache({ addTypename: false })), }); - const scheduler = new QueryScheduler({ - queryManager, - }); - const query = gql` query { author { @@ -33,7 +54,7 @@ describe('QueryScheduler', () => { query, }; expect(() => { - scheduler.startPollingQuery(queryOptions, null as never); + queryManager.startPollingQuery(queryOptions, null as never); }).toThrow(); }); @@ -67,11 +88,8 @@ describe('QueryScheduler', () => { link: link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - const queryId = scheduler.startPollingQuery(queryOptions, 'fake-id', () => { + queryManager.startPollingQuery(queryOptions, 'fake-id', () => { timesFired += 1; }); setTimeout(() => { @@ -110,17 +128,14 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache({ addTypename: false })), link: link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - const queryId = scheduler.startPollingQuery( + const queryId = queryManager.startPollingQuery( queryOptions, 'fake-id', queryStoreValue => { if (queryStoreValue.networkStatus !== NetworkStatus.poll) { timesFired += 1; - scheduler.stopPollingQuery(queryId); + queryManager.stopPollingQuery(queryId); } }, ); @@ -160,11 +175,8 @@ describe('QueryScheduler', () => { link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - let observableQuery = scheduler.registerPollingQuery(queryOptions); + let observableQuery = registerPollingQuery(queryManager, queryOptions); let subscription = observableQuery.subscribe({ next(result) { timesFired += 1; @@ -208,11 +220,8 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache({ addTypename: false })), link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - let observableQuery = scheduler.registerPollingQuery(queryOptions); + let observableQuery = registerPollingQuery(queryManager, queryOptions); let subscription = observableQuery.subscribe({ next(result) { expect(stripSymbols(result.data)).toEqual(data[timesFired]); @@ -258,10 +267,7 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache({ addTypename: false })), link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); - let observableQuery = scheduler.registerPollingQuery(queryOptions); + let observableQuery = registerPollingQuery(queryManager, queryOptions); const subscription = observableQuery.subscribe({ next() { queryManager.stop(); @@ -272,8 +278,9 @@ describe('QueryScheduler', () => { error(errorVal) { expect(errorVal).toBeDefined(); - const queryId = scheduler.intervalQueries[queryOptions.pollInterval][0]; - expect(scheduler.checkInFlight(queryId)).toBe(false); + eachPollingQuery(queryManager, queryId => { + expect(queryManager.checkInFlight(queryId)).toBe(false); + }); subscription.unsubscribe(); queryManager.stop(); done(); @@ -303,10 +310,7 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache()), link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); - const observer = scheduler.registerPollingQuery(queryOptions); + const observer = registerPollingQuery(queryManager, queryOptions); const subscription = observer.subscribe({}); setTimeout(() => { subscription.unsubscribe(); @@ -332,24 +336,20 @@ describe('QueryScheduler', () => { request: queryOptions, result: { data }, }); - const queryManager = new QueryManager({ + const queryManager = new QueryManager({ store: new DataStore(new InMemoryCache()), link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); const queryId = 'fake-id'; - scheduler.addQueryOnInterval(queryId, queryOptions); - expect(Object.keys(scheduler.intervalQueries).length).toEqual(1); - expect(Object.keys(scheduler.intervalQueries)[0]).toEqual( - queryOptions.pollInterval.toString(), - ); - const queries = (scheduler.intervalQueries)[ - queryOptions.pollInterval.toString() - ]; - expect(queries.length).toEqual(1); - expect(queries[0]).toEqual(queryId); + queryManager.startPollingQuery(queryOptions, queryId); + + let count = 0; + eachPollingQuery(queryManager, (qid, info) => { + ++count; + expect(info.interval).toEqual(queryOptions.pollInterval); + expect(qid).toEqual(queryId); + }); + expect(count).toEqual(1); queryManager.stop(); }); @@ -398,32 +398,26 @@ describe('QueryScheduler', () => { }, ), }); - const scheduler = new QueryScheduler({ - queryManager, - }); - const observable1 = scheduler.registerPollingQuery(queryOptions1); + const observable1 = registerPollingQuery(queryManager, queryOptions1); observable1.subscribe({ next() { //do nothing }, }); - const observable2 = scheduler.registerPollingQuery(queryOptions2); + const observable2 = registerPollingQuery(queryManager, queryOptions2); observable2.subscribe({ next() { //do nothing }, }); - const keys = Object.keys(scheduler.intervalQueries); - expect(keys.length).toEqual(1); - expect(keys[0]).toEqual(String(interval)); - - const queryIds = (scheduler.intervalQueries)[keys[0]]; - expect(queryIds.length).toEqual(2); - expect(scheduler.registeredQueries[queryIds[0]]).toEqual(queryOptions1); - expect(scheduler.registeredQueries[queryIds[1]]).toEqual(queryOptions2); - + let count = 0; + eachPollingQuery(queryManager, (_, info) => { + expect(info.interval).toEqual(interval); + ++count; + }); + expect(count).toEqual(2); queryManager.stop(); }); @@ -449,11 +443,8 @@ describe('QueryScheduler', () => { result: { data }, }), }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - const observable = scheduler.registerPollingQuery({ + const observable = registerPollingQuery(queryManager, { query, pollInterval: 10, }); @@ -462,7 +453,10 @@ describe('QueryScheduler', () => { timesFired += 1; expect(stripSymbols(result.data)).toEqual(data); subscription.unsubscribe(); - expect(Object.keys(scheduler.registeredQueries).length).toEqual(0); + + let pollingCount = 0; + eachPollingQuery(queryManager, () => ++pollingCount); + expect(pollingCount).toEqual(0); }, }); @@ -506,22 +500,18 @@ describe('QueryScheduler', () => { store: new DataStore(new InMemoryCache({ addTypename: false })), link: link, }); - const scheduler = new QueryScheduler({ - queryManager, - }); let timesFired = 0; - let queryId = scheduler.startPollingQuery(queryOptions, 'fake-id', () => { - scheduler.stopPollingQuery(queryId); - }); + let queryId = queryManager.startPollingQuery( + queryOptions, + 'fake-id', + () => { + queryManager.stopPollingQuery(queryId); + }, + ); setTimeout(() => { - scheduler.startPollingQuery( - queryOptions, - 'fake-id2', - () => { - timesFired += 1; - }, - ); - expect(scheduler.intervalQueries[20].length).toEqual(1); + queryManager.startPollingQuery(queryOptions, 'fake-id2', () => { + timesFired += 1; + }); setTimeout(() => { expect(timesFired).toBeGreaterThanOrEqual(1); queryManager.stop(); diff --git a/packages/apollo-client/src/scheduler/scheduler.ts b/packages/apollo-client/src/scheduler/scheduler.ts deleted file mode 100644 index 2c19f5eb7db..00000000000 --- a/packages/apollo-client/src/scheduler/scheduler.ts +++ /dev/null @@ -1,218 +0,0 @@ -// The QueryScheduler is supposed to be a mechanism that schedules polling queries such that -// they are clustered into the time slots of the QueryBatcher and are batched together. It -// also makes sure that for a given polling query, if one instance of the query is inflight, -// another instance will not be fired until the query returns or times out. We do this because -// another query fires while one is already in flight, the data will stay in the "loading" state -// even after the first query has returned. - -// At the moment, the QueryScheduler implements the one-polling-instance-at-a-time logic and -// adds queries to the QueryBatcher queue. - -import { QueryManager } from '../core/QueryManager'; - -import { FetchType, QueryListener } from '../core/types'; - -import { ObservableQuery } from '../core/ObservableQuery'; - -import { WatchQueryOptions } from '../core/watchQueryOptions'; - -import { NetworkStatus } from '../core/networkStatus'; - -export class QueryScheduler { - // Map going from queryIds to query options that are in flight. - public inFlightQueries: { [queryId: string]: WatchQueryOptions } = {}; - - // Map going from query ids to the query options associated with those queries. Contains all of - // the queries, both in flight and not in flight. - public registeredQueries: { [queryId: string]: WatchQueryOptions } = {}; - - // Map going from polling interval with to the query ids that fire on that interval. - // These query ids are associated with a set of options in the this.registeredQueries. - public intervalQueries: { [interval: number]: string[] } = {}; - - // We use this instance to actually fire queries (i.e. send them to the batching - // mechanism). - public queryManager: QueryManager; - - // Map going from polling interval widths to polling timers. - private pollingTimers: { [interval: number]: any } = {}; - - private ssrMode: boolean = false; - - constructor({ - queryManager, - ssrMode, - }: { - queryManager: QueryManager; - ssrMode?: boolean; - }) { - this.queryManager = queryManager; - this.ssrMode = ssrMode || false; - } - - /** - * Call this method to terminate any active scheduler timers, making it safe - * to dispose of this QueryScheduler instance. - */ - public stop() { - Object.keys(this.registeredQueries).forEach(queryId => { - this.stopPollingQuery(queryId); - }); - // After calling this.stopPollingQuery for all registered queries, calling - // fetchQueriesOnInterval will remove the corresponding intervals. - Object.keys(this.intervalQueries).forEach(interval => { - this.fetchQueriesOnInterval(+interval); - }); - } - - public checkInFlight(queryId: string) { - const query = this.queryManager.queryStore.get(queryId); - - return ( - query && - query.networkStatus !== NetworkStatus.ready && - query.networkStatus !== NetworkStatus.error - ); - } - - public fetchQuery( - queryId: string, - options: WatchQueryOptions, - fetchType: FetchType, - ) { - return new Promise((resolve, reject) => { - this.queryManager - .fetchQuery(queryId, options, fetchType) - .then(result => { - resolve(result); - }) - .catch(error => { - reject(error); - }); - }); - } - - public startPollingQuery( - options: WatchQueryOptions, - queryId: string, - listener?: QueryListener, - ): string { - if (!options.pollInterval) { - throw new Error( - 'Attempted to start a polling query without a polling interval.', - ); - } - - // Do not poll in SSR mode - if (this.ssrMode) return queryId; - - this.registeredQueries[queryId] = options; - - if (listener) { - this.queryManager.addQueryListener(queryId, listener); - } - this.addQueryOnInterval(queryId, options); - - return queryId; - } - - public stopPollingQuery(queryId: string) { - // Remove the query options from one of the registered queries. - // The polling function will then take care of not firing it anymore. - delete this.registeredQueries[queryId]; - } - - // Fires the all of the queries on a particular interval. Called on a setInterval. - public fetchQueriesOnInterval(interval: number) { - // XXX this "filter" here is nasty, because it does two things at the same time. - // 1. remove queries that have stopped polling - // 2. call fetchQueries for queries that are polling and not in flight. - // TODO: refactor this to make it cleaner - this.intervalQueries[interval] = this.intervalQueries[interval].filter( - queryId => { - // If queryOptions can't be found from registeredQueries or if it has a - // different interval, it means that this queryId is no longer registered - // and should be removed from the list of queries firing on this interval. - // - // We don't remove queries from intervalQueries immediately in - // stopPollingQuery so that we can keep the timer consistent when queries - // are removed and replaced, and to avoid quadratic behavior when stopping - // many queries. - if ( - !( - this.registeredQueries.hasOwnProperty(queryId) && - this.registeredQueries[queryId].pollInterval === interval - ) - ) { - return false; - } - - // Don't fire this instance of the polling query is one of the instances is already in - // flight. - if (this.checkInFlight(queryId)) { - return true; - } - - const queryOptions = this.registeredQueries[queryId]; - const pollingOptions = { ...queryOptions } as WatchQueryOptions; - pollingOptions.fetchPolicy = 'network-only'; - // don't let unhandled rejections happen - this.fetchQuery(queryId, pollingOptions, FetchType.poll).catch( - () => {}, - ); - return true; - }, - ); - - if (this.intervalQueries[interval].length === 0) { - clearInterval(this.pollingTimers[interval]); - delete this.intervalQueries[interval]; - } - } - - // Adds a query on a particular interval to this.intervalQueries and then fires - // that query with all the other queries executing on that interval. Note that the query id - // and query options must have been added to this.registeredQueries before this function is called. - public addQueryOnInterval( - queryId: string, - queryOptions: WatchQueryOptions, - ) { - const interval = queryOptions.pollInterval; - - if (!interval) { - throw new Error( - `A poll interval is required to start polling query with id '${queryId}'.`, - ); - } - - // If there are other queries on this interval, this query will just fire with those - // and we don't need to create a new timer. - if ( - this.intervalQueries.hasOwnProperty(interval.toString()) && - this.intervalQueries[interval].length > 0 - ) { - this.intervalQueries[interval].push(queryId); - } else { - this.intervalQueries[interval] = [queryId]; - // set up the timer for the function that will handle this interval - this.pollingTimers[interval] = setInterval(() => { - this.fetchQueriesOnInterval(interval); - }, interval); - } - } - - // Used only for unit testing. - public registerPollingQuery( - queryOptions: WatchQueryOptions, - ): ObservableQuery { - if (!queryOptions.pollInterval) { - throw new Error( - 'Attempted to register a non-polling query with the scheduler.', - ); - } - return new ObservableQuery({ - scheduler: this, - options: queryOptions, - }); - } -} diff --git a/packages/apollo-client/tsconfig.test.json b/packages/apollo-client/tsconfig.test.json index ebc64752590..1c4af829781 100644 --- a/packages/apollo-client/tsconfig.test.json +++ b/packages/apollo-client/tsconfig.test.json @@ -19,6 +19,5 @@ "src/core/__tests__/fetchPolicies.ts", "src/data/__tests__/queries.ts", "src/errors/__tests__/ApolloError.ts", - "src/scheduler/__tests__/scheduler.ts" ] } From a94c2aa7798f135c4ae2cebac0c2e60db2c3f075 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 13:09:35 -0500 Subject: [PATCH 011/230] Mention PR #4337 in CHANGELOG.md. --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d15a48f620..7b8b3bb5caf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ **Note:** This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific `apollo-client` release. -## Apollo Client (vNext) +## Apollo Client (vNext, minor bump) + +### Apollo Client (vNext, minor bump) + +- Un-revert "Improve (and shorten) query polling implementation. + ([#4243](https://github.com/apollographql/apollo-client/pull/4243))"
+ [PR #4337](https://github.com/apollographql/apollo-client/pull/4337) ### Apollo Client (vNext) From c3cb3a9901b930ccdb70c8bc8b43bb8721334483 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 24 Jan 2019 10:53:33 -0500 Subject: [PATCH 012/230] Fix minor TypeScript errors in local state tests. Running tsc -p tsconfig.test.json --noEmit in the apollo-client/packages/apollo-client directory produced a number of warnings and errors before this commit (tsc version 3.2.2). --- .../apollo-client/src/__mocks__/mockLinks.ts | 11 ----- .../src/__tests__/local-state/general.ts | 49 ++++++++++++------- .../src/__tests__/local-state/initializers.ts | 2 +- .../src/__tests__/local-state/resolvers.ts | 22 ++++----- 4 files changed, 44 insertions(+), 40 deletions(-) diff --git a/packages/apollo-client/src/__mocks__/mockLinks.ts b/packages/apollo-client/src/__mocks__/mockLinks.ts index a51e843e750..3002350a9d2 100644 --- a/packages/apollo-client/src/__mocks__/mockLinks.ts +++ b/packages/apollo-client/src/__mocks__/mockLinks.ts @@ -3,7 +3,6 @@ import { ApolloLink, FetchResult, Observable, - DocumentNode, GraphQLRequest, } from 'apollo-link'; @@ -25,16 +24,6 @@ export function mockObservableLink(): MockSubscriptionLink { return new MockSubscriptionLink(); } -interface MockOperation { - query: DocumentNode; - variables: Record; - operationName?: string; - extensions?: Record; - setContext?: (context: Record) => Record; - getContext?: () => Record; - toKey?: () => string; -} - export interface MockedResponse { request: GraphQLRequest; result?: FetchResult; diff --git a/packages/apollo-client/src/__tests__/local-state/general.ts b/packages/apollo-client/src/__tests__/local-state/general.ts index c4df2728e7e..648970bfe27 100644 --- a/packages/apollo-client/src/__tests__/local-state/general.ts +++ b/packages/apollo-client/src/__tests__/local-state/general.ts @@ -8,7 +8,7 @@ import { InMemoryCache, IntrospectionFragmentMatcher, } from 'apollo-cache-inmemory'; -import { ApolloLink, Observable } from 'apollo-link'; +import { ApolloLink, Observable, Operation } from 'apollo-link'; describe('General functionality', () => { it('should not impact normal non-@client use', () => { @@ -417,12 +417,17 @@ describe('Sample apps', () => { updater: (data: { count: number }, variables: { amount: number }) => any, ) => { return ( - result: {}, + _result: {}, variables: { amount: number }, { cache }: { cache: ApolloCache }, ): null => { - const data = updater(client.readQuery({ query, variables }), variables); - cache.writeQuery({ query, variables, data }); + const read = client.readQuery<{ count: number }>({ query, variables }); + if (read) { + const data = updater(read, variables); + cache.writeQuery({ query, variables, data }); + } else { + throw new Error('readQuery returned a falsy value'); + } return null; }; }; @@ -509,10 +514,10 @@ describe('Sample apps', () => { const update = ( query: DocumentNode, - updater: (todos, variables) => any, + updater: (todos: any, variables: Todo) => any, ) => { return ( - result: {}, + _result: {}, variables: Todo, { cache }: { cache: ApolloCache }, ): null => { @@ -587,7 +592,7 @@ describe('Reset/clear store', () => { initializers, resolvers: { Mutation: { - foo: (_, $, { cache }) => { + foo(_data, _args, { cache }) { cache.writeData({ data: { foo: 'woo' } }); return null; }, @@ -845,8 +850,11 @@ describe('Reset/clear store', () => { complete: fail, }); - const makeTerminatingCheck = (body, done) => { - return (...args) => { + const makeTerminatingCheck = ( + body: (...args: any[]) => void, + done: () => any, + ) => { + return (...args: any[]) => { try { body(...args); done(); @@ -919,13 +927,17 @@ describe('Reset/clear store', () => { const componentObservable = client.watchQuery({ query: counterQuery }); + let nextCallCount = 0; const unsub = componentObservable.subscribe({ - next: ({ data }) => done.fail, + next: () => ++nextCallCount, error: done.fail, complete: done.fail, }); - client.resetStore() as Promise; + client.resetStore().then(() => { + expect(nextCallCount).toBe(1); + done(); + }); }, ); }); @@ -985,7 +997,7 @@ describe('Combining client and server state/operations', () => { }, }, ListItem: { - isSelected: (source, args, context) => { + isSelected(source) { expect(source.name).toBeDefined(); // List items default to an unselected state return false; @@ -997,7 +1009,7 @@ describe('Combining client and server state/operations', () => { const observer = client.watchQuery({ query }); let count = 0; - const sub = observer.subscribe({ + observer.subscribe({ next: response => { if (count === 0) { const initial = { ...data }; @@ -1008,8 +1020,8 @@ describe('Combining client and server state/operations', () => { expect(response.data).toMatchObject(initial); } if (count === 1) { - expect(response.data.list.items[0].isSelected).toBe(true); - expect(response.data.list.items[1].isSelected).toBe(false); + expect((response.data as any).list.items[0].isSelected).toBe(true); + expect((response.data as any).list.items[1].isSelected).toBe(false); done(); } count++; @@ -1206,7 +1218,7 @@ describe('Combining client and server state/operations', () => { `; let watchCount = 0; - const link = new ApolloLink(operation => { + const link = new ApolloLink((operation: Operation): Observable<{}> => { if (operation.operationName === 'SampleQuery') { return Observable.of({ data: { user: { __typename: 'User', firstName: 'John' } }, @@ -1217,6 +1229,9 @@ describe('Combining client and server state/operations', () => { data: { updateUser: { __typename: 'User', firstName: 'Harry' } }, }); } + return Observable.of({ + errors: [new Error(`Unknown operation ${operation.operationName}`)], + }) }); const cache = new InMemoryCache(); @@ -1249,7 +1264,7 @@ describe('Combining client and server state/operations', () => { watchCount += 1; client.mutate({ mutation, - update: (proxy, { data: { updateUser } }) => { + update(proxy, { data: { updateUser } }: { data: any }) { proxy.writeQuery({ query: userQuery, data: { diff --git a/packages/apollo-client/src/__tests__/local-state/initializers.ts b/packages/apollo-client/src/__tests__/local-state/initializers.ts index 03e264ce784..8b53a90a254 100644 --- a/packages/apollo-client/src/__tests__/local-state/initializers.ts +++ b/packages/apollo-client/src/__tests__/local-state/initializers.ts @@ -130,7 +130,7 @@ describe('General', () => { client .query({ query }) - .then(({ data }) => { + .then(() => { expect(fooResolver).not.toHaveBeenCalled(); }) .catch(e => console.error(e)); diff --git a/packages/apollo-client/src/__tests__/local-state/resolvers.ts b/packages/apollo-client/src/__tests__/local-state/resolvers.ts index c12f9bd3758..fc3d95b5467 100644 --- a/packages/apollo-client/src/__tests__/local-state/resolvers.ts +++ b/packages/apollo-client/src/__tests__/local-state/resolvers.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { DocumentNode, ExecutionResult } from 'graphql'; import { assign } from 'lodash'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink, Observable, FetchResult } from 'apollo-link'; +import { ApolloLink, Observable } from 'apollo-link'; import ApolloClient from '../..'; import mockQueryManager from '../../__mocks__/mockQueryManager'; @@ -38,7 +38,7 @@ const assertWithObserver = ({ observer: Observer>; }) => { const queryManager = mockQueryManager({ - request: { query: serverQuery, variables }, + request: { query: serverQuery || query, variables }, result: serverResult, error, delay, @@ -203,7 +203,7 @@ describe('Basic resolver capabilities', () => { foo: () => ({ __typename: 'Foo' }), }, Foo: { - bar: (data: any, { id }: { id: number }) => id, + bar: (_data: any, { id }: { id: number }) => id, }, }; @@ -239,7 +239,7 @@ describe('Basic resolver capabilities', () => { foo: () => ({ __typename: 'Foo' }), }, Foo: { - bar: (data: any, _: any, { id }: { id: number }) => id, + bar: (_data: any, _args: any, { id }: { id: number }) => id, }, }; @@ -382,7 +382,7 @@ describe('Writing cache data from resolvers', () => { link: ApolloLink.empty(), resolvers: { Mutation: { - start: (_, $, { cache }) => { + start(_data, _args, { cache }) { cache.writeData({ data: { field: 1 } }); return { start: true }; }, @@ -418,7 +418,7 @@ describe('Writing cache data from resolvers', () => { link: ApolloLink.empty(), resolvers: { Mutation: { - start: (_, $, { cache }) => { + start(_data, _args, { cache }) { cache.writeQuery({ query, data: { @@ -463,7 +463,7 @@ describe('Writing cache data from resolvers', () => { link: ApolloLink.empty(), resolvers: { Mutation: { - start: (_, $, { cache }) => { + start(_data, _args, { cache }) { cache.writeQuery({ query, data: { @@ -520,7 +520,7 @@ describe('Writing cache data from resolvers', () => { link: ApolloLink.empty(), resolvers: { Mutation: { - start: (_, $, { cache }) => { + start(_data, _args, { cache }) { // This would cause a warning to be printed because we don't have // __typename on the obj field. But that's intentional because // that's exactly the situation we're trying to test... @@ -892,15 +892,15 @@ describe('Force local resolvers', () => { }); client.watchQuery({ query }).subscribe({ - next(result: FetchResult) { + next() { expect(callCount).toBe(1); client.watchQuery({ query }).subscribe({ - next(result: FetchResult) { + next() { expect(callCount).toBe(2); client.watchQuery({ query: queryNoForce }).subscribe({ - next(result: FetchResult) { + next() { // Result is loaded from the cache since the resolver // isn't being forced. expect(callCount).toBe(2); From 8af8875549e4c1fc1215dd998199226cb75595ee Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 19:31:28 -0500 Subject: [PATCH 013/230] Move mergeDeep helper from apollo-cache-inmemory to apollo-utilities. --- .../src/readFromStore.ts | 75 +--------------- packages/apollo-utilities/src/index.ts | 1 + .../src/util/__tests__/mergeDeep.ts | 88 +++++++++++++++++++ .../apollo-utilities/src/util/mergeDeep.ts | 84 +++++++++++++++--- 4 files changed, 163 insertions(+), 85 deletions(-) create mode 100644 packages/apollo-utilities/src/util/__tests__/mergeDeep.ts diff --git a/packages/apollo-cache-inmemory/src/readFromStore.ts b/packages/apollo-cache-inmemory/src/readFromStore.ts index 008fea46eda..0091759e072 100644 --- a/packages/apollo-cache-inmemory/src/readFromStore.ts +++ b/packages/apollo-cache-inmemory/src/readFromStore.ts @@ -20,6 +20,7 @@ import { resultKeyNameFromField, shouldInclude, toIdValue, + mergeDeepArray, } from 'apollo-utilities'; import { Cache } from 'apollo-cache'; @@ -296,9 +297,7 @@ export class StoreReader { execContext, }: ExecSelectionSetOptions): ExecResult { const { fragmentMap, contextValue, variableValues: variables } = execContext; - const finalResult: ExecResult = { - result: {}, - }; + const finalResult: ExecResult = { result: null }; const objectsToMerge: { [key: string]: any }[] = []; @@ -374,7 +373,7 @@ export class StoreReader { // Perform a single merge at the end so that we can avoid making more // defensive shallow copies than necessary. - merge(finalResult.result, objectsToMerge); + finalResult.result = mergeDeepArray(objectsToMerge); return finalResult; } @@ -589,71 +588,3 @@ function readStoreResolver( result: fieldValue, }; } - -const hasOwn = Object.prototype.hasOwnProperty; - -function merge( - target: { [key: string]: any }, - sources: { [key: string]: any }[] -) { - const pastCopies: any[] = []; - sources.forEach(source => { - mergeHelper(target, source, pastCopies); - }); - return target; -} - -function mergeHelper( - target: { [key: string]: any }, - source: { [key: string]: any }, - pastCopies: any[], -) { - if (source !== null && typeof source === 'object') { - // In case the target has been frozen, make an extensible copy so that - // we can merge properties into the copy. - if (Object.isExtensible && !Object.isExtensible(target)) { - target = shallowCopyForMerge(target, pastCopies); - } - - Object.keys(source).forEach(sourceKey => { - const sourceValue = source[sourceKey]; - if (hasOwn.call(target, sourceKey)) { - const targetValue = target[sourceKey]; - if (sourceValue !== targetValue) { - // When there is a key collision, we need to make a shallow copy of - // target[sourceKey] so the merge does not modify any source objects. - // To avoid making unnecessary copies, we use a simple array to track - // past copies, instead of a Map, since the number of copies should - // be relatively small, and some Map polyfills modify their keys. - target[sourceKey] = mergeHelper( - shallowCopyForMerge(targetValue, pastCopies), - sourceValue, - pastCopies, - ); - } - } else { - // If there is no collision, the target can safely share memory with - // the source, and the recursion can terminate here. - target[sourceKey] = sourceValue; - } - }); - } - - return target; -} - -function shallowCopyForMerge(value: T, pastCopies: any[]): T { - if ( - value !== null && - typeof value === 'object' && - pastCopies.indexOf(value) < 0 - ) { - if (Array.isArray(value)) { - value = (value as any).slice(0); - } else { - value = { ...(value as any) }; - } - pastCopies.push(value); - } - return value; -} diff --git a/packages/apollo-utilities/src/index.ts b/packages/apollo-utilities/src/index.ts index 605675b41f1..a79226505a6 100644 --- a/packages/apollo-utilities/src/index.ts +++ b/packages/apollo-utilities/src/index.ts @@ -9,6 +9,7 @@ export * from './util/environment'; export * from './util/errorHandling'; export * from './util/isEqual'; export * from './util/maybeDeepFreeze'; +export * from './util/mergeDeep'; export * from './util/warnOnce'; export * from './util/stripSymbols'; export * from './util/mergeDeep'; diff --git a/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts new file mode 100644 index 00000000000..defc5d57ccf --- /dev/null +++ b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts @@ -0,0 +1,88 @@ +import { mergeDeep } from '../mergeDeep'; + +describe('mergeDeep', function() { + it('should return an object if first argument falsy', function() { + expect(mergeDeep()).toEqual({}); + expect(mergeDeep(null)).toEqual({}); + expect(mergeDeep(null, { foo: 42 })).toEqual({ foo: 42 }); + }); + + it('should preserve identity for single arguments', function() { + const arg = Object.create(null); + expect(mergeDeep(arg)).toBe(arg); + }); + + it('should preserve identity when merging non-conflicting objects', function() { + const a = { a: { name: 'ay' } }; + const b = { b: { name: 'bee' } }; + const c = mergeDeep(a, b); + expect(c.a).toBe(a.a); + expect(c.b).toBe(b.b); + expect(c).toEqual({ + a: { name: 'ay' }, + b: { name: 'bee' }, + }); + }); + + it('should shallow-copy conflicting fields', function() { + const a = { conflict: { fromA: [1, 2, 3] } }; + const b = { conflict: { fromB: [4, 5] } }; + const c = mergeDeep(a, b); + expect(c.conflict).not.toBe(a.conflict); + expect(c.conflict).not.toBe(b.conflict); + expect(c.conflict.fromA).toBe(a.conflict.fromA); + expect(c.conflict.fromB).toBe(b.conflict.fromB); + expect(c).toEqual({ + conflict: { + fromA: [1, 2, 3], + fromB: [4, 5], + }, + }); + }); + + it('should resolve conflicts among more than two objects', function() { + const sources = []; + + for (let i = 0; i < 100; ++i) { + sources.push({ + ['unique' + i]: { value: i }, + conflict: { + ['from' + i]: { value: i }, + nested: { + ['nested' + i]: { value: i }, + }, + }, + }); + } + + const merged = mergeDeep(...sources); + + sources.forEach((source, i) => { + expect(merged['unique' + i].value).toBe(i); + expect(source['unique' + i]).toBe(merged['unique' + i]); + + expect(merged.conflict).not.toBe(source.conflict); + expect(merged.conflict['from' + i].value).toBe(i); + expect(merged.conflict['from' + i]).toBe(source.conflict['from' + i]); + + expect(merged.conflict.nested).not.toBe(source.conflict.nested); + expect(merged.conflict.nested['nested' + i].value).toBe(i); + expect(merged.conflict.nested['nested' + i]).toBe( + source.conflict.nested['nested' + i], + ); + }); + }); + + it('can merge array elements', function() { + const a = [{ a: 1 }, { a: 'ay' }, 'a']; + const b = [{ b: 2 }, { b: 'bee' }, 'b']; + const c = [{ c: 3 }, { c: 'cee' }, 'c']; + const d = { 1: { d: 'dee' } }; + + expect(mergeDeep(a, b, c, d)).toEqual([ + { a: 1, b: 2, c: 3 }, + { a: 'ay', b: 'bee', c: 'cee', d: 'dee' }, + 'a', + ]); + }); +}); diff --git a/packages/apollo-utilities/src/util/mergeDeep.ts b/packages/apollo-utilities/src/util/mergeDeep.ts index 4e716a21446..b2ebaece081 100644 --- a/packages/apollo-utilities/src/util/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/mergeDeep.ts @@ -1,21 +1,79 @@ -function isObject(item: any): boolean { - return item && typeof item === 'object' && !Array.isArray(item); +const { hasOwnProperty } = Object.prototype; + +// These mergeDeep and mergeDeepArray utilities merge any number of objects +// together, sharing as much memory as possible with the source objects, while +// remaining careful to avoid modifying any source objects. + +export function mergeDeep(...sources: any[]) { + return mergeDeepArray(sources); +} + +export function mergeDeepArray(sources: any[]) { + let first = sources[0] || {}; + const count = sources.length; + if (count > 1) { + const pastCopies: any[] = []; + first = shallowCopyForMerge(first, pastCopies); + for (let i = 1; i < count; ++i) { + mergeHelper(first, sources[i], pastCopies); + } + } + return first; } -export function mergeDeep(target: any, source: any): any { - let output = Object.assign({}, target); - if (isObject(target) && isObject(source)) { - Object.keys(source).forEach(key => { - if (isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, { [key]: source[key] }); - } else { - output[key] = mergeDeep(target[key], source[key]); +function mergeHelper( + target: Record, + source: Record, + pastCopies: any[], +) { + if (source !== null && typeof source === 'object') { + // In case the target has been frozen, make an extensible copy so that + // we can merge properties into the copy. + if (Object.isExtensible && !Object.isExtensible(target)) { + target = shallowCopyForMerge(target, pastCopies); + } + + Object.keys(source).forEach(sourceKey => { + const sourceValue = source[sourceKey]; + if (hasOwnProperty.call(target, sourceKey)) { + const targetValue = target[sourceKey]; + if (sourceValue !== targetValue) { + // When there is a key collision, we need to make a shallow copy of + // target[sourceKey] so the merge does not modify any source objects. + // To avoid making unnecessary copies, we use a simple array to track + // past copies, since it's safe to modify copies created earlier in + // the merge. We use an array for pastCopies instead of a Map or Set, + // since the number of copies should be relatively small, and some + // Map/Set polyfills modify their keys. + target[sourceKey] = mergeHelper( + shallowCopyForMerge(targetValue, pastCopies), + sourceValue, + pastCopies, + ); } } else { - Object.assign(output, { [key]: source[key] }); + // If there is no collision, the target can safely share memory with + // the source, and the recursion can terminate here. + target[sourceKey] = sourceValue; } }); } - return output; + + return target; +} + +function shallowCopyForMerge(value: T, pastCopies: any[]): T { + if ( + value !== null && + typeof value === 'object' && + pastCopies.indexOf(value) < 0 + ) { + if (Array.isArray(value)) { + value = (value as any).slice(0); + } else { + value = { ...(value as any) }; + } + pastCopies.push(value); + } + return value; } From bda4245ff64fce05b54d14137495a8e6e0940020 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 13:40:57 -0500 Subject: [PATCH 014/230] Use LocalStateOptions type for LocalState constructor options. --- packages/apollo-client/src/core/LocalState.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 9b430c9fb87..7ea0b8c702f 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -80,6 +80,15 @@ export type ExecOptions = { fragmentMatcher?: FragmentMatcher; }; +export type LocalStateOptions = { + cache: ApolloCache; + client?: ApolloClient; + initializers?: Initializers | Initializers[]; + resolvers?: Resolvers | Resolvers[]; + typeDefs?: string | string[] | DocumentNode | DocumentNode[]; + fragmentMatcher?: FragmentMatcher; +}; + export class LocalState { private cache: ApolloCache; private client: ApolloClient; @@ -95,14 +104,7 @@ export class LocalState { resolvers, typeDefs, fragmentMatcher, - }: { - cache: ApolloCache; - client?: ApolloClient; - initializers?: Initializers | Initializers[]; - resolvers?: Resolvers | Resolvers[]; - typeDefs?: string | string[] | DocumentNode | DocumentNode[]; - fragmentMatcher?: FragmentMatcher; - }) { + }: LocalStateOptions) { this.cache = cache; if (client) { From e8047bba42cbf35ce6ff3b30042ef06921dc2d41 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 12:57:24 -0500 Subject: [PATCH 015/230] Use schemas.push instead of schemas.concat. --- packages/apollo-client/src/core/LocalState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 7ea0b8c702f..95083d9d387 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -289,7 +289,7 @@ export class LocalState { if (this.typeDefs) { const directives = 'directive @client on FIELD'; const definition = this.normalizeTypeDefs(this.typeDefs); - schemas = schemas.concat([{ definition, directives }]); + schemas.push({ definition, directives }); } const newContext = { From 0c4dc55b95d25d191b71e057fbac44aadc937380 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 11:02:31 -0500 Subject: [PATCH 016/230] Use Array.prototype.some in LocalState#shouldForceResolvers. --- packages/apollo-client/src/core/LocalState.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 95083d9d387..84d57f53fa7 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -7,7 +7,6 @@ import { InlineFragmentNode, FragmentDefinitionNode, FieldNode, - BooleanValueNode, ASTNode, } from 'graphql'; import { print } from 'graphql/language/printer'; @@ -350,13 +349,12 @@ export class LocalState { Directive: { enter(node) { if (node.name.value === 'client' && node.arguments) { - forceResolvers = - node.arguments - .filter(arg => ( - arg.name.value === 'always' && - (arg.value as BooleanValueNode).value === true - )) - .length > 0; + forceResolvers = node.arguments.some( + arg => + arg.name.value === 'always' && + arg.value.kind === 'BooleanValue' && + arg.value.value === true, + ); if (forceResolvers) { return BREAK; } From a356e43abc3a00021c8a82446fdab0c701a0b989 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 12:09:54 -0500 Subject: [PATCH 017/230] Fix array parameter type of LocalState#resolveSubSelectedArray. --- packages/apollo-client/src/core/LocalState.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 84d57f53fa7..a13147dcfa1 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -622,11 +622,11 @@ export class LocalState { private resolveSubSelectedArray( field: FieldNode, - result: any, + result: any[], execContext: ExecContext, ): any { return Promise.all( - result.map((item: any) => { + result.map(item => { if (item === null) { return null; } From 73aac7e03b48a49ad893029bbe06203278cea2aa Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 20:44:46 -0500 Subject: [PATCH 018/230] Remove unused execOptions.resultMapper property. --- packages/apollo-client/src/core/LocalState.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index a13147dcfa1..ba824b7a9bc 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -46,11 +46,6 @@ export type Resolver = ( export type VariableMap = { [name: string]: any }; -export type ResultMapper = ( - values: { [fieldName: string]: any }, - rootValue: any, -) => any; - export type FragmentMatcher = ( rootValue: any, typeCondition: string, @@ -61,7 +56,6 @@ export type ExecContext = { fragmentMap: FragmentMap; context: any; variables: VariableMap; - resultMapper?: ResultMapper; fragmentMatcher: FragmentMatcher; defaultOperationType?: string | null; exportedVariables: Record; @@ -75,7 +69,6 @@ export type ExecInfo = { }; export type ExecOptions = { - resultMapper?: ResultMapper; fragmentMatcher?: FragmentMatcher; }; @@ -445,7 +438,6 @@ export class LocalState { const mainDefinition = getMainDefinition(document); const fragments = getFragmentDefinitions(document); const fragmentMap = createFragmentMap(fragments); - const resultMapper = execOptions.resultMapper; const definitionOperation = (mainDefinition) .operation; @@ -465,7 +457,6 @@ export class LocalState { client, }, variables: variables || {}, - resultMapper, fragmentMatcher, defaultOperationType, exportedVariables: {}, @@ -544,9 +535,7 @@ export class LocalState { await Promise.all(selectionSet.selections.map(execute)); - return execContext.resultMapper - ? execContext.resultMapper(result, rootValue) - : result; + return result; } private async resolveField( From 69a4fd58134820f7654ea4be3d36d89855c212dc Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 20:45:57 -0500 Subject: [PATCH 019/230] Simplify LocalState#buildRootValueFromCache. --- packages/apollo-client/src/core/LocalState.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index ba824b7a9bc..48af93a7385 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -407,13 +407,11 @@ export class LocalState { document: DocumentNode, variables?: Record, ) { - const query = buildQueryFromSelectionSet(document); - const cachedData = this.cache.diff({ - query, + return this.cache.diff({ + query: buildQueryFromSelectionSet(document), variables, optimistic: false, - }); - return cachedData.result; + }).result; } private normalizeTypeDefs( From bfe40875eb0e3a76b17b33046ede90553262a499 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Jan 2019 21:19:56 -0500 Subject: [PATCH 020/230] Simplify LocalState#runResolvers. By relying on normal promise rejection, we can avoid needing the onError callback parameter. Removing await expressions in favor of explicit promises tends to save a small amount of bundle size. It's still a good idea to keep runResolvers async, because async functions reliably capture any exceptions thrown during the execution of the function. --- packages/apollo-client/src/core/LocalState.ts | 36 +++++++------------ .../apollo-client/src/core/QueryManager.ts | 36 ++++++++++--------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 48af93a7385..8755151aecb 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -203,45 +203,33 @@ export class LocalState { remoteResult, context, variables, - onError, onlyRunForcedResolvers = false, }: { document: DocumentNode | null; remoteResult?: ExecutionResult; context?: Record; variables?: Record; - onError?: (error: any) => void; onlyRunForcedResolvers?: boolean; - }) { - let localResult: Record = {}; - + }): Promise { if (document) { let rootValue = this.buildRootValueFromCache(document, variables); rootValue = rootValue ? mergeDeep(rootValue, remoteResult) : remoteResult; - try { - const data = await this.resolveDocument( - document, - rootValue, - context, - variables, - { fragmentMatcher: this.fragmentMatcher }, - onlyRunForcedResolvers, - ); - localResult = data.result; - } catch (error) { - if (onError) { - onError(error); - return; - } else { - throw error; - } - } + return this.resolveDocument( + document, + rootValue, + context, + variables, + { fragmentMatcher: this.fragmentMatcher }, + onlyRunForcedResolvers, + ).then(data => ({ + ...remoteResult, + ...data.result, + })); } return { ...remoteResult, - ...localResult, }; } diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 60899367fe2..d1e361ed6d2 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -312,16 +312,18 @@ export class QueryManager { // Run the query through local client resolvers. if (clientQuery && hasDirectives(['client'], clientQuery)) { - updatedResult.data = await self.localState.runResolvers({ - document: clientQuery, - remoteResult: result.data, - context, - variables, - onError(error) { + updatedResult.data = await self.localState + .runResolvers({ + document: clientQuery, + remoteResult: result.data, + context, + variables, + }) + .catch(error => { handlingNext = false; reject(error); - }, - }); + return updatedResult.data; + }); } if (fetchPolicy !== 'no-cache') { @@ -1268,16 +1270,18 @@ export class QueryManager { if (requestId >= (lastRequestId || 1)) { // Run the query through local client resolvers. if (clientQuery && hasDirectives(['client'], clientQuery)) { - updatedResult.data = await this.localState.runResolvers({ - document: clientQuery, - remoteResult: result.data, - context: updatedContext, - variables, - onError(error) { + updatedResult.data = await this.localState + .runResolvers({ + document: clientQuery, + remoteResult: result.data, + context: updatedContext, + variables, + }) + .catch(error => { handlingNext = false; reject(error); - }, - }); + return updatedResult.data; + }); } if (fetchPolicy !== 'no-cache') { From 655423f328e83a3a52079bfc1c1aa528e0287345 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 10:59:29 -0500 Subject: [PATCH 021/230] Simplify LocalState#resolveDocument. --- packages/apollo-client/src/core/LocalState.ts | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 8755151aecb..bea854b7de9 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -57,9 +57,9 @@ export type ExecContext = { context: any; variables: VariableMap; fragmentMatcher: FragmentMatcher; - defaultOperationType?: string | null; + defaultOperationType: string; exportedVariables: Record; - onlyRunForcedResolvers?: boolean; + onlyRunForcedResolvers: boolean; }; export type ExecInfo = { @@ -68,10 +68,6 @@ export type ExecInfo = { directives: DirectiveInfo; }; -export type ExecOptions = { - fragmentMatcher?: FragmentMatcher; -}; - export type LocalStateOptions = { cache: ApolloCache; client?: ApolloClient; @@ -220,7 +216,7 @@ export class LocalState { rootValue, context, variables, - { fragmentMatcher: this.fragmentMatcher }, + this.fragmentMatcher, onlyRunForcedResolvers, ).then(data => ({ ...remoteResult, @@ -416,49 +412,45 @@ export class LocalState { private async resolveDocument( document: DocumentNode, rootValue?: any, - context?: any, - variables?: VariableMap, - execOptions: ExecOptions = {}, - onlyRunForcedResolvers?: boolean, + context: any = {}, + variables: VariableMap = {}, + fragmentMatcher: FragmentMatcher = () => true, + onlyRunForcedResolvers: boolean = false, ) { const mainDefinition = getMainDefinition(document); const fragments = getFragmentDefinitions(document); const fragmentMap = createFragmentMap(fragments); - const definitionOperation = (mainDefinition) + const definitionOperation = (mainDefinition as OperationDefinitionNode) .operation; - let defaultOperationType: string | null = definitionOperation + + const defaultOperationType = definitionOperation ? capitalizeFirstLetter(definitionOperation) : 'Query'; - // Default matcher always matches all fragments. - const fragmentMatcher = execOptions.fragmentMatcher || (() => true); - const { cache, client } = this; const execContext: ExecContext = { fragmentMap, context: { - ...(context || {}), + ...context, cache, client, }, - variables: variables || {}, + variables, fragmentMatcher, defaultOperationType, exportedVariables: {}, onlyRunForcedResolvers, }; - const result = await this.resolveSelectionSet( + return this.resolveSelectionSet( mainDefinition.selectionSet, rootValue, execContext, - ); - - return { + ).then(result => ({ result, exportedVariables: execContext.exportedVariables, - }; + })); } private async resolveSelectionSet( From dab44c82363d7db6f9374a6546ee53f132e8ff6c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 11:30:13 -0500 Subject: [PATCH 022/230] Simplify LocalState#resolveSelectionSet. Besides removing await expressions, this commit performs a single mergeDeepArray instead of multiple binary mergeDeep calls. --- packages/apollo-client/src/core/LocalState.ts | 89 +++++++------------ 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index bea854b7de9..58800eb7a72 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -19,6 +19,7 @@ import { hasDirectives, removeClientSetsFromDocument, mergeDeep, + mergeDeepArray, warnOnceInDevelopment, FragmentMap, DirectiveInfo, @@ -459,61 +460,55 @@ export class LocalState { execContext: ExecContext, ) { const { fragmentMap, context, variables } = execContext; - const result: Record = {}; + const resultsToMerge: any[] = []; - const execute = async (selection: SelectionNode) => { + const execute = async (selection: SelectionNode): Promise => { if (!shouldInclude(selection, variables)) { // Skip this entirely. return; } if (isField(selection)) { - const fieldResult = await this.resolveField( - selection, - rootValue, - execContext, + return this.resolveField(selection, rootValue, execContext).then( + fieldResult => { + if (typeof fieldResult !== 'undefined') { + resultsToMerge.push({ + [resultKeyNameFromField(selection)]: fieldResult, + }); + } + }, ); - const resultFieldKey = resultKeyNameFromField(selection); + } - if (fieldResult !== undefined) { - if (result[resultFieldKey] === undefined) { - result[resultFieldKey] = fieldResult; - } else { - this.mergeIntoResults(result[resultFieldKey], fieldResult); - } - } - } else { - let fragment: InlineFragmentNode | FragmentDefinitionNode; + let fragment: InlineFragmentNode | FragmentDefinitionNode; - if (isInlineFragment(selection)) { - fragment = selection; - } else { - // This is a named fragment. - fragment = fragmentMap[selection.name.value]; - if (!fragment) { - throw new Error(`No fragment named ${selection.name.value}`); - } + if (isInlineFragment(selection)) { + fragment = selection; + } else { + // This is a named fragment. + fragment = fragmentMap[selection.name.value]; + if (!fragment) { + throw new Error(`No fragment named ${selection.name.value}`); } + } - if (fragment && fragment.typeCondition) { - const typeCondition = fragment.typeCondition.name.value; - if (execContext.fragmentMatcher(rootValue, typeCondition, context)) { - const fragmentResult = await this.resolveSelectionSet( - fragment.selectionSet, - rootValue, - execContext, - ); - this.mergeIntoResults(result, fragmentResult); - } + if (fragment && fragment.typeCondition) { + const typeCondition = fragment.typeCondition.name.value; + if (execContext.fragmentMatcher(rootValue, typeCondition, context)) { + return this.resolveSelectionSet( + fragment.selectionSet, + rootValue, + execContext, + ).then(fragmentResult => { + resultsToMerge.push(fragmentResult); + }); } } - - return Promise.resolve(undefined); }; - await Promise.all(selectionSet.selections.map(execute)); - - return result; + return Promise.all(selectionSet.selections.map(execute)).then(function() { + return mergeDeepArray(resultsToMerge); + }); } private async resolveField( @@ -610,20 +605,4 @@ export class LocalState { }), ); } - - private mergeIntoResults( - dest: Record, - src: Record, - ) { - if (src !== null && typeof src === 'object') { - Object.keys(src).forEach((key: string) => { - const srcVal = src[key]; - if (!Object.prototype.hasOwnProperty.call(dest, key)) { - dest[key] = srcVal; - } else { - this.mergeIntoResults(dest[key], srcVal); - } - }); - } - } } From de6b1ac062a9795aafb822cc155b8094f9ba460a Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 11:49:56 -0500 Subject: [PATCH 023/230] Simplify resolver info parameter type to just { field: FieldNode }. This type was already quite different from the GraphQLResolveInfo type used by the GraphQL specification, so I think we should limit it to just the necessary information while we still have that freedom: https://graphql.org/learn/execution/#root-fields-resolvers If a resolver needs them, the { isLeaf, resultKey, directives } data previously provided can all be derived from the FieldNode. --- packages/apollo-client/src/core/LocalState.ts | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 58800eb7a72..9356184f58a 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -22,10 +22,8 @@ import { mergeDeepArray, warnOnceInDevelopment, FragmentMap, - DirectiveInfo, argumentsObjectFromField, resultKeyNameFromField, - getDirectiveInfoFromField, getFragmentDefinitions, createFragmentMap, shouldInclude, @@ -42,7 +40,9 @@ export type Resolver = ( rootValue: any, args: any, context: any, - info: ExecInfo, + info: { + field: FieldNode; + }, ) => any; export type VariableMap = { [name: string]: any }; @@ -63,12 +63,6 @@ export type ExecContext = { onlyRunForcedResolvers: boolean; }; -export type ExecInfo = { - isLeaf: boolean; - resultKey: string; - directives: DirectiveInfo; -}; - export type LocalStateOptions = { cache: ApolloCache; client?: ApolloClient; @@ -519,16 +513,9 @@ export class LocalState { const { variables } = execContext; const fieldName = field.name.value; const args = argumentsObjectFromField(field, variables); - const aliasedFieldName = resultKeyNameFromField(field); - const info: ExecInfo = { - isLeaf: !field.selectionSet, - resultKey: aliasedFieldName, - directives: getDirectiveInfoFromField(field, variables), - }; - const aliasUsed = fieldName !== aliasedFieldName; - let result; + let result: any; // Usually all local resolvers are run when passing through here, but // if we've specifically identified that we only want to run forced @@ -544,7 +531,9 @@ export class LocalState { if (resolverMap) { const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; if (resolve) { - result = await resolve(rootValue, args, execContext.context, info); + result = await resolve(rootValue, args, execContext.context, { + field, + }); } } } @@ -555,9 +544,16 @@ export class LocalState { // If an @export directive is associated with the current field, store // the `as` export variable name and current result for later use. - if (info.directives && info.directives.export) { - const exportedVariable = info.directives.export.as; - execContext.exportedVariables[exportedVariable] = result; + if (field.directives) { + field.directives.forEach(directive => { + if (directive.name.value === 'export' && directive.arguments) { + directive.arguments.forEach(arg => { + if (arg.name.value === 'as' && arg.value.kind === 'StringValue') { + execContext.exportedVariables[arg.value.value] = result; + } + }); + } + }); } // Handle all scalar types here. From 2d42a9e3ea6acf7ea918d58ecf81f2607b41903a Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 12:21:37 -0500 Subject: [PATCH 024/230] Simplify LocalState#resolveField. --- packages/apollo-client/src/core/LocalState.ts | 85 ++++++++++--------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 9356184f58a..1bc20ffca77 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -512,10 +512,10 @@ export class LocalState { ): Promise { const { variables } = execContext; const fieldName = field.name.value; - const args = argumentsObjectFromField(field, variables); const aliasedFieldName = resultKeyNameFromField(field); const aliasUsed = fieldName !== aliasedFieldName; - let result: any; + const defaultResult = rootValue[aliasedFieldName] || rootValue[fieldName]; + let resultPromise = Promise.resolve(defaultResult); // Usually all local resolvers are run when passing through here, but // if we've specifically identified that we only want to run forced @@ -523,7 +523,7 @@ export class LocalState { // `@client(always: true)`), then we'll skip running non-forced resolvers. if ( !execContext.onlyRunForcedResolvers || - (execContext.onlyRunForcedResolvers && this.shouldForceResolver(field)) + this.shouldForceResolver(field) ) { const resolverType = rootValue.__typename || execContext.defaultOperationType; @@ -531,51 +531,56 @@ export class LocalState { if (resolverMap) { const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; if (resolve) { - result = await resolve(rootValue, args, execContext.context, { - field, - }); + resultPromise = Promise.resolve(resolve( + rootValue, + argumentsObjectFromField(field, variables), + execContext.context, + { field }, + )); } } } - if (result === undefined) { - result = rootValue[aliasedFieldName] || rootValue[fieldName]; - } - - // If an @export directive is associated with the current field, store - // the `as` export variable name and current result for later use. - if (field.directives) { - field.directives.forEach(directive => { - if (directive.name.value === 'export' && directive.arguments) { - directive.arguments.forEach(arg => { - if (arg.name.value === 'as' && arg.value.kind === 'StringValue') { - execContext.exportedVariables[arg.value.value] = result; - } - }); - } - }); - } + return resultPromise.then((result = defaultResult) => { + // If an @export directive is associated with the current field, store + // the `as` export variable name and current result for later use. + if (field.directives) { + field.directives.forEach(directive => { + if (directive.name.value === 'export' && directive.arguments) { + directive.arguments.forEach(arg => { + if (arg.name.value === 'as' && arg.value.kind === 'StringValue') { + execContext.exportedVariables[arg.value.value] = result; + } + }); + } + }); + } - // Handle all scalar types here. - if (!field.selectionSet) { - return result; - } + // Handle all scalar types here. + if (!field.selectionSet) { + return result; + } - // From here down, the field has a selection set, which means it's trying - // to query a GraphQLObjectType. - if (result == null) { - // Basically any field in a GraphQL response can be null, or missing - return result; - } + // From here down, the field has a selection set, which means it's trying + // to query a GraphQLObjectType. + if (result == null) { + // Basically any field in a GraphQL response can be null, or missing + return result; + } - if (Array.isArray(result)) { - return this.resolveSubSelectedArray(field, result, execContext); - } + if (Array.isArray(result)) { + return this.resolveSubSelectedArray(field, result, execContext); + } - // Returned value is an object, and the query has a sub-selection. Recurse. - if (field.selectionSet) { - return this.resolveSelectionSet(field.selectionSet, result, execContext); - } + // Returned value is an object, and the query has a sub-selection. Recurse. + if (field.selectionSet) { + return this.resolveSelectionSet( + field.selectionSet, + result, + execContext, + ); + } + }); } private resolveSubSelectedArray( From d0607dea702b1fefc6d27ed692d9b75f14f8f178 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Jan 2019 12:30:38 -0500 Subject: [PATCH 025/230] Simplify LocalState#addExportedVariables. --- packages/apollo-client/src/core/LocalState.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 1bc20ffca77..6c9be3baf51 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -291,23 +291,20 @@ export class LocalState { variables: OperationVariables = {}, context = {}, ) { - let exportedVariables: Record = {}; - if (document) { - const rootValue = this.buildRootValueFromCache(document, variables); - const updatedContext = this.prepareContext(context); - const data = await this.resolveDocument( + return this.resolveDocument( document, - rootValue || {}, - updatedContext, + this.buildRootValueFromCache(document, variables) || {}, + this.prepareContext(context), variables, - ); - exportedVariables = data.exportedVariables; + ).then(data => ({ + ...variables, + ...data.exportedVariables, + })); } return { ...variables, - ...exportedVariables, }; } From 04b9cc58357d3f7a86493967998bc34c5c53a53d Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 24 Jan 2019 14:32:14 -0500 Subject: [PATCH 026/230] Ensure mergeDeep lets last-merged values win. --- .../src/util/__tests__/mergeDeep.ts | 33 ++++++++++++++++++- .../apollo-utilities/src/util/mergeDeep.ts | 19 +++++++---- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts index defc5d57ccf..f2bdbecae88 100644 --- a/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts @@ -82,7 +82,38 @@ describe('mergeDeep', function() { expect(mergeDeep(a, b, c, d)).toEqual([ { a: 1, b: 2, c: 3 }, { a: 'ay', b: 'bee', c: 'cee', d: 'dee' }, - 'a', + 'c', ]); }); + + it('lets the last conflicting value win', function() { + expect(mergeDeep('a', 'b', 'c')).toBe('c'); + + expect( + mergeDeep( + { a: 'a', conflict: 1 }, + { b: 'b', conflict: 2 }, + { c: 'c', conflict: 3 }, + ), + ).toEqual({ + a: 'a', + b: 'b', + c: 'c', + conflict: 3, + }); + + expect(mergeDeep( + ['a', ['b', 'c'], 'd'], + [/*empty*/, ['B'], 'D'], + )).toEqual( + ['a', ['B', 'c'], 'D'], + ); + + expect(mergeDeep( + ['a', ['b', 'c'], 'd'], + ['A', [/*empty*/, 'C']], + )).toEqual( + ['A', ['b', 'C'], 'd'], + ); + }); }); diff --git a/packages/apollo-utilities/src/util/mergeDeep.ts b/packages/apollo-utilities/src/util/mergeDeep.ts index b2ebaece081..4dfb4d92c90 100644 --- a/packages/apollo-utilities/src/util/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/mergeDeep.ts @@ -9,16 +9,20 @@ export function mergeDeep(...sources: any[]) { } export function mergeDeepArray(sources: any[]) { - let first = sources[0] || {}; + let target = sources[0] || {}; const count = sources.length; if (count > 1) { const pastCopies: any[] = []; - first = shallowCopyForMerge(first, pastCopies); + target = shallowCopyForMerge(target, pastCopies); for (let i = 1; i < count; ++i) { - mergeHelper(first, sources[i], pastCopies); + target = mergeHelper(target, sources[i], pastCopies); } } - return first; + return target; +} + +function isObject(obj: any): obj is Record { + return obj !== null && typeof obj === 'object'; } function mergeHelper( @@ -26,7 +30,7 @@ function mergeHelper( source: Record, pastCopies: any[], ) { - if (source !== null && typeof source === 'object') { + if (isObject(source) && isObject(target)) { // In case the target has been frozen, make an extensible copy so that // we can merge properties into the copy. if (Object.isExtensible && !Object.isExtensible(target)) { @@ -57,9 +61,12 @@ function mergeHelper( target[sourceKey] = sourceValue; } }); + + return target; } - return target; + // If source (or target) is not an object, let source replace target. + return source; } function shallowCopyForMerge(value: T, pastCopies: any[]): T { From 2141cdaf3c2fa6c7f9251c6c261d3a508112fcff Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 25 Jan 2019 12:44:11 -0500 Subject: [PATCH 027/230] Remove `initializers` support On the surface, the idea of using initializers as a way to dynamically prep the cache seemed like a good idea. It was a more flexible way to initiliaze the cache than the `defaults` approach `apollo-link-state` uses. In practice however, everything `initializers` can do `cache.writeData` can do as well. Yes initializers are a little more user friendly to work with, but `cache.writeData` is already part of the cache API and is much more flexible in terms of being able to be called anywhere the cache is available, and it's explicit in what it's doing. Given this, we've decided to remove initializer support from Apollo Client, keeping the local state changes focused on the idea of running local resolvers. While prepping the cache is still an important peice of functionality, we'll update the local state docs to show how `cache.writeData` can be used to handle everything `initializers` were being used for, including re-initializing the cache after a store reset. Removing initializers also has the added benefit of reducing the Apollo Client bundle size by a good chunk. --- packages/apollo-boost/src/index.ts | 10 - packages/apollo-client/src/ApolloClient.ts | 29 +- .../src/__tests__/local-state/export.ts | 127 ++++-- .../src/__tests__/local-state/general.ts | 403 +----------------- .../src/__tests__/local-state/initializers.ts | 232 ---------- .../src/__tests__/local-state/resolvers.ts | 22 +- packages/apollo-client/src/core/LocalState.ts | 109 +---- .../apollo-client/src/core/QueryManager.ts | 3 - packages/apollo-client/src/core/types.ts | 5 - 9 files changed, 117 insertions(+), 823 deletions(-) delete mode 100644 packages/apollo-client/src/__tests__/local-state/initializers.ts diff --git a/packages/apollo-boost/src/index.ts b/packages/apollo-boost/src/index.ts index 8f711963897..0476eaae437 100644 --- a/packages/apollo-boost/src/index.ts +++ b/packages/apollo-boost/src/index.ts @@ -17,7 +17,6 @@ export { gql, HttpLink }; type ClientStateConfig = { cache?: ApolloCache; resolvers: any | (() => any); - defaults?: any; typeDefs?: string | string[] | DocumentNode | DocumentNode[]; fragmentMatcher?: any; }; @@ -161,17 +160,9 @@ export default class DefaultClient extends ApolloClient { x => !!x, ) as ApolloLink[]); - let initializers: { [field: string]: any }; let resolvers; let typeDefs; if (clientState) { - if (clientState.defaults) { - initializers = {}; - Object.keys(clientState.defaults).forEach((field: string) => { - initializers[field] = () => clientState.defaults[field]; - }); - } - resolvers = clientState.resolvers; typeDefs = clientState.typeDefs; } @@ -182,7 +173,6 @@ export default class DefaultClient extends ApolloClient { link, name, version, - initializers, resolvers, typeDefs, } as any); diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 1cf65d3563d..da7f8a1f33e 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -17,7 +17,6 @@ import { QueryManager } from './core/QueryManager'; import { ApolloQueryResult, OperationVariables, - Initializers, Resolvers, } from './core/types'; import { ObservableQuery } from './core/ObservableQuery'; @@ -54,7 +53,6 @@ export type ApolloClientOptions = { connectToDevTools?: boolean; queryDeduplication?: boolean; defaultOptions?: DefaultOptions; - initializers?: Initializers | Initializers[]; resolvers?: Resolvers | Resolvers[]; typeDefs?: string | string[] | DocumentNode | DocumentNode[]; fragmentMatcher?: FragmentMatcher; @@ -122,7 +120,6 @@ export default class ApolloClient implements DataProxy { connectToDevTools, queryDeduplication = true, defaultOptions, - initializers, resolvers, typeDefs, fragmentMatcher, @@ -132,9 +129,9 @@ export default class ApolloClient implements DataProxy { let { link } = options; - // If a link hasn't been defined, but local state initializers/resolvers - // have been set, setup a default empty link. - if (!link && (initializers || resolvers)) { + // If a link hasn't been defined, but local state resolvers have been set, + // setup a default empty link. + if (!link && resolvers) { link = ApolloLink.empty(); } @@ -243,7 +240,6 @@ export default class ApolloClient implements DataProxy { this.localState = new LocalState({ cache, client: this, - initializers, resolvers, typeDefs, fragmentMatcher, @@ -599,25 +595,6 @@ export default class ApolloClient implements DataProxy { return this.initProxy().restore(serializedState); } - /** - * Run one or many initializer functions to put the cache into a desired - * state. - */ - public runInitializers( - initializers: Initializers | Initializers[], - ) { - return this.localState.runInitializers(initializers); - } - - /** - * Clear out all initializer run tracking. Initializer runs are tracked to - * help prevent the same initializers from running again, which could lead - * to certain cache values being wiped out. - */ - public resetInitializers() { - this.localState.resetInitializers(); - } - /** * Add additional local resolvers. */ diff --git a/packages/apollo-client/src/__tests__/local-state/export.ts b/packages/apollo-client/src/__tests__/local-state/export.ts index 6167aa7f8af..6a3222f1366 100644 --- a/packages/apollo-client/src/__tests__/local-state/export.ts +++ b/packages/apollo-client/src/__tests__/local-state/export.ts @@ -15,12 +15,12 @@ describe('@client @export tests', () => { } `; + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), - initializers: { - field: () => 1, - }, + cache, + link: ApolloLink.empty(), }); + cache.writeData({ data: { field: 1 } }); return client.query({ query }).then(({ data }: any) => { expect({ ...data }).toMatchObject({ field: 1 }); @@ -43,17 +43,22 @@ describe('@client @export tests', () => { } `; + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), - initializers: { - car: () => ({ + cache, + link: ApolloLink.empty(), + }); + + cache.writeData({ + data: { + car: { engine: { cylinders: 8, torque: 7200, __typename: 'Engine', }, __typename: 'Car', - }), + }, }, }); @@ -84,11 +89,9 @@ describe('@client @export tests', () => { const testAuthorId = 100; const testPostCount = 200; + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), - initializers: { - currentAuthorId: () => testAuthorId, - }, + cache, resolvers: { Query: { postCount(_, { authorId }) { @@ -98,6 +101,12 @@ describe('@client @export tests', () => { }, }); + cache.writeData({ + data: { + currentAuthorId: testAuthorId, + }, + }); + return client.query({ query }).then(({ data }: any) => { expect({ ...data }).toMatchObject({ currentAuthorId: testAuthorId, @@ -130,11 +139,9 @@ describe('@client @export tests', () => { const testPostCount = 200; + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), - initializers: { - currentAuthor: () => testAuthor, - }, + cache, resolvers: { Query: { postCount(_, { authorId }) { @@ -144,6 +151,12 @@ describe('@client @export tests', () => { }, }); + cache.writeData({ + data: { + currentAuthor: testAuthor, + } + }); + return client.query({ query }).then(({ data }: any) => { expect({ ...data }).toMatchObject({ currentAuthor: testAuthor, @@ -181,11 +194,15 @@ describe('@client @export tests', () => { }), ); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - currentAuthor: () => testAuthor, + }); + + cache.writeData({ + data: { + currentAuthor: testAuthor, }, }); @@ -238,11 +255,15 @@ describe('@client @export tests', () => { }), ); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - appContainer: () => appContainer, + }); + + cache.writeData({ + data: { + appContainer, }, }); @@ -335,15 +356,17 @@ describe('@client @export tests', () => { }); }); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - postRequiringReview() { - return { - loggedInReviewerId, - __typename: 'Post', - }; + }); + + cache.writeData({ + data: { + postRequiringReview: { + loggedInReviewerId, + __typename: 'Post', }, }, }); @@ -405,19 +428,10 @@ describe('@client @export tests', () => { }); }); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - postRequiringReview() { - return { - currentReviewer: { - __typename: 'CurrentReviewer', - }, - __typename: 'Post', - }; - }, - }, resolvers: { CurrentReviewer: { id: () => currentReviewer.id, @@ -425,6 +439,17 @@ describe('@client @export tests', () => { }, }); + cache.writeData({ + data: { + postRequiringReview: { + currentReviewer: { + __typename: 'CurrentReviewer', + }, + __typename: 'Post', + }, + }, + }); + return client.query({ query }).then(({ data }: any) => { expect({ ...data }).toMatchObject({ postRequiringReview: { @@ -520,11 +545,15 @@ describe('@client @export tests', () => { }); }); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - topPost: () => testPostId, + }); + + cache.writeData({ + data: { + topPost: testPostId, }, }); @@ -567,12 +596,16 @@ describe('@client @export tests', () => { }); }); + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), + cache, link, - initializers: { - primaryReviewerId: () => primaryReviewerId, - secondaryReviewerId: () => secondaryReviewerId, + }); + + cache.writeData({ + data: { + primaryReviewerId, + secondaryReviewerId, }, }); diff --git a/packages/apollo-client/src/__tests__/local-state/general.ts b/packages/apollo-client/src/__tests__/local-state/general.ts index 648970bfe27..89a5d6d5da8 100644 --- a/packages/apollo-client/src/__tests__/local-state/general.ts +++ b/packages/apollo-client/src/__tests__/local-state/general.ts @@ -568,380 +568,6 @@ describe('Sample apps', () => { }); }); -describe('Reset/clear store', () => { - it('should allow initializers to be called after the store is reset', done => { - const mutation = gql` - mutation foo { - foo @client - } - `; - - const query = gql` - { - foo @client - } - `; - - const cache = new InMemoryCache(); - const initializers = { - foo: () => 'bar', - }; - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - initializers, - resolvers: { - Mutation: { - foo(_data, _args, { cache }) { - cache.writeData({ data: { foo: 'woo' } }); - return null; - }, - }, - }, - }); - - client.onResetStore(() => - Promise.resolve(client.runInitializers(initializers)), - ); - - client - .query({ query }) - .then(({ data }) => { - expect({ ...data }).toMatchObject({ foo: 'bar' }); - }) - .catch(done.fail); - - client - .mutate({ mutation }) - .then(() => client.query({ query })) - .then(({ data }) => { - expect({ ...data }).toMatchObject({ foo: 'woo' }); - }) - // Should be default after this reset call - .then(() => client.resetStore()) - .then(() => client.query({ query })) - .then(({ data }) => { - expect({ ...data }).toMatchObject({ foo: 'bar' }); - done(); - }) - .catch(done.fail); - }); - - it( - 'should return initializer data after the store is reset, the ' + - 'initializers are re-run, and Query resolver is specified', - done => { - const counterQuery = gql` - query { - counter @client - } - `; - - const plusMutation = gql` - mutation plus { - plus @client - } - `; - - const cache = new InMemoryCache(); - const initializers = { - counter: () => 10, - }; - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - resolvers: { - Mutation: { - plus: (_, __, { cache }) => { - const { counter } = cache.readQuery({ query: counterQuery }); - const data = { - counter: counter + 1, - }; - cache.writeData({ data }); - return null; - }, - }, - }, - initializers, - }); - - let checkedCount = [10, 11, 12, 10]; - const componentObservable = client.watchQuery({ query: counterQuery }); - componentObservable.subscribe({ - next: ({ data }) => { - try { - expect(data).toMatchObject({ counter: checkedCount.shift() }); - } catch (e) { - done.fail(e); - } - }, - error: done.fail, - complete: done.fail, - }); - - client.onResetStore(() => - Promise.resolve(client.runInitializers(initializers)), - ); - - client - .mutate({ mutation: plusMutation }) - .then(() => { - expect(cache.readQuery({ query: counterQuery })).toMatchObject({ - counter: 11, - }); - expect(client.query({ query: counterQuery })).resolves.toMatchObject({ - data: { counter: 11 }, - }); - }) - .then(() => client.mutate({ mutation: plusMutation })) - .then(() => { - expect(cache.readQuery({ query: counterQuery })).toMatchObject({ - counter: 12, - }); - expect(client.query({ query: counterQuery })).resolves.toMatchObject({ - data: { counter: 12 }, - }); - }) - .then(() => client.resetStore() as Promise) - .then(() => { - expect(client.query({ query: counterQuery })) - .resolves.toMatchObject({ data: { counter: 10 } }) - .then(() => { - expect(checkedCount.length).toBe(0); - done(); - }); - }) - .catch(done.fail); - }, - ); - - it('should return a Query result via resolver after the store has been reset', async () => { - const counterQuery = gql` - query { - counter @client - } - `; - - const plusMutation = gql` - mutation plus { - plus @client - } - `; - - const cache = new InMemoryCache(); - const initializers = { - counter: () => 10, - }; - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - resolvers: { - Query: { - counter: () => 0, - }, - Mutation: { - plus: (_, __, { cache }) => { - const { counter } = cache.readQuery({ query: counterQuery }); - const data = { - counter: counter + 1, - }; - cache.writeData({ data }); - return null; - }, - }, - }, - initializers, - }); - - await client.mutate({ mutation: plusMutation }); - expect(cache.readQuery({ query: counterQuery })).toMatchObject({ - counter: 11, - }); - - await client.mutate({ mutation: plusMutation }); - expect(cache.readQuery({ query: counterQuery })).toMatchObject({ - counter: 12, - }); - await expect(client.query({ query: counterQuery })).resolves.toMatchObject({ - data: { counter: 12 }, - }); - - (client.resetStore() as Promise) - .then(() => { - expect(client.query({ query: counterQuery })) - .resolves.toMatchObject({ data: { counter: 0 } }) - .catch(fail); - }) - .catch(fail); - }); - - it( - 'should return default data from the cache in a Query resolver after ' + - 'the store has been reset, and intializers have been re-run', - async () => { - const counterQuery = gql` - query { - counter @client - } - `; - - const plusMutation = gql` - mutation plus { - plus @client - } - `; - - const cache = new InMemoryCache(); - const initializers = { - counter: () => 10, - }; - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - resolvers: { - Query: { - counter: () => { - return (cache.readQuery({ query: counterQuery }) as any).counter; - }, - }, - Mutation: { - plus: (_, __, { cache }) => { - const { counter } = cache.readQuery({ query: counterQuery }); - const data = { - counter: counter + 1, - }; - cache.writeData({ data }); - return null; - }, - }, - }, - initializers, - }); - - client.onResetStore(() => - Promise.resolve(client.runInitializers(initializers)), - ); - - await client.mutate({ mutation: plusMutation }); - await client.mutate({ mutation: plusMutation }); - expect(cache.readQuery({ query: counterQuery })).toMatchObject({ - counter: 12, - }); - const result = await client.query({ query: counterQuery }); - expect(result).toMatchObject({ - data: { counter: 12 }, - }); - - let called = false; - const componentObservable = client.watchQuery({ query: counterQuery }); - - const unsub = componentObservable.subscribe({ - next: ({ data }) => { - try { - if (called) { - expect(data).toMatchObject({ counter: 10 }); - } - called = true; - } catch (e) { - fail(e); - } - }, - error: fail, - complete: fail, - }); - - const makeTerminatingCheck = ( - body: (...args: any[]) => void, - done: () => any, - ) => { - return (...args: any[]) => { - try { - body(...args); - done(); - } catch (error) { - fail(error); - } - }; - }; - - try { - await client.resetStore(); - } catch (error) { - // Do nothing - } - - expect(client.query({ query: counterQuery })) - .resolves.toMatchObject({ data: { counter: 10 } }) - .then( - makeTerminatingCheck( - () => { - unsub.unsubscribe(); - }, - () => { - expect(called); - }, - ), - ) - .catch(fail); - }, - ); - - it( - 'should not find data in the cache via a Query resolver if the store ' + - 'is reset and initializers are not re-run', - done => { - const counterQuery = gql` - query { - counter @client - } - `; - - const cache = new InMemoryCache(); - const initializers = { - counter: () => 10, - }; - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - resolvers: { - Query: { - counter: () => { - try { - return (cache.readQuery({ query: counterQuery }) as any) - .counter; - } catch (error) { - try { - expect(error.message).toMatch(/field counter/); - } catch (e) { - done.fail(e); - } - unsub.unsubscribe(); - done(); - } - return -1; // to remove warning from in-memory-cache - }, - }, - }, - initializers, - }); - - const componentObservable = client.watchQuery({ query: counterQuery }); - - let nextCallCount = 0; - const unsub = componentObservable.subscribe({ - next: () => ++nextCallCount, - error: done.fail, - complete: done.fail, - }); - - client.resetStore().then(() => { - expect(nextCallCount).toBe(1); - done(); - }); - }, - ); -}); - describe('Combining client and server state/operations', () => { it('should merge remote and local state', done => { const query = gql` @@ -1123,8 +749,11 @@ describe('Combining client and server state/operations', () => { const client = new ApolloClient({ cache, link, - initializers: { - count: () => 0, + }); + + cache.writeData({ + data: { + count: 0, }, }); @@ -1157,12 +786,13 @@ describe('Combining client and server state/operations', () => { const client = new ApolloClient({ cache, link, - initializers: { - user() { - return { - __typename: 'User', - firstName: 'John', - }; + }); + + cache.writeData({ + data: { + user: { + __typename: 'User', + firstName: 'John', }, }, }); @@ -1238,9 +868,6 @@ describe('Combining client and server state/operations', () => { const client = new ApolloClient({ cache, link, - initializers: { - count: () => 0, - }, resolvers: { Mutation: { incrementCount: (_, __, { cache }) => { @@ -1253,6 +880,12 @@ describe('Combining client and server state/operations', () => { }, }); + cache.writeData({ + data: { + count: 0, + }, + }); + client.watchQuery({ query }).subscribe({ next: ({ data }: any) => { if (watchCount === 0) { diff --git a/packages/apollo-client/src/__tests__/local-state/initializers.ts b/packages/apollo-client/src/__tests__/local-state/initializers.ts deleted file mode 100644 index 8b53a90a254..00000000000 --- a/packages/apollo-client/src/__tests__/local-state/initializers.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink } from 'apollo-link'; -import gql from 'graphql-tag'; - -import ApolloClient from '../..'; - -describe('General', () => { - it('should write the result of initiailizer functions to the cache', () => { - const cache = new InMemoryCache(); - new ApolloClient({ - cache, - initializers: { - foo: () => ({ bar: false, __typename: 'Bar' }), - }, - resolvers: { - Query: { - foo: () => ({ bar: true }), - }, - }, - }); - expect(cache.extract()).toEqual({ - '$ROOT_QUERY.foo': { - bar: false, - __typename: 'Bar', - }, - ROOT_QUERY: { - foo: { - generated: true, - id: '$ROOT_QUERY.foo', - type: 'id', - typename: 'Bar', - }, - }, - }); - }); - - it( - 'should not attempt to write the return value of an initializer ' + - 'function if it returns `undefined`', - async done => { - const firstNameQuery = gql` - query FirstName { - firstName @client - } - `; - - const lastNameQuery = gql` - query LastName { - lastName @client - } - `; - - const firstName = 'John'; - const lastName = 'Smith'; - - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - initializers: { - firstName() { - cache.writeQuery({ - query: firstNameQuery, - data: { - firstName, - }, - }); - }, - lastName() { - return lastName; - }, - }, - }); - - const { - data: { firstName: loadedFirstName }, - } = await client.query({ query: firstNameQuery }); - expect(loadedFirstName).toEqual(firstName); - const { - data: { lastName: loadedLastName }, - } = await client.query({ query: lastNameQuery }); - expect(loadedLastName).toEqual(lastName); - return done(); - }, - ); - - it('should be able to write `null` values to the cache from an initializer', async done => { - const firstNameQuery = gql` - query FirstName { - firstName @client - } - `; - - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - initializers: { - firstName() { - return null; - }, - }, - }); - - const { data } = await client.query({ query: firstNameQuery }); - expect(data).not.toBe(null); - expect(data.firstName).toBe(null); - return done(); - }); - - it('should not call the resolver if the data is already in the cache', () => { - const fooResolver = jest.fn(); - const resolvers = { Query: { foo: fooResolver } }; - - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - initializers: { - foo: () => ({ bar: false, __typename: 'Bar' }), - }, - resolvers, - }); - - const query = gql` - { - foo @client { - bar - } - } - `; - - client - .query({ query }) - .then(() => { - expect(fooResolver).not.toHaveBeenCalled(); - }) - .catch(e => console.error(e)); - }); -}); - -describe('#runInitializers', () => { - it('should run initializers asynchronously', async (done) => { - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - }); - - client.runInitializers({ - primaryUserId: () => 100, - }); - expect(cache.extract()).toEqual({}); - - await client.runInitializers({ - secondaryUserId: () => 200, - }); - expect(cache.extract()).toEqual({ - ROOT_QUERY: { - primaryUserId: 100, - secondaryUserId: 200, - }, - }); - - return done(); - }); - - it( - 'should prevent initializers from running more than once, by default', - async (done) => { - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - }); - - await client.runInitializers({ - primaryUserId: () => 100, - }); - expect(cache.extract()).toEqual({ - ROOT_QUERY: { - primaryUserId: 100, - }, - }); - - const spy = - jest.spyOn(global.console, 'warn').mockImplementation(() => {}); - await client.runInitializers({ - primaryUserId: () => 100, - }); - expect(spy).toBeCalled(); - spy.mockRestore(); - return done(); - } - ); - - it( - 'should be able to run initializers a second time after calling ' + - '`ApolloClient.resetInitializers()`', - async (done) => { - const cache = new InMemoryCache(); - const client = new ApolloClient({ - cache, - link: ApolloLink.empty(), - }); - - await client.runInitializers({ - primaryUserId: () => 100, - }); - expect(cache.extract()).toEqual({ - ROOT_QUERY: { - primaryUserId: 100, - }, - }); - - client.resetInitializers(); - - const spy = - jest.spyOn(global.console, 'warn').mockImplementation(() => {}); - await client.runInitializers({ - primaryUserId: () => 200, - }); - expect(spy).not.toBeCalled(); - spy.mockRestore(); - - expect(cache.extract()).toEqual({ - ROOT_QUERY: { - primaryUserId: 200, - }, - }); - return done(); - } - ); -}); diff --git a/packages/apollo-client/src/__tests__/local-state/resolvers.ts b/packages/apollo-client/src/__tests__/local-state/resolvers.ts index fc3d95b5467..ff59170b4d0 100644 --- a/packages/apollo-client/src/__tests__/local-state/resolvers.ts +++ b/packages/apollo-client/src/__tests__/local-state/resolvers.ts @@ -713,11 +713,14 @@ describe('Resolving field aliases', () => { const client = new ApolloClient({ cache, link: ApolloLink.empty(), - initializers: { - foo: () => ({ + }); + + cache.writeData({ + data: { + foo: { bar: 'yo', __typename: 'Foo', - }), + }, }, }); @@ -744,14 +747,19 @@ describe('Force local resolvers', () => { } `; + const cache = new InMemoryCache(); const client = new ApolloClient({ - cache: new InMemoryCache(), - initializers: { - author: () => ({ + cache, + link: ApolloLink.empty(), + }); + + cache.writeData({ + data: { + author: { name: 'John Smith', isLoggedIn: false, __typename: 'Author', - }), + }, }, }); diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 6c9be3baf51..377297c2769 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -20,7 +20,6 @@ import { removeClientSetsFromDocument, mergeDeep, mergeDeepArray, - warnOnceInDevelopment, FragmentMap, argumentsObjectFromField, resultKeyNameFromField, @@ -32,7 +31,7 @@ import { } from 'apollo-utilities'; import ApolloClient from '../ApolloClient'; -import { Initializers, Resolvers, OperationVariables } from './types'; +import { Resolvers, OperationVariables } from './types'; import { capitalizeFirstLetter } from '../util/capitalizeFirstLetter'; export type Resolver = ( @@ -66,7 +65,6 @@ export type ExecContext = { export type LocalStateOptions = { cache: ApolloCache; client?: ApolloClient; - initializers?: Initializers | Initializers[]; resolvers?: Resolvers | Resolvers[]; typeDefs?: string | string[] | DocumentNode | DocumentNode[]; fragmentMatcher?: FragmentMatcher; @@ -78,12 +76,10 @@ export class LocalState { private resolvers: Resolvers | Resolvers[] = {}; private typeDefs: string | string[] | DocumentNode | DocumentNode[]; private fragmentMatcher: FragmentMatcher; - private firedInitializers: string[] = []; constructor({ cache, client, - initializers, resolvers, typeDefs, fragmentMatcher, @@ -94,10 +90,6 @@ export class LocalState { this.client = client; } - if (initializers) { - this.runInitializersSync(initializers); - } - if (resolvers) { this.addResolvers(resolvers); } @@ -111,61 +103,6 @@ export class LocalState { } } - // Run the incoming initializer functions, asynchronously. Initializers that - // have already been run are tracked against the initializer field name, to - // prevent them from being run a second time. - // - // NOTE: Initializers do not currently check to see if data already exists - // in the cache, before writing to the cache. This means existing data - // can be overwritten. We might decide to query into the cache first to - // see if any previous data exists before overwritting it, but TBD. - public runInitializers( - initializers: Initializers | Initializers[], - ) { - if (!initializers) { - throw new Error('Invalid/missing initializers'); - } - - const mergedInitializers = this.mergeInitializers(initializers); - - const initializerPromises: Promise[] = []; - this.processInitializers( - mergedInitializers, - (fieldName: string, initializer: any) => { - initializerPromises.push( - Promise.resolve(initializer()).then(result => { - if (result !== undefined) { - this.cache.writeData({ data: { [fieldName]: result } }); - } - }), - ); - }, - ); - - return Promise.all(initializerPromises); - } - - // Run incoming intializer functions, synchronously. - public runInitializersSync( - initializers: Initializers | Initializers[], - ) { - if (!initializers) { - throw new Error('Invalid/missing initializers'); - } - - const mergedInitializers = this.mergeInitializers(initializers); - - this.processInitializers( - mergedInitializers, - (fieldName: string, initializer: any) => { - const result = initializer(this); - if (result !== undefined) { - this.cache.writeData({ data: { [fieldName]: result } }); - } - }, - ); - } - public addResolvers(resolvers: Resolvers | Resolvers[]) { if (Array.isArray(resolvers)) { resolvers.forEach(resolverGroup => { @@ -308,10 +245,6 @@ export class LocalState { }; } - public resetInitializers() { - this.firedInitializers = []; - } - public shouldForceResolvers(document: ASTNode) { let forceResolvers = false; visit(document, { @@ -338,46 +271,6 @@ export class LocalState { return this.shouldForceResolvers(field); } - private mergeInitializers( - initializers: Initializers | Initializers[], - ) { - let mergedInitializers: Initializers = {}; - if (Array.isArray(initializers)) { - initializers.forEach(initializerGroup => { - mergedInitializers = { ...mergedInitializers, ...initializerGroup }; - }); - } else { - mergedInitializers = initializers; - } - return mergedInitializers; - } - - private processInitializers( - initializers: Initializers, - runFunc: (fieldName: string, initializer: any) => any, - ) { - const alreadyFired: string[] = []; - - Object.keys(initializers).forEach(fieldName => { - if (this.firedInitializers.indexOf(fieldName) < 0) { - runFunc(fieldName, initializers[fieldName]); - this.firedInitializers.push(fieldName); - } else { - alreadyFired.push(fieldName); - } - }); - - if (alreadyFired.length > 0) { - warnOnceInDevelopment( - "You're attempting to re-fire initializers for fields that have " + - 'already been initalized once. These repeat initializer calls have ' + - 'been ignored. If you really want them to run again, ' + - 'call `ApolloClient.resetInitializers()` first. ' + - `Fields: ${alreadyFired.join(', ')}`, - ); - } - } - // Query the cache and return matching data. private buildRootValueFromCache( document: DocumentNode, diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index d1e361ed6d2..9199a535248 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -922,9 +922,6 @@ export class QueryManager { // begin removing data from the store const reset = this.dataStore.reset(); - // Reset initializer tracking. - this.localState.resetInitializers(); - return reset; } diff --git a/packages/apollo-client/src/core/types.ts b/packages/apollo-client/src/core/types.ts index 2c44f12ee43..3e4e75a849f 100644 --- a/packages/apollo-client/src/core/types.ts +++ b/packages/apollo-client/src/core/types.ts @@ -1,7 +1,6 @@ import { FetchResult } from 'apollo-link'; import { DocumentNode, GraphQLError } from 'graphql'; -import ApolloClient from '../ApolloClient'; import { QueryStoreValue } from '../data/queries'; import { NetworkStatus } from './networkStatus'; @@ -47,10 +46,6 @@ export type MutationQueryReducersMap = { [queryName: string]: MutationQueryReducer; }; -export interface Initializers { - [field: string]: (client: ApolloClient) => any; -} - export interface Resolvers { [key: string]: { [field: string]: ( From c84d4285f4ea61f8aa0fa3acc141479862ebf870 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 25 Jan 2019 17:37:27 -0500 Subject: [PATCH 028/230] Allow mergeDeep to infer its own result type in most cases. --- .../src/util/__tests__/mergeDeep.ts | 22 +++++++++- .../apollo-utilities/src/util/mergeDeep.ts | 42 ++++++++++++++++--- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts index f2bdbecae88..13778069032 100644 --- a/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/__tests__/mergeDeep.ts @@ -1,4 +1,4 @@ -import { mergeDeep } from '../mergeDeep'; +import { mergeDeep, mergeDeepArray } from '../mergeDeep'; describe('mergeDeep', function() { it('should return an object if first argument falsy', function() { @@ -116,4 +116,24 @@ describe('mergeDeep', function() { ['A', ['b', 'C'], 'd'], ); }); + + it('mergeDeep returns the intersection of its argument types', function() { + const abc = mergeDeep({ str: "hi", a: 1 }, { a: 3, b: 2 }, { b: 1, c: 2 }); + // The point of this test is that the following lines type-check without + // resorting to any `any` loopholes: + expect(abc.str.slice(0)).toBe("hi"); + expect(abc.a * 2).toBe(6); + expect(abc.b - 0).toBe(1); + expect(abc.c / 2).toBe(1); + }); + + it('mergeDeepArray returns the supertype of its argument types', function() { + class F { + check() { return "ok" }; + } + const fs: F[] = [new F, new F, new F]; + // Although mergeDeepArray doesn't have the same tuple type awareness as + // mergeDeep, it does infer that F should be the return type here: + expect(mergeDeepArray(fs).check()).toBe("ok"); + }); }); diff --git a/packages/apollo-utilities/src/util/mergeDeep.ts b/packages/apollo-utilities/src/util/mergeDeep.ts index 4dfb4d92c90..237e9d1ee40 100644 --- a/packages/apollo-utilities/src/util/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/mergeDeep.ts @@ -4,12 +4,39 @@ const { hasOwnProperty } = Object.prototype; // together, sharing as much memory as possible with the source objects, while // remaining careful to avoid modifying any source objects. -export function mergeDeep(...sources: any[]) { +// Logically, the return type of mergeDeep should be the intersection of +// all the argument types. The binary call signature is by far the most +// common, but we support 0- through 5-ary as well. After that, the +// resulting type is just the inferred array element type. Note to nerds: +// there is a more clever way of doing this that converts the tuple type +// first to a union type (easy enough: T[number]) and then converts the +// union to an intersection type using distributive conditional type +// inference, but that approach has several fatal flaws (boolean becomes +// true & false, and the inferred type ends up as unknown in many cases), +// in addition to being nearly impossible to explain/understand. +export type TupleToIntersection = + T extends [] ? {} : + T extends [infer A] ? A : + T extends [infer A, infer B] ? A & B : + T extends [infer A, infer B, infer C] ? A & B & C : + T extends [infer A, infer B, infer C, infer D] ? A & B & C & D : + T extends [infer A, infer B, infer C, infer D, infer E] ? A & B & C & D & E : + T extends (infer U)[] ? U : any; + +export function mergeDeep( + ...sources: T +): TupleToIntersection { return mergeDeepArray(sources); } -export function mergeDeepArray(sources: any[]) { - let target = sources[0] || {}; +// In almost any situation where you could succeed in getting the +// TypeScript compiler to infer a tuple type for the sources array, you +// could just use mergeDeep instead of mergeDeepArray, so instead of +// trying to convert T[] to an intersection type we just infer the array +// element type, which works perfectly when the sources array has a +// consistent element type. +export function mergeDeepArray(sources: T[]): T { + let target = sources[0] || {} as T; const count = sources.length; if (count > 1) { const pastCopies: any[] = []; @@ -26,8 +53,8 @@ function isObject(obj: any): obj is Record { } function mergeHelper( - target: Record, - source: Record, + target: any, + source: any, pastCopies: any[], ) { if (isObject(source) && isObject(target)) { @@ -78,7 +105,10 @@ function shallowCopyForMerge(value: T, pastCopies: any[]): T { if (Array.isArray(value)) { value = (value as any).slice(0); } else { - value = { ...(value as any) }; + value = { + __proto__: Object.getPrototypeOf(value), + ...value, + }; } pastCopies.push(value); } From 3c3ed30b1b52fa912dc28c3a3a27f4e29a094873 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 25 Jan 2019 18:31:22 -0500 Subject: [PATCH 029/230] Standardize runResolvers remoteResult type and return type. The LocalState#runResolvers method now requires a remoteResult option of type ExecutionResult and returns a Promise>, and this contract is enforced (somewhat better) using generic types. --- packages/apollo-client/src/core/LocalState.ts | 44 ++++++++++++------- .../apollo-client/src/core/QueryManager.ts | 27 +++++++----- 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 377297c2769..e1aabf28c67 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -126,7 +126,7 @@ export class LocalState { // Locally resolved field values are merged with the incoming remote data, // and returned. Note that locally resolved fields will overwrite // remote data using the same field name. - public async runResolvers({ + public async runResolvers({ document, remoteResult, context, @@ -134,31 +134,41 @@ export class LocalState { onlyRunForcedResolvers = false, }: { document: DocumentNode | null; - remoteResult?: ExecutionResult; + remoteResult: ExecutionResult; context?: Record; variables?: Record; onlyRunForcedResolvers?: boolean; - }): Promise { + }): Promise> { if (document) { - let rootValue = this.buildRootValueFromCache(document, variables); - rootValue = rootValue ? mergeDeep(rootValue, remoteResult) : remoteResult; + const toMerge: TData[] = []; + + const rootValueFromCache = this.buildRootValueFromCache( + document, + variables, + ); + + if (rootValueFromCache) { + toMerge.push(rootValueFromCache as TData); + } + + if (remoteResult.data) { + toMerge.push(remoteResult.data); + } return this.resolveDocument( document, - rootValue, + mergeDeepArray(toMerge), context, variables, this.fragmentMatcher, onlyRunForcedResolvers, - ).then(data => ({ + ).then(localResult => ({ ...remoteResult, - ...data.result, + data: localResult.result, })); } - return { - ...remoteResult, - }; + return remoteResult; } public setTypeDefs( @@ -294,9 +304,9 @@ export class LocalState { .join('\n'); } - private async resolveDocument( + private async resolveDocument( document: DocumentNode, - rootValue?: any, + rootValue: TData, context: any = {}, variables: VariableMap = {}, fragmentMatcher: FragmentMatcher = () => true, @@ -338,13 +348,13 @@ export class LocalState { })); } - private async resolveSelectionSet( + private async resolveSelectionSet( selectionSet: SelectionSetNode, - rootValue: any, + rootValue: TData, execContext: ExecContext, ) { const { fragmentMap, context, variables } = execContext; - const resultsToMerge: any[] = []; + const resultsToMerge: TData[] = [rootValue]; const execute = async (selection: SelectionNode): Promise => { if (!shouldInclude(selection, variables)) { @@ -358,7 +368,7 @@ export class LocalState { if (typeof fieldResult !== 'undefined') { resultsToMerge.push({ [resultKeyNameFromField(selection)]: fieldResult, - }); + } as TData); } }, ); diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 9199a535248..3c3f78e541f 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -312,17 +312,17 @@ export class QueryManager { // Run the query through local client resolvers. if (clientQuery && hasDirectives(['client'], clientQuery)) { - updatedResult.data = await self.localState + updatedResult = await self.localState .runResolvers({ document: clientQuery, - remoteResult: result.data, + remoteResult: result, context, variables, }) .catch(error => { handlingNext = false; reject(error); - return updatedResult.data; + return result; }); } @@ -697,16 +697,19 @@ export class QueryManager { // fields marked with `@client(always: true)` are overwritten. if (forceResolvers) { const { query, variables, context } = options; + const updatedResult = await this.localState.runResolvers({ document: query, - remoteResult: resultFromStore.data, + remoteResult: resultFromStore, context, variables, onlyRunForcedResolvers: forceResolvers, }); - if (updatedResult) { - resultFromStore.data = updatedResult as T; - } + + resultFromStore = { + ...resultFromStore, + ...updatedResult, + }; } observer.next(resultFromStore); @@ -1001,9 +1004,9 @@ export class QueryManager { // Run the query through local client resolvers. if (clientQuery && hasDirectives(['client'], clientQuery)) { - updatedResult.data = await this.localState.runResolvers({ + updatedResult = await this.localState.runResolvers({ document: clientQuery, - remoteResult: result.data, + remoteResult: result, context: {}, variables: updatedVariables, }); @@ -1267,17 +1270,17 @@ export class QueryManager { if (requestId >= (lastRequestId || 1)) { // Run the query through local client resolvers. if (clientQuery && hasDirectives(['client'], clientQuery)) { - updatedResult.data = await this.localState + updatedResult = await this.localState .runResolvers({ document: clientQuery, - remoteResult: result.data, + remoteResult: result, context: updatedContext, variables, }) .catch(error => { handlingNext = false; reject(error); - return updatedResult.data; + return result; }); } From eabd527991ba3fc7ee6aa5ca2a8b08b0ada4c5b4 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sun, 27 Jan 2019 09:28:05 -0500 Subject: [PATCH 030/230] Revised local state docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit covers Apollo Client local state management docs changes, for the new integrated local state functionality. It’s essentially a remix of the existing local state docs and `apollo-link-state` docs merged with new feature content. --- docs/source/assets/client-schema.png | Bin 199265 -> 1016851 bytes docs/source/essentials/local-state.md | 1013 ++++++++++++++++++++++--- 2 files changed, 892 insertions(+), 121 deletions(-) diff --git a/docs/source/assets/client-schema.png b/docs/source/assets/client-schema.png index ac96b600c59b8c2cb1a1d37ac1bcff8604b675b0..5acc744fb53caa5df160ce74b9a8b8b5fe707996 100644 GIT binary patch literal 1016851 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%0D`C13zJk5yx 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Ïj?hmB3%oMuFIj{@U%=vD#$NFL{K##GsT<(p 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

p9ymYVB0kW$~CBu(BA7mUV>?0DOg#F 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 G7yln*Et7%( literal 199265 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 diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 3d7295dfad9..01d64019629 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -1,58 +1,134 @@ --- title: Local state management -description: Learn how to store your local data in Apollo Client +description: Learn how to work with your local data in Apollo Client --- We've learned how to manage remote data from our GraphQL server with Apollo Client, but what should we do with our local data? We want to be able to access boolean flags and device API results from multiple components in our app, but don't want to maintain a separate Redux or MobX store. Ideally, we would like the Apollo cache to be the single source of truth for all data in our client application. -That's where `apollo-link-state`, our solution for managing local data in Apollo Client, comes in. `apollo-link-state` allows you to store your local data inside the Apollo cache alongside your remote data. To access your local data, just query it with GraphQL. You can even request local and server data within the same query! +Apollo Client (>= 2.5) has built-in local state handling capabilities, that allow you to store your local data inside the Apollo cache alongside your remote data. To access your local data, just query it with GraphQL. You can even request local and server data within the same query! -In this section, you'll learn how to simplify local state management in your app with `apollo-link-state`. We'll build client-side resolvers to help us execute local queries and mutations. You'll also learn how to query and update the cache with the `@client` directive. Let's jump right in! +In this section, you'll learn how Apollo Client can help simplify local state management in your app. We'll cover how client-side resolvers can help us execute local queries and mutations. You'll also learn how to query and update the cache with the `@client` directive. -

Setting up

+Please note that this documentation is intended to be used to familiarize yourself with Apollo Client's local state management capabilities, and serve as a reference guide. If you're looking for a step by step tutorial outlining how to handle local state with Apollo Client (and leverage other Apollo components to build a fullstack application), please refer to the [Apollo tutorial](https://www.apollographql.com/docs/tutorial/introduction.html). -`apollo-link-state` is already included in Apollo Boost, so you don't have to install it. It's configurable on the `clientState` property on the Apollo Boost constructor: +> ⚠️ If you're interested in integrating local state handling capabilities with Apollo Client < 2.5, please refer to our (now deprecated) [`apollo-link-state`](https://github.com/apollographql/apollo-link-state) project. As of Apollo Client 2.5, local state handling is baked into the core, which means it is no longer necessary to use `apollo-link-state`. For help migrating from `apollo-link-state` to Apollo Client 2.5, please refer to the [Migrating from `apollo-link-state`](#migrating) section. + +

API

+ +Apollo Client local state handling is baked in, so you don't have to install anything extra. Local state management can be configured during `ApolloClient` instantiation (via the `ApolloClient` constructor) or by using the `ApolloClient` local state API. Data in the cache can be managed through the `ApolloCache` API. + +

ApolloClient

+ +

Constructor

```js -import ApolloClient from "apollo-boost"; -import { defaults, resolvers } from "./resolvers"; +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; const client = new ApolloClient({ - uri: `https://nx9zvp49q7.lp.gql.zone/graphql`, - clientState: { - defaults, - resolvers, - typeDefs - } + cache: new InMemoryCache(), + resolvers: { ... }, + typeDefs: { ... }, }); ``` -The three options you can pass to `clientState` are: +
+
`resolvers?`: Resolvers | Resolvers[]
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache.
+
`typeDefs?`: string | string[] | DocumentNode | DocumentNode[];
+
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
+
+ +None of these options are required. If you don't specify anything, you will still be able to use the `@client` directive to query the Apollo Client cache. + +

Methods

+ +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink } from 'apollo-link'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), +}); + +client.setResolvers({ ... }); +```
-
[`defaults`](#defaults.html): Object
-
The initial data you want to write to the Apollo cache when the client is initialized
-
[`resolvers`](#resolvers.html): Object
-
A map of functions that your GraphQL queries and mutations call in order to read and write to the cache
-
[`typeDefs`](#schema.html): string | Array
-
A string representing your client-side schema written in [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). This schema is not used for validation (yet!), but is used for introspection in Apollo DevTools
+
`addResolvers(resolvers: Resolvers | Resolvers[])`
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `addResolvers` are added to the internal resolver function map, meaning any existing resolvers (that aren't overwritten) are preserved.
+
`setResolvers(resolvers: Resolvers | Resolvers[])`:
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `setResolvers` overwrite all existing resolvers (a pre-existing resolver map is wiped out, before the new resolvers are added).
+
`getResolvers`
+
Get the currently defined resolver map.
+
`setTypeDefs(typeDefs: string | string[] | DocumentNode | DocumentNode[])`
+
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language), or as a GraphQL AST. This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
+
`getTypeDefs`
+
Returns a string (SDL) or GraphQL AST representation of your client-side schema (if previously set via the `ApolloClient` constructor or `setTypeDefs`).
+
`setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher)`
+
Set a custom `FragmentMatcher` to be used when resolving local state queries involving [fragments on unions or interfaces](/docs/react/advanced/fragments.html#fragment-matcher).
-None of these options are required. If you don't specify anything, you will still be able to use the `@client` directive to query the cache. +**Typescript interfaces/types:** + +```ts +interface Resolvers { + [key: string]: { + [field: string]: ( + rootValue?: any, + args?: any, + context?: any, + info?: any, + ) => any; + }; +} + +type FragmentMatcher = ( + rootValue: any, + typeCondition: string, + context: any, +) => boolean; +``` -If you'd like a deep dive into the `clientState` config properties, we recommend checking out the [`apollo-link-state` docs](/docs/link/links/state.html). Otherwise, get ready to learn about these properties gradually as we build `Query` and `Mutation` components for local data. +

ApolloCache

-> If you'd like to follow along, please open our [example app](https://codesandbox.io/s/github/apollographql/apollo-link-state/tree/master/examples/todo) on CodeSandbox. Since this example lives in the `apollo-link-state` repository, it does not use Apollo Boost for setup. +

Methods

-

Updating local data

+```js +import { InMemoryCache } from 'apollo-cache-inmemory'; -There are two ways to perform mutations in `apollo-link-state`. The first way is directly writing to the cache by calling `cache.writeData` within an `ApolloConsumer` or `Query` component. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is creating a `Mutation` component with a GraphQL mutation that calls a client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean. You can think of direct writes like calling `setState`, whereas resolvers offer a bit more structure like Redux. Let's learn about both ways below! +cache.writeData({ + data: { + isLoggedIn: !!localStorage.getItem('token'), + cartItems: [], + }, +}); +``` + +
+
`writeData({ id, data })`
+
Write data directly to the cache without having to pass in a query. Great for prepping the cache with initial data.
+
`writeQuery({ query, variables, data })`
+
Similar to `writeData` (writes data to the cache) but uses the specified query to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the query.
+
`readQuery({ query, variables })`
+
Read data from the cache for the specified query.
+
`writeFragment({ id, fragment, fragmentName, variables, data })`
+
Similar to `writeData` (writes data to the cache) but uses the specified fragment to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the fragment.
+
`readFragment({ id, fragment, fragmentName, variables })`
+
Read data from the cache for the specified fragment.
+
+ +

Updating local state

+ +There are two main ways to perform local state mutations. The first way is to directly write to the cache by calling `cache.writeData` within an `ApolloConsumer` or through a `Query` component. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is by creating a `Mutation` component with a GraphQL mutation that calls a local client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean. You can think of direct writes like calling React's `setState`, whereas local resolvers offer a bit more structure like Redux.

Direct writes

-Direct writes to the cache do not require a GraphQL mutation or a resolver function. They access your Apollo Client instance directly by accessing the `client` property within the render prop function of the `ApolloConsumer` or `Query` components. We recommend using this strategy for simple writes, such as writing a string, or one-off writes. It's important to note that direct writes are not implemented as GraphQL mutations under the hood, so you shouldn't include them in your schema. They also do not validate that the data you're writing to the cache is in the shape of valid GraphQL data. If either of these features are important to you, you should opt for a resolver instead. +Direct writes to the cache do not require a GraphQL mutation or a resolver function. They leverage your Apollo Client instance directly by accessing the `client` property within the render prop function of the `ApolloConsumer` or `Query` components. We recommend using this strategy for simple writes, such as writing a string, or one-off writes. It's important to note that direct writes are not implemented as GraphQL mutations under the hood, so you shouldn't include them in your schema. They also do not validate that the data you're writing to the cache is in the shape of valid GraphQL data. If either of these features are important to you, you should opt to use a local resolver instead. -Here's what a direct write looks like in our todo app with the `ApolloConsumer` component: +Here's a direct write example using the `ApolloConsumer` component: ```jsx import React from 'react'; @@ -73,9 +149,9 @@ const FilterLink = ({ filter, children }) => ( ); ``` -The `ApolloConsumer` render prop function is called with a single value, the Apollo Client instance. You can think of the `ApolloConsumer` component as similar to the `Consumer` component from the [new React context API](https://github.com/reactjs/rfcs/blob/master/text/0002-new-version-of-context.md). From the client instance, you can directly call `client.writeData` and pass in the data you'd like to write to the cache. +The `ApolloConsumer` render prop function is called with a single value, the Apollo Client instance. You can think of the `ApolloConsumer` component as being similar to the `Consumer` component from the [React context API](https://reactjs.org/docs/context.html). From the client instance, you can directly call `client.writeData` and pass in the data you'd like to write to the cache. -What if we want to immediately subscribe to the data we just wrote to the cache? Let's create an `active` property on the link that marks the link's filter as active if it's the same as the current `visibilityFilter` in the cache. To immediately subscribe to a client-side mutation, wrap it in a `Query` component instead of an `ApolloConsumer` component. The `Query` component also has the client instance exposed on its render prop function. +What if we want to immediately subscribe to the data we just wrote to the cache? Let's create an `active` property on the link that marks the link's filter as active if it's the same as the current `visibilityFilter` in the cache. To immediately subscribe to a client-side mutation, wrap it in a `Query` component instead of an `ApolloConsumer` component. The `Query` component also has the client instance exposed to its render prop function. ```jsx import React from 'react'; @@ -90,7 +166,7 @@ const GET_VISIBILITY_FILTER = gql` } `; -// Remember to set an initial value for visibilityFilter with defaults +// Remember to set an initial value for visibilityFilter using an initializer. const FilterLink = ({ filter, children }) => ( {({ data, client }) => ( @@ -105,42 +181,48 @@ const FilterLink = ({ filter, children }) => ( ); ``` -You'll notice in our query that we have an `@client` directive next to our `visibilityFilter` field. This tells Apollo Client's network stack to fetch the query from the cache instead of sending it to our GraphQL server. Once you call `client.writeData`, the query result on the render prop function will automatically update. All cache writes and reads are synchronous, so you don't have to worry about loading state. +You'll notice in our query that we have a `@client` directive next to our `visibilityFilter` field. This tells Apollo Client to fetch the field data locally (either from the cache or using a local resolver), instead of sending it to our GraphQL server. Once you call `client.writeData`, the query result on the render prop function will automatically update. All cache writes and reads are synchronous, so you don't have to worry about loading state. -

Resolvers

+

Local Resolvers

-If you'd like to implement your local state update as a GraphQL mutation, then you'll need to specify a function in your resolver map. The resolver map is an object with resolver functions for each GraphQL object type. You can think of a GraphQL query or mutation as a tree of function calls for each field. These function calls resolve to data or another function call. +If you'd like to implement your local state update as a GraphQL mutation, then you'll need to specify a function in your local resolver map. The resolver map is an object with resolver functions for each GraphQL object type. To visualize how this all lines up, it's useful to think of a GraphQL query or mutation as a tree of function calls for each field. These function calls resolve to data or another function call. So when a GraphQL query is run through Apollo Client, it looks for a way to essentially run functions for each field in the query. When it finds an `@client` directive on a field, it turns to its internal resolver map looking for a function it can run for that field. -The signature of a resolver function is the exact same as resolver functions on the server built with [`graphql-tools`](/docs/graphql-tools/resolvers.html#Resolver-function-signature). Let's quickly recap the four parameters of a resolver function: +To help make local resolvers more flexible, the signature of a resolver function is the exact same as resolver functions on the server built with [`graphql-tools`](/docs/graphql-tools/resolvers.html#Resolver-function-signature). Let's recap the four parameters of a resolver function: ```js fieldName: (obj, args, context, info) => result; ``` -1. `obj`: The object containing the result returned from the resolver on the parent field or the `ROOT_QUERY` object in the case of a top-level query or mutation. Don't worry about this one too much for `apollo-link-state`. +1. `obj`: The object containing the result returned from the resolver on the parent field or the `ROOT_QUERY` object in the case of a top-level query or mutation. 2. `args`: An object containing all of the arguments passed into the field. For example, if you called a mutation with `updateNetworkStatus(isConnected: true)`, the `args` object would be `{ isConnected: true }`. -3. `context`: The context object, which is shared between your React components and your Apollo Client network stack. The most important thing to note here is that we've added the Apollo cache to the context for you, so you can manipulate the cache with `readQuery`, `writeQuery`, `readFragment`, `writeFragment`, and `writeData`. Learn more about those methods [here](../advanced/caching.html#direct). +3. `context`: The context object, which is shared between your React components and your Apollo Client network stack. The most important thing to note here is that we've added the Apollo cache to the context for you, so you can manipulate the cache with `readQuery`, `writeQuery`, `readFragment`, `writeFragment`, and `writeData`. You can learn more about these methods in [Managing the cache](#managing-the-cache). We've also added the current Apollo Client instance to the `context` under a `client` property, in-case you're interested in calling into other parts of the Apollo Client API from a resolver. 4. `info`: Information about the execution state of the query. You will probably never have to use this one. Let's take a look at an example of a resolver where we toggle a todo's completed status: ```js -export const resolvers = { - Mutation: { - toggleTodo: (_, variables, { cache, getCacheKey }) => { - const id = getCacheKey({ __typename: 'TodoItem', id: variables.id }) - const fragment = gql` - fragment completeTodo on TodoItem { - completed - } - `; - const todo = cache.readFragment({ fragment, id }); - const data = { ...todo, completed: !todo.completed }; - cache.writeData({ id, data }); - return null; +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const client = new ApolloClient({ + cache: new InMemeoryCache(), + resolvers: { + Mutation: { + toggleTodo: (_root, variables, { cache, getCacheKey }) => { + const id = getCacheKey({ __typename: 'TodoItem', id: variables.id }) + const fragment = gql` + fragment completeTodo on TodoItem { + completed + } + `; + const todo = cache.readFragment({ fragment, id }); + const data = { ...todo, completed: !todo.completed }; + cache.writeData({ id, data }); + return null; + }, }, }, -}; +}); ``` In order to toggle the todo's completed status, we first need to query the cache to find out what the todo's current completed status is. We do this by reading a fragment from the cache with `cache.readFragment`. This function takes a fragment and an id, which corresponds to the todo item's cache key. We get the cache key by calling the `getCacheKey` that's on the context and passing in the item's `__typename` and `id`. @@ -176,13 +258,11 @@ const Todo = ({ id, completed, text }) => ( ); ``` -First, we create a GraphQL mutation that takes the todo's id we want to toggle as its only argument. We indicate that this is a local mutation by marking the field with a `@client` directive. This will tell `apollo-link-state` to call our `toggleTodo` mutation resolver in order to resolve the field. Then, we create a `Mutation` component just as we would for a remote mutation. Finally, pass in your GraphQL mutation to your component and trigger it from within the UI in your render prop function. - -If you'd like to see an example of a local mutation adding a todo to a list, check out the `TodoForm` component in the [CodeSandbox](https://codesandbox.io/s/github/apollographql/apollo-link-state/tree/master/examples/todo). +First, we create a GraphQL mutation that takes the todo's id we want to toggle as its only argument. We indicate that this is a local mutation by marking the field with a `@client` directive. This will tell Apollo Client to call our local `toggleTodo` mutation resolver in order to resolve the field. Then, we create a `Mutation` component just as we would for a remote mutation. Finally, pass in your GraphQL mutation to your component and trigger it from within the UI in your render prop function. -

Querying local data

+

Querying local state

-Querying the Apollo cache is similar to querying your GraphQL server. The only difference is that you add a `@client` directive on your local fields to indicate they should be resolved from the cache. Let's look at an example: +Querying for local data is very similar to querying your GraphQL server. The only difference is that you add a `@client` directive on your local fields to indicate they should be resolved from the Apollo Client cache or a local resolver function. Let's look at an example: ```jsx import React from 'react'; @@ -215,118 +295,809 @@ const TodoList = () => ( ); ``` -First, we create our GraphQL query and add `@client` directives to `todos` and `visibilityFilter`. Then, we pass the query to our `Query` component. Reading from the Apollo cache is synchronous, so you won't have to worry about tracking loading state. +Here we create our GraphQL query and add `@client` directives to `todos` and `visibilityFilter`. We then pass the query to our `Query` component. The `@client` directives here let the `Query` component know that `todos` and `visibilityFilter` should be pulled from the Apollo Client cache or resolved using pre-defined local resolvers. The following sections help explain how both options work in more detail. -Since the query runs as soon as the component is mounted, what do we do if there are no todos in the cache? We need to write an initial state to the cache before the query is run to prevent it from erroring out. That's where defaults come in! +> ⚠️ Since the above query runs as soon as the component is mounted, what do we do if there are no todos in the cache or there aren't any local resolvers defined to help calculate `todos`? We need to write an initial state to the cache before the query is run to prevent it from erroring out. Refer to the [Initializing the cache](#cache-initialization) section above for more information. -

Defaults

+

Initializing the cache

-Your `defaults` object represents the initial state that you would like to write to the cache. It's important to provide defaults for your client-side queries, otherwise they could potentially error out if a mutation hasn't occurred before they run. The shape of your initial state should match how you plan to query it in your application. +Often, you'll need to write an initial state to the cache so any components querying data before a mutation is triggered don't error out. To accomplish this, you can use `cache.writeData` to prep the cache with initial values. The shape of your initial state should match how you plan to query it in your application. ```js -const defaults = { - todos: [], - visibilityFilter: 'SHOW_ALL', -}; -``` +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; -Your defaults are written to the cache upon initialization of `apollo-link-state` before any operations have occurred. We also write them to the cache again if you reset the Apollo cache. +const cache = new InMemoryCache(); +const client = new ApolloClient({ + cache, + resolvers: { /* ... */ }, +}); -

Client-side schema

+cache.writeData({ + data: { + todos: [], + visibilityFilter: 'SHOW_ALL', + networkStatus: { + __typename: 'NetworkStatus', + isConnected: false, + }, + }, +}); +``` -You can optionally pass a client-side schema to the `typeDefs` config property. This schema is not used for validation like it is on the server because the `graphql-js` modules for schema validation would dramatically increase your bundle size. Instead, your client-side schema is used for introspection in Apollo DevTools, where you can explore your schema in GraphiQL. +Sometimes you may need to [reset the store](/docs/react/features/cache-updates.html#reset-store) in your application, when a user logs out for example. If you call `client.resetStore` anywhere in your application, you will likely want to initialize your cache again. You can do this using the `client.onResetStore` method to register a callback that will call `cache.writeData` again. -Your schema should be written in [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). Let's view our schema for our todo app: +

Local data query flow

+ +When a query containing `@client` directives is executed, Apollo Client runs through a few sequential steps to try to find a result for the `@client` field. Let's use the following query to walk through the local data look up flow: ```js -const typeDefs = ` - type Todo { - id: Int! - text: String! - completed: Boolean! +const GET_LAUNCH_DETAILS = gql` + query LaunchDetails($launchId: ID!) { + launch(id: $launchId) { + isInCart @client + site + rocket { + type + } + } } +`; +``` + +This query includes a mixture of both remote and local fields. `isInCart` is the only field marked with an `@client` directive, so it's the field we'll focus on. When Apollo Client executes this query and tries to find a result for the `isInCart` field, it runs through the following steps: + +1. Has a resolver function been set (either through the `ApolloClient` constructor `resolvers` parameter or Apollo Client's `setResolvers` / `addResolvers` methods) that is associated with the field name `isInCart`? If yes, run and return the result from the resolver function. + +2. If a matching resolver function can't be found, check the Apollo Client cache to see if a `isInCart` value can be found directly. If so, return that value. + +Let's look at both of these steps more closely. + +- Resolving `@client` data with the help of local resolvers (step 1 above) is explained in [Handling `@client` fields with resolvers](#client-fields-resolvers). +- Loading `@client` data from the cache (step 2 above) is explained in [Handling `@client` fields with the cache](#client-fields-cache). - type Mutation { - addTodo(text: String!): Todo - toggleTodo(id: Int!): Todo +

Handling `@client` fields with resolvers

+ +Local resolvers are very similar to remote resolvers. Instead of sending your GraphQL query to a remote GraphQL endpoint, which then runs resolver functions against your query to populate and return a result set, Apollo Client runs locally defined resolver functions against any fields marked with the `@client` directive. Let's look at an example: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const GET_CART_ITEMS = gql` + query GetCartItems { + cartItems @client } +`; + +const cache = new InMemoryCache(), +const client = new ApolloClient({ + cache, + link: new HttpLink({ + uri: 'http://localhost:4000/graphql', + }), + resolvers: { + Launch: { + isInCart: (launch, _args, { cache }) => { + const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); + return cartItems.includes(launch.id); + }, + }, + }, +}); - type Query { - visibilityFilter: String - todos: [Todo] +cache.writeData({ + data: { + cartItems: [], + }, +}); + +const GET_LAUNCH_DETAILS = gql` + query LaunchDetails($launchId: ID!) { + launch(id: $launchId) { + isInCart @client + site + rocket { + type + } + } } `; + +// ... run the query using client.query, a component, etc. ``` -If you open up Apollo DevTools and click on the `GraphiQL` tab, you'll be able to explore your client schema in the "Docs" section. This app doesn't have a remote schema, but if it did, you would be able to see your local queries and mutations alongside your remote ones. That's the cool part about `apollo-link-state` - it enables you to use GraphQL as a single, unified interface for all of your app's data. +Here when the `GET_LAUNCH_DETAILS` query is executed, Apollo Client looks for a local resolver associated with the `isInCart` field. Since we've defined a local resolver for the `isInCart` field in the `ApolloClient` constructor, it finds a resolver it can use. This resolver function is run, then the result is calculated and merged in with the rest of the query result (if a local resolver can't be found, Apollo Client will check the cache for a matching field - see [Local data query flow](#query-flow) for more details). -![GraphiQL Console](../assets/client-schema.png) +Setting resolvers through `ApolloClient`'s constructor `resolvers` parameter, or through its `setResolvers` / `addResolvers` methods, adds resolvers to Apollo Client's internal resolver map (refer to the [Local resolvers](#local-resolvers) section for more details concerning the resolver map). In the above example we added a `isInCart` resolver, for the `Launch` GraphQL object type, to the resolver map. Let's look at the `isInCart` resolver function more closely: + +```js +isInCart: (launch, _args, { cache }) => { + const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); + return cartItems.includes(launch.id); +}, +``` + +`launch` holds the data returned from the server for the rest of the query, which means in this case we can use `launch` to get the current launch `id`. We aren't using any arguments in this resolver, so we can skip the second resolver parameter. From the `context` however (the third parameter), we're using the `cache` reference, to work directly with the cache ourselves. So in this resolver, we're making a call directly to the cache to get all cart items, checking to see if any of those loaded cart items matches the parent `launch.id`, and returning `true` / `false` accordingly. The returned boolean is then incorporated back into the result of running the original query. +Just like resolvers on the server, local resolvers are extremely flexible. They can be used to perform any kind of local computation you want, before returning a result for the specified field. You can manually query (or write to) the cache in different ways, call other helper utilities or libraries to prep/validate/clean data, track statistics, call into other data stores to prep a result, etc. -

Combining local and remote data

+

Async local resolvers

-What’s really cool about using a `@client` directive to specify client-side only fields is that you can actually combine local and remote data in one query. Since we don't have a remote server, let's look at an example from [Pupstagram](https://codesandbox.io/s/r5qp83z0yq) where we add a client-only field to our remote data. +Apollo Client supports asynchronous local resolver functions. These functions can either be `async` functions or ordinary functions that return a Promise. This can be useful for performing side effects like accessing a device API. -First, let's look at an example of a mixed query. The `images` field comes from the server. When the array of images comes back, we add a local field `isLiked` to each image. +> ⚠️ If you would like to hit a REST endpoint from your resolver, [we recommend checking out `apollo-link-rest`](https://github.com/apollographql/apollo-link-rest) instead, which is a more complete solution for using REST endpoints with Apollo Client. + +For React Native and most browser APIs, you should set up a listener in a component lifecycle method and pass in your mutation trigger function as the callback instead of using an async resolver. However, there are some cases where it's beneficial to perform a side effect within a resolver: ```js -const GET_DOG = gql` - query GetDogByBreed($breed: String!) { - dog(breed: $breed) { - images { - url - id - isLiked @client +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { CameraRoll } from 'react-native'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Query: { + cameraRoll: async (_, { assetType }) => { + try { + const media = await CameraRoll.getPhotos({ + first: 20, + assetType, + }); + + return { + ...media, + id: assetType, + __typename: 'CameraRoll', + }; + } catch (e) { + console.error(e); + return null; + } + }, + }, + }, +}); +``` + +[`CameraRoll.getPhotos()`](https://facebook.github.io/react-native/docs/cameraroll.html#getphotos) returns a Promise resolving to an object with a `edges` property, which is an array of camera node objects, and a `page_info` property, which is an object with pagination information. This is a great use case for GraphQL, since we can filter down the return value to only the data that our components consume. + +```js +import gql from 'graphql-tag'; + +const GET_PHOTOS = gql` + query getPhotos($assetType: String!) { + cameraRoll(assetType: $assetType) @client { + id + edges { + node { + image { + uri + } + location { + latitude + longitude + } + } } } } `; ``` -We need to provide an initial state for `isLiked`, our client-only field, but where do we put it? We can specify a resolver for `Image` that will only be called the first time the image comes back from the server. +

Handling `@client` fields with the cache

-```js -const resolvers = { - Image: { - isLiked: () => false +As outlined in [Handling `@client` fields with resolvers](#client-fields-resolvers), `@client` fields can be resolved with the help of local resolver functions. While local resolvers can be super helpful, it's important to note that they are not always required when using an `@client` directive. Fields marked with `@client` can still be resolved locally, by pulling matching values out of the cache directly. Let's look at an example of this: + +```jsx +import React from 'react'; +import ReactDOM from 'react-dom'; +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink } from 'apollo-link'; +import {Query, ApolloProvider} from 'react-apollo'; +import gql from 'graphql-tag'; + +import Pages from './pages'; +import Login from './pages/login'; + +const cache = new InMemoryCache(); +const client = new ApolloClient({ + cache, + link: ApolloLink.empty(), +}); + +cache.writeData({ + data: { + isLoggedIn: !!localStorage.getItem('token'), + }, +}); + +const IS_LOGGED_IN = gql` + query IsUserLoggedIn { + isLoggedIn @client } -}; +`; + +ReactDOM.render( + + + {({data}) => (data.isLoggedIn ? : )} + + , + document.getElementById('root'), +); ``` -Now that we've specified an initial state in the form of a resolver, we can query the data as we normally would. If you would like to toggle the `isLiked` field, you can create a mutation similar to the `toggleTodo` mutation we created in a previous example. +In the above example, we first prep the cache using `cache.writeData` to store a value for the `isLoggedIn` field. We then run the `IS_LOGGED_IN` query via a React Apollo `Query` component, which includes an `@client` directive. When Apollo Client executes the `IS_LOGGED_IN` query, it first looks for a local resolver that can be used to handle the `@client` field. When it can't find one, it falls back on trying to pull the specified field out of the cache. So in this case, the `data` value passed into the `Query` component's render prop has a `isLoggedIn` property available, which includes the `isLoggedIn` result (`!!localStorage.getItem('token')`) pulled directly from the cache. + +Pulling `@client` field values directly out of the cache isn't quite as flexible as local resolver functions, since local resolvers can perform extra computations before returning a result. Depending on your application's needs however, loading `@client` fields directly from the cache might be a simpler option. Apollo Client doesn't restrict combining both approaches, so feel free to mix and match. If the need arises, you can pull some `@client` values from the cache, and resolve others with local resolvers, all in the same query. + +

Working with fetch policies

+ +Before Apollo Client executes a query, one of the first things it does is check to see which [`fetchPolicy`](../api/apollo-client.html#ApolloClient.query) it has been configured to use. It does this so it knows where it should attempt to resolve the query from first, either the cache or the network. When running a query, Apollo Client treats `@client` based local resolvers just like it does remote resolvers, in that it will adhere to its defined `fetchPolicy` to know where to attempt to pull data from first. When working with local resolvers, it's important to understand how fetch policies impact the running of resolver functions, since by default local resolver functions are not run on every request. This is because the result of running a local resolver is cached with the rest of the query result, and pulled from the cache on the next request. Let's look at an example: ```jsx -const Detail = ({ match: { params: { breed, id } } }) => ( - - - {({ loading, error, data }) => { - if (loading) return ; - if (error) return ; +import React, { Fragment } from 'react'; +import { Query } from 'react-apollo'; +import gql from 'graphql-tag'; + +import { Loading, Header, LaunchDetail } from '../components'; +import { ActionButton } from '../containers'; + +export const GET_LAUNCH_DETAILS = gql` + query LaunchDetails($launchId: ID!) { + launch(id: $launchId) { + isInCart @client + site + rocket { + type + } + } + } +`; + +export default function Launch({ launchId }) { + return ( + + {({ data, loading, error }) => { + if (loading) return ; + if (error) return

ERROR: {error.message}

; return ( - ( - - )} - /> + +
+ {data.launch.mission.name} +
+ + +
); }}
-
-); + ); +} +``` + +In the above example we're using a React Apollo `Query` component to run the `GET_LAUNCH_DETAILS` query. The `@client` based `isInClient` field is configured to pull its data from the following resolver: + +```js +import { GET_CART_ITEMS } from './pages/cart'; + +export const resolvers = { + Launch: { + isInCart: (launch, _, { cache }) => { + const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); + return cartItems.includes(launch.id); + }, + }, +}; +``` + +Let's assume we're starting with an empty cache. Since we haven't specified a `fetchPolicy` prop in our `Query` call, we're using Apollo Client's default `cache-and-network` `fetchPolicy`. This means when the `GET_LAUNCH_DETAILS` query is run, it checks the cache first to see if it can find a result. It's important to note that when the cache is checked the entire query is run against the cache, but any `@client` associated local resolvers are skipped (not run). So the cache is queried with the following (it's as if the `@client` directive was never specified): + +``` +launch(id: $launchId) { + isInCart + site + rocket { + type + } +} +``` + +In this case a result can't be extracted from the cache (since our cache is empty), so behind the scenes Apollo Client moves further down the query execution path. At its next step, it essentially splits the original query into two parts - the part that has `@client` fields and the part that will be fired over the network. Both parts are then executed - results are fetched from the network, and results are calculated by running local resolvers. The results from the local resolvers and from the network are then merged together, and the final result is written to the cache and returned. So after our first run, we now have a result in the cache for the original query, that includes data for both the `@client` parts and network parts of the query. + +When the `GET_LAUNCH_DETAILS` query is run a second time, again since we're using Apollo Client's default `fetchPolicy` of `cache-and-network`, the cache is checked first for a result. This time a full result can be found for the query, so that result is returned to our `Query` component. Our `@client` field local resolvers aren't fired since the result we're looking for can already be extracted from the cache. + +In a lot of situations treating local resolvers just like remote resolvers, by having them adhere to the same `fetchPolicy`, makes a lot of sense. Once you have the data you're looking for, which might have been fetched remotely or calculated using a local resolver, you can cache it and avoid recalculating/re-fetching it again on a subsequent request. But what if you're using local resolvers to run calculations that you need fired on every request? There are a few different ways this can be handled. You can switch your query to use a `fetchPolicy` that forces your entire query to run on each request, like `no-cache` or `network-only`. This will make sure your local resolvers fire on every request, but it will also make sure your network based query components fire on every request. Depending on your use case this might be okay, but what if you want the network parts of your query to leverage the cache, and just want your `@client` parts to run on every request? We'll cover a more flexible option for this in the [Forcing resolvers with `@client(always: true)`](#forcing-resolvers) section. + +

Forcing resolvers with `@client(always: true)`

+ +Apollo Client leverages its cache to help reduce the network overhead required when constantly making requests for the same data. By default, `@client` based fields leverage the cache in the exact same manner as remote fields. After a local resolver is run, its result is cached alongside any remote results. This way the next time a query is fired that can find its results in the cache, those results are used, and any associated local resolvers are not fired again (until the data is either removed from the cache or the query is updated to use a `no-cache` or `network-only` `fetchPolicy`). + +While leveraging the cache for both local and remote results can be super helpful in a lot of cases, it's not always the best fit. We might want to use a local resolver to calculate a dynamic value that needs to be refreshed on every request, while at the same time continue to use the cache for the network based parts of our query. To support this use case, Apollo Client's `@client` directive accepts an `always` argument, that when set to `true` will ensure that the associated local resolver is run on every request. Looking at an example: + +```jsx +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import gql from 'graphql-tag'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Query: { + isLoggedIn() { + return !!localStorage.getItem('token'); + }, + }, + }, +}); + +const IS_LOGGED_IN = gql` + query IsUserLoggedIn { + isLoggedIn @client(always: true) + } +`; + +// ... run the query using client.query, a component, etc. ``` +The `isLoggedIn` resolver above is checking to see if an authentication token exists in `localStorage`. In this example, we want to make sure that every time the `IS_LOGGED_IN` query is executed, the `isLoggedIn` local resolver is also fired, so that we have the most up to date login information. To do this, we're using a `@client(always: true)` directive in the query, for the `isLoggedIn` field. If we didn't include `always: true`, then the local resolver would fire based on the queries `fetchPolicy`, which means we could be getting back a cached value for `isLoggedIn`. Using `@client(always: true)` ensures that we're always getting the direct result of running the associated local resolver. + +> ⚠️ Please consider the impact of using `@client(always: true)` carefully. While forcing a local resolver to run on every request can be useful, if that resolver is computationally expensive or has side effects, you could be negatively impacting your application. We recommend leveraging the cache as much as possible when using local resolvers, to help with application performance. `@client(always: true)` is helpful to have in your tool-belt, but letting local resolvers adhere to a query `fetchPolicy` should be the preferred choice. + +While `@client(always: true)` ensures that a local resolver is always fired, it's important to note that if a query is using a `fetchPolicy` that leverages the cache first (`cache-first`, `cache-and-network`, `cache-only`), the query is still attempted to be resolved from the cache first, before the local resolver is fired. This happens because `@client(always: true)` use could be mixed with normal `@client` use in the same query, which means we want part of the query to adhere to the defined `fetchPolicy`. The benefit of this is that anything that can be loaded from the cache first is made available to your `@client(always: true)` resolver function, as its [first parameter](#local-resolvers). So even though you've used `@client(always: true)` to identify that you want to always run a specific resolver, within that resolver you can look at the loaded cache values for the query, and decide if you want to proceed with running the resolver. + +

Combining local and remote data

+ +While Apollo Client's local state handling features can be used to work with local state exclusively, most Apollo based applications are built to work with remote data sources. To address this, Apollo Client supports mixing `@client` based local resolvers with remote queries, as well as using `@client` based fields as arguments to remote queries, in the same request. These features are outlined below. + +

Integrating `@client` into remote queries

+ +The `@client` directive can be used on any GraphQL selection set or field, to identify that the result of that field should be loaded locally with the help of a local resolver. Apollo Client supports mixing `@client` directive based fields with GraphQL documents that are intended to handled by remote resolvers: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const MEMBER_DETAILS = gql` + query Member { + member { + name + role + isLoggedIn @client + } + } +`; + +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache: new InMemoryCache(), + resolvers: { + Member: { + isLoggedIn() { + return someInternalLoginVerificationFunction(); + } + } + }, +}); + +// ... run the query using client.query, the component, etc. +``` + +When the above `MEMBER_DETAILS` query is fired by Apollo Client (assuming we're talking to a network based GraphQL API), the `@client` `isLoggedIn` field is first stripped from the document, and the remaining query is sent over the network to the GraphQL API. After the query has been handled by the remote resolvers and the result is passed back to Apollo Client from the API, the `@client` parts of the original query are then run against any defined local resolvers, their results are merged with the network results, and the final resulting data is returned as the response to the original operation. So in the above example, `isLoggedIn` is stripped before the rest of the query is sent and handled by the network API, then when the results come back `isLoggedIn` is calculated by running the `isLoggedIn()` function from the resolver map. Local and network results are merged together, and the final response is made available to the application. + +The `@client` directive can be used with entire selection sets as well: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const MEMBER_DETAILS = gql` + query Member { + member { + name + role + session @client { + isLoggedIn + connectionCount + errors + } + } + } +`; + +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache: new InMemoryCache(), + resolvers: { + Session: { + session() { + return { + __typename: 'Session', + isLoggedIn: someInternalLoginVerificationFunction(), + connectionCount: calculateOpenConnections(), + errors: sessionError(), + }; + } + } + }, +}); +``` + +Apollo Client supports the merging of local `@client` results and remote results for Queries, Mutations and Subscriptions. + +

Using `@client` fields as variables

+ +Apollo Client provides a way to use an `@client` field result as a variable for a selection set or field, in the same operation. So instead of running an `@client` based query first, getting the local result, then running a second query using the loaded local result as a variable, everything can be handled in one request. This is achieved by combining the `@client` directive with the `@export(as: "variableName")` directive: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthorId @client @export(as: "authorId") + postCount(authorId: $authorId) + } +`; + +const cache = new InMemoryCache(); +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache, +}); + +cache.writeData({ + data: { + currentAuthorId: 12345, + }, +}); + +// ... run the query using client.query, the component, etc. +``` + +In the example above, `currentAuthorId` is first loaded from the cache, then passed into the subsequent `postCount` field as the `authorId` variable (specified by the `@export(as: "authorId")` directive). The `@export` directive can also be used on specific fields within a selection set, like: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthor @client { + name + authorId @export(as: "authorId") + } + postCount(authorId: $authorId) + } +`; + +const cache = new InMemoryCache(); +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache, +}); + +cache.writeData({ + data: { + currentAuthor: { + __typename: 'Author', + name: 'John Smith', + authorId: 12345, + }, + }, +}); + +// ... run the query using client.query, the component, etc. +``` + +Here the `authorId` variable is set from the `authorId` field loaded from the cache stored `currentAuthor`. `@export` variable use isn't limited to remote queries; it can also be used to define variables for other `@client` fields or selection sets: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const query = gql` + query currentAuthorPostCount($authorId: Int!) { + currentAuthorId @client @export(as: "authorId") + postCount(authorId: $authorId) @client + } +`; + +const cache = new InMemoryCache(); +const client = new ApolloClient({ + cache, + resolvers: { + Query: { + postCount(_, { authorId }) { + return authorId === 12345 ? 100 : 0; + }, + }, + }, +}); + +cache.writeData({ + data: { + currentAuthorId: 12345, + }, +}); + +// ... run the query using client.query, the component, etc. +``` + +So here the `currentAuthorId` is loaded from the cache, then passed into the `postCount` local resolver as `authorId`. + +**A few important notes about `@export` use:** + +1. Apollo Client currently only supports using the `@export` directive to store variables for local data. `@export` must be used with `@client`. + +2. `@client @export` use might appear to go against the GraphQL specification, given that the execution order of an operation looks like it could affect the result. From the [Normal and Serial Execution](https://facebook.github.io/graphql/draft/#sec-Normal-and-Serial-Execution) section of the GraphQL spec: + + > ... the resolution of fields other than top‐level mutation fields must always be side effect‐free and idempotent, the execution order must not affect the result, and hence the server has the freedom to execute the field entries in whatever order it deems optimal. + + Apollo Client currently only supports the use of the `@export` directive when mixed with the `@client` directive. It prepares `@export` variables by first running through an operation that has `@client @export` directives, extracting the specified `@export` variables, then attempting to resolve the value of those variables from the local cache or local resolvers. Once a map of variable names to local values is built up, that map is then used to populate the variables passed in when running the server based GraphQL query. The execution order of the server based GraphQL query is not impacted by `@export` use; the variables are prepped and organized before the server query runs, so the specification is being followed. + +3. If you define multiple `@export` variables that use the same name, in a single operation, the value of the last `@export` variable will be used as the variable value moving forward. When this happens Apollo Client will log a warning message (dev only). + +

Managing the cache

+ +When you're using Apollo Client to work with local state, your Apollo cache becomes the single source of truth for all of your local and remote data. The [Apollo cache API](/docs/react/features/caching.html) has several methods that can assist you with updating and retrieving data. Let's walk through the most relevant methods, and explore some common use cases for each one. + +

writeData

+ +The easiest way to update the cache is with `cache.writeData`, which allows you to write data directly to the cache without passing in a query. Here's how you use it in your resolver map for a simple update: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Mutation: { + updateVisibilityFilter: (_, { visibilityFilter }, { cache }) => { + const data = { visibilityFilter, __typename: 'Filter' }; + cache.writeData({ data }); + }, + }, + }, +}; +``` + +`cache.writeData` also allows you to pass in an optional `id` property to write a fragment to an existing object in the cache. This is useful if you want to add some client-side fields to an existing object in the cache. + +The `id` should correspond to the object's cache key. If you're using the `InMemoryCache` and not overriding the `dataObjectFromId` config property, your cache key should be `__typename:id`. + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { + Mutation: { + updateUserEmail: (_, { id, email }, { cache }) => { + const data = { email }; + cache.writeData({ id: `User:${id}`, data }); + }, + }, + }, +}; +``` + +`cache.writeData` should cover most of your needs; however, there are some cases where the data you're writing to the cache depends on the data that's already there. In that scenario, you should use `readQuery` or `readFragment`, which allows you to pass in a query or a fragment to read data from the cache. If you'd like to validate the shape of your data that you're writing to the cache, use `writeQuery` or `writeFragment`. We'll explain some of those use cases below. + +

writeQuery and readQuery

+ +Sometimes, the data you're writing to the cache depends on data that's already in the cache; for example, you're adding an item to a list or setting a property based on an existing property value. In that case, you should use `cache.readQuery` to pass in a query and read a value from the cache before you write any data. Let's look at an example where we add a todo to a list: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import gql from 'graphql-tag'; + +let nextTodoId = 0; + +const cache = new InMemoryCache(); +cache.writeData({ + data: { + todos: [], + }, +}); + +const client = new ApolloClient({ + resolvers: { + Mutation: { + addTodo: (_, { text }, { cache }) => { + const query = gql` + query GetTodos { + todos @client { + id + text + completed + } + } + `; + + const previous = cache.readQuery({ query }); + const newTodo = { id: nextTodoId++, text, completed: false, __typename: 'TodoItem' }; + const data = { + todos: previous.todos.concat([newTodo]), + }; + + // you can also do cache.writeData({ data }) here if you prefer + cache.writeQuery({ query, data }); + return newTodo; + }, + }, + }, +}); +``` + +In order to add our todo to the list, we need the todos that are currently in the cache, which is why we call `cache.readQuery` to retrieve them. `cache.readQuery` will throw an error if the data isn't in the cache, so we need to provide an initial state. This is why we're returning an empty array in our `Query.todos` resolver. + +To write the data to the cache, you can use either `cache.writeQuery` or `cache.writeData`. The only difference between the two is that `cache.writeQuery` requires that you pass in a query to validate that the shape of the data you're writing to the cache is the same as the shape of the data required by the query. Under the hood, `cache.writeData` automatically constructs a query from the `data` object you pass in and calls `cache.writeQuery`. + +

writeFragment and readFragment

+ +`cache.readFragment` is similar to `cache.readQuery` except you pass in a fragment. This allows for greater flexibility because you can read from any entry in the cache as long as you have its cache key. In contrast, `cache.readQuery` only lets you read from the root of your cache. + +Let's go back to our previous todo list example and see how `cache.readFragment` can help us toggle one of our todos as completed. + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const client = new ApolloClient({ + resolvers: { + Mutation: { + toggleTodo: (_, variables, { cache }) => { + const id = `TodoItem:${variables.id}`; + const fragment = gql` + fragment completeTodo on TodoItem { + completed + } + `; + const todo = cache.readFragment({ fragment, id }); + const data = { ...todo, completed: !todo.completed }; + + // you can also do cache.writeData({ data, id }) here if you prefer + cache.writeFragment({ fragment, id, data }); + return null; + }, + }, + }, +}); +``` + +In order to toggle our todo, we need the todo and its status from the cache, which is why we call `cache.readFragment` and pass in a fragment to retrieve it. The `id` we're passing into `cache.readFragment` refers to its cache key. If you're using the `InMemoryCache` and not overriding the `dataObjectFromId` config property, your cache key should be `__typename:id`. + +To write the data to the cache, you can use either `cache.writeFragment` or `cache.writeData`. The only difference between the two is that `cache.writeFragment` requires that you pass in a fragment to validate that the shape of the data you're writing to the cache node is the same as the shape of the data required by the fragment. Under the hood, `cache.writeData` automatically constructs a fragment from the `data` object and `id` you pass in and calls `cache.writeFragment`. + +

Client-side schema

+ +You can optionally set a client-side schema to be used with Apollo Client, through either the `ApolloClient` constructor `typeDefs` parameter, or the local state API `setTypeDefs` method. Your schema should be written in [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). This schema is not used for validation like it is on the server because the `graphql-js` modules for schema validation would dramatically increase your bundle size. Instead, your client-side schema is used for introspection in [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools), where you can explore your schema in GraphiQL. + +The following demonstrates how to configure a client-side schema through the `ApolloClient` constructor: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { ApolloLink } from 'apollo-link'; +import gql from 'graphql-tag'; + +const typeDefs = gql` + extend type Query { + isLoggedIn: Boolean! + cartItems: [Launch]! + } + + extend type Launch { + isInCart: Boolean! + } + + extend type Mutation { + addOrRemoveFromCart(id: ID!): [Launch] + } +`; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + link: ApolloLink.empty(), + typeDefs, +}); +``` + +If you open up Apollo Client Devtools and click on the `GraphiQL` tab, you'll be able to explore your client schema in the "Docs" section. This example doesn't include a remote schema, but if it did, you would be able to see your local queries and mutations alongside your remote ones. + +![GraphiQL Console](../assets/client-schema.png) + +

Migrating from `apollo-link-state`

+ +The [`apollo-link-state`](https://github.com/apollographql/apollo-link-state) project was the first to bring local state handling into the Apollo ecosystem. Handling local resolvers through the addition of an `ApolloLink` was a great starting point, and proved that `@client` based queries make sense, and work really well for local state management. + +While `apollo-link-state` works well, and it's nice to be able to modularly include local state handling when required, the use of an `ApolloLink` introduces a few hard to work around limitations. Local state handling in a link is restricted to only being able to leverage the API elements available within the link. We see local state management as an important part of the Apollo ecosystem, and as Apollo Client progresses, we want to make sure the handling of local resolvers are integrated as tightly as possible into core. This opens up new possibilities (like `@export` handling) and will tie nicely into the future planned adjustments to cache data retention, invalidation, garbage collection, etc. + +Updating your application to use Apollo Client's local state management features, instead of `apollo-link-state`, is fairly straightforward. The necessary steps are outlined below. + +1. Including `apollo-link-state` as a dependency, and importing it to use `withClientState`, is no longer necessary. You can remove the `apollo-link-state` dependency since local state management is included with `apollo-client` >= 2.5.0. + +2. Using `withClientState` is no longer supported. The following + + ```js + const cache = new InMemoryCache(); + const stateLink = withClientState({ cache, resolvers: { ... } }); + const link = ApolloLink.from([stateLink, new HttpLink({ uri: '...' })]); + const client = new ApolloClient({ + cache, + link, + }); + ``` + becomes + + ```js + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: new HttpLink({ uri: '...' }), + resolvers: { ... }, + }); + ``` + It's important to note here that `defaults` are no longer supported. To prep the cache, use [`cache.writeData`](#write-data) directly instead. So + + ```js + const cache = new InMemoryCache(); + const stateLink = withClientState({ + cache, + resolvers: { ... }, + defaults: { + someField: 'some value', + }, + }); + const link = ApolloLink.from([stateLink, new HttpLink({ uri: '...' })]); + const client = new ApolloClient({ + cache, + link, + }); + ``` + becomes: + + ```js + const cache = new InMemoryCache(); + const client = new ApolloClient({ + cache, + link: new HttpLink({ uri: '...' }), + resolvers: { ... }, + }); + cache.writeData({ + data: { + someField: 'some value', + }, + }); + ``` + +3. Test thoroughly! 🙂 +

Next steps

-Managing your local data with Apollo Client can simplify your state management code since the Apollo cache is your single source of truth for all data in your application. If you'd like to learn more about `apollo-link-state`, check out: +Managing your local data with Apollo Client can help simplify your state management code, since the Apollo cache becomes your single source of truth for all of the data in your application. If you'd like to learn more about Apollo Client's local state features, check out: -- [`apollo-link-state` docs](/docs/link/links/state.html): Dive deeper into the concepts we just learned, such as resolvers and mixed queries, by taking a look at the `apollo-link-state` docs. -- [The future of state management](https://blog.apollographql.com/the-future-of-state-management-dd410864cae2): Read about our vision for the future of state management with GraphQL in the `apollo-link-state` announcement post. -- [Tutorial video by Sara Vieira](https://youtu.be/2RvRcnD8wHY): Check out this tutorial video by Sara Vieira if you'd like a step-by-step walkthrough on building an app with `apollo-link-state`. +- The [Apollo tutorial](https://www.apollographql.com/docs/tutorial/introduction.html) which will not only show you how to use Apollo Client's local state features in a step by step manner, but will also guide you through using other Apollo components to build a fullstack application. +- The [Apollo community slack group](https://www.apollographql.com/slack), in particular the `#local-state` channel, is a great place to ask Apollo Client local state questions. +- Interested in suggesting or working on future changes to help make Apollo Client's local state management even better? We'd love the help! [Open a new feature request](https://github.com/apollographql/apollo-feature-requests) to kick start your feature discussion. +- Found a bug? Impossible! 🙈 Open a new issue in the [Apollo Client repo](https://github.com/apollographql/apollo-client), ideally with a small runnable reproduction, and someone from the community or Apollo team will help get it fixed. From 7e59fe3e992a8531f50c7d8e8efa695975b79607 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sun, 27 Jan 2019 09:48:10 -0500 Subject: [PATCH 031/230] Move `client-schema.png` to another directory to prevent corruption I'm not sure why, but for some reason Hexo corrupts the `client-schema.png` when it's in the `source/assets` directory. Moving it to another location fixes the issue, and since Hexo is going to be replaced, I'm not going to dig into this further. --- docs/source/essentials/local-state.md | 42 +++++++++--------- docs/source/{assets => img}/client-schema.png | Bin 2 files changed, 21 insertions(+), 21 deletions(-) rename docs/source/{assets => img}/client-schema.png (100%) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 01d64019629..21df771b973 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -122,7 +122,7 @@ cache.writeData({

Updating local state

-There are two main ways to perform local state mutations. The first way is to directly write to the cache by calling `cache.writeData` within an `ApolloConsumer` or through a `Query` component. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is by creating a `Mutation` component with a GraphQL mutation that calls a local client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean. You can think of direct writes like calling React's `setState`, whereas local resolvers offer a bit more structure like Redux. +There are two main ways to perform local state mutations. The first way is to directly write to the cache by calling `cache.writeData` within an `ApolloConsumer` or through a `Query` component. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is by creating a `Mutation` component with a GraphQL mutation that calls a local client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean. You can think of direct writes like calling React's `setState`, whereas local resolvers offer a bit more structure like Redux.

Direct writes

@@ -193,7 +193,7 @@ To help make local resolvers more flexible, the signature of a resolver function fieldName: (obj, args, context, info) => result; ``` -1. `obj`: The object containing the result returned from the resolver on the parent field or the `ROOT_QUERY` object in the case of a top-level query or mutation. +1. `obj`: The object containing the result returned from the resolver on the parent field or the `ROOT_QUERY` object in the case of a top-level query or mutation. 2. `args`: An object containing all of the arguments passed into the field. For example, if you called a mutation with `updateNetworkStatus(isConnected: true)`, the `args` object would be `{ isConnected: true }`. 3. `context`: The context object, which is shared between your React components and your Apollo Client network stack. The most important thing to note here is that we've added the Apollo cache to the context for you, so you can manipulate the cache with `readQuery`, `writeQuery`, `readFragment`, `writeFragment`, and `writeData`. You can learn more about these methods in [Managing the cache](#managing-the-cache). We've also added the current Apollo Client instance to the `context` under a `client` property, in-case you're interested in calling into other parts of the Apollo Client API from a resolver. 4. `info`: Information about the execution state of the query. You will probably never have to use this one. @@ -384,14 +384,14 @@ const client = new ApolloClient({ const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); return cartItems.includes(launch.id); }, - }, + }, }, }); cache.writeData({ data: { cartItems: [], - }, + }, }); const GET_LAUNCH_DETAILS = gql` @@ -422,11 +422,11 @@ isInCart: (launch, _args, { cache }) => { `launch` holds the data returned from the server for the rest of the query, which means in this case we can use `launch` to get the current launch `id`. We aren't using any arguments in this resolver, so we can skip the second resolver parameter. From the `context` however (the third parameter), we're using the `cache` reference, to work directly with the cache ourselves. So in this resolver, we're making a call directly to the cache to get all cart items, checking to see if any of those loaded cart items matches the parent `launch.id`, and returning `true` / `false` accordingly. The returned boolean is then incorporated back into the result of running the original query. -Just like resolvers on the server, local resolvers are extremely flexible. They can be used to perform any kind of local computation you want, before returning a result for the specified field. You can manually query (or write to) the cache in different ways, call other helper utilities or libraries to prep/validate/clean data, track statistics, call into other data stores to prep a result, etc. +Just like resolvers on the server, local resolvers are extremely flexible. They can be used to perform any kind of local computation you want, before returning a result for the specified field. You can manually query (or write to) the cache in different ways, call other helper utilities or libraries to prep/validate/clean data, track statistics, call into other data stores to prep a result, etc.

Async local resolvers

-Apollo Client supports asynchronous local resolver functions. These functions can either be `async` functions or ordinary functions that return a Promise. This can be useful for performing side effects like accessing a device API. +Apollo Client supports asynchronous local resolver functions. These functions can either be `async` functions or ordinary functions that return a Promise. This can be useful for performing side effects like accessing a device API. > ⚠️ If you would like to hit a REST endpoint from your resolver, [we recommend checking out `apollo-link-rest`](https://github.com/apollographql/apollo-link-rest) instead, which is a more complete solution for using REST endpoints with Apollo Client. @@ -607,9 +607,9 @@ launch(id: $launchId) { type } } -``` +``` -In this case a result can't be extracted from the cache (since our cache is empty), so behind the scenes Apollo Client moves further down the query execution path. At its next step, it essentially splits the original query into two parts - the part that has `@client` fields and the part that will be fired over the network. Both parts are then executed - results are fetched from the network, and results are calculated by running local resolvers. The results from the local resolvers and from the network are then merged together, and the final result is written to the cache and returned. So after our first run, we now have a result in the cache for the original query, that includes data for both the `@client` parts and network parts of the query. +In this case a result can't be extracted from the cache (since our cache is empty), so behind the scenes Apollo Client moves further down the query execution path. At its next step, it essentially splits the original query into two parts - the part that has `@client` fields and the part that will be fired over the network. Both parts are then executed - results are fetched from the network, and results are calculated by running local resolvers. The results from the local resolvers and from the network are then merged together, and the final result is written to the cache and returned. So after our first run, we now have a result in the cache for the original query, that includes data for both the `@client` parts and network parts of the query. When the `GET_LAUNCH_DETAILS` query is run a second time, again since we're using Apollo Client's default `fetchPolicy` of `cache-and-network`, the cache is checked first for a result. This time a full result can be found for the query, so that result is returned to our `Query` component. Our `@client` field local resolvers aren't fired since the result we're looking for can already be extracted from the cache. @@ -646,7 +646,7 @@ const IS_LOGGED_IN = gql` // ... run the query using client.query, a component, etc. ``` -The `isLoggedIn` resolver above is checking to see if an authentication token exists in `localStorage`. In this example, we want to make sure that every time the `IS_LOGGED_IN` query is executed, the `isLoggedIn` local resolver is also fired, so that we have the most up to date login information. To do this, we're using a `@client(always: true)` directive in the query, for the `isLoggedIn` field. If we didn't include `always: true`, then the local resolver would fire based on the queries `fetchPolicy`, which means we could be getting back a cached value for `isLoggedIn`. Using `@client(always: true)` ensures that we're always getting the direct result of running the associated local resolver. +The `isLoggedIn` resolver above is checking to see if an authentication token exists in `localStorage`. In this example, we want to make sure that every time the `IS_LOGGED_IN` query is executed, the `isLoggedIn` local resolver is also fired, so that we have the most up to date login information. To do this, we're using a `@client(always: true)` directive in the query, for the `isLoggedIn` field. If we didn't include `always: true`, then the local resolver would fire based on the queries `fetchPolicy`, which means we could be getting back a cached value for `isLoggedIn`. Using `@client(always: true)` ensures that we're always getting the direct result of running the associated local resolver. > ⚠️ Please consider the impact of using `@client(always: true)` carefully. While forcing a local resolver to run on every request can be useful, if that resolver is computationally expensive or has side effects, you could be negatively impacting your application. We recommend leveraging the cache as much as possible when using local resolvers, to help with application performance. `@client(always: true)` is helpful to have in your tool-belt, but letting local resolvers adhere to a query `fetchPolicy` should be the preferred choice. @@ -658,7 +658,7 @@ While Apollo Client's local state handling features can be used to work with loc

Integrating `@client` into remote queries

-The `@client` directive can be used on any GraphQL selection set or field, to identify that the result of that field should be loaded locally with the help of a local resolver. Apollo Client supports mixing `@client` directive based fields with GraphQL documents that are intended to handled by remote resolvers: +The `@client` directive can be used on any GraphQL selection set or field, to identify that the result of that field should be loaded locally with the help of a local resolver. Apollo Client supports mixing `@client` directive based fields with GraphQL documents that are intended to handled by remote resolvers: ```js import { ApolloClient } from 'apollo-client'; @@ -672,7 +672,7 @@ const MEMBER_DETAILS = gql` name role isLoggedIn @client - } + } } `; @@ -711,7 +711,7 @@ const MEMBER_DETAILS = gql` connectionCount errors } - } + } } `; @@ -794,7 +794,7 @@ const client = new ApolloClient({ cache.writeData({ data: { currentAuthor: { - __typename: 'Author', + __typename: 'Author', name: 'John Smith', authorId: 12345, }, @@ -1023,9 +1023,9 @@ const client = new ApolloClient({ }); ``` -If you open up Apollo Client Devtools and click on the `GraphiQL` tab, you'll be able to explore your client schema in the "Docs" section. This example doesn't include a remote schema, but if it did, you would be able to see your local queries and mutations alongside your remote ones. +If you open up Apollo Client Devtools and click on the `GraphiQL` tab, you'll be able to explore your client schema in the "Docs" section. This example doesn't include a remote schema, but if it did, you would be able to see your local queries and mutations alongside your remote ones. -![GraphiQL Console](../assets/client-schema.png) +![GraphiQL Console](../img/client-schema.png)

Migrating from `apollo-link-state`

@@ -1052,7 +1052,7 @@ Updating your application to use Apollo Client's local state management features ```js const client = new ApolloClient({ - cache: new InMemoryCache(), + cache: new InMemoryCache(), link: new HttpLink({ uri: '...' }), resolvers: { ... }, }); @@ -1061,11 +1061,11 @@ Updating your application to use Apollo Client's local state management features ```js const cache = new InMemoryCache(); - const stateLink = withClientState({ - cache, - resolvers: { ... }, + const stateLink = withClientState({ + cache, + resolvers: { ... }, defaults: { - someField: 'some value', + someField: 'some value', }, }); const link = ApolloLink.from([stateLink, new HttpLink({ uri: '...' })]); @@ -1079,7 +1079,7 @@ Updating your application to use Apollo Client's local state management features ```js const cache = new InMemoryCache(); const client = new ApolloClient({ - cache, + cache, link: new HttpLink({ uri: '...' }), resolvers: { ... }, }); diff --git a/docs/source/assets/client-schema.png b/docs/source/img/client-schema.png similarity index 100% rename from docs/source/assets/client-schema.png rename to docs/source/img/client-schema.png From 2db5dbe0b476fbc28f504ce6c122da6eba71c7d3 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 28 Jan 2019 10:59:25 -0500 Subject: [PATCH 032/230] Make Apollo Boost local state support more flexible Since the new local state changes will be rolled out in a minor release, we have to make sure Boost local state support is backwards compatible. To do this, this commit adjusts the `clientState` parameter approach such that if `defaults` are passed in, they are automatically written to the cache using `cache.writeData`. Also, the Boost constructor has been updated to line up with the new `ApolloClient` constructor changes, meaning `resolvers`, `typeDefs`, and `fragmentMatcher` can now be passed into the Boost constructor. Other than making sure Boost doesn't break when the local state changes are rolled out, we won't be making other Boost changes. Apollo Boost is still slotted for deprecation in AC 3.0. --- packages/apollo-boost/src/index.ts | 39 ++++++++++++++++++++++------- packages/apollo-client/src/index.ts | 10 ++++++-- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/packages/apollo-boost/src/index.ts b/packages/apollo-boost/src/index.ts index 0476eaae437..457babea49d 100644 --- a/packages/apollo-boost/src/index.ts +++ b/packages/apollo-boost/src/index.ts @@ -9,16 +9,20 @@ import { onError, ErrorLink } from 'apollo-link-error'; import { ApolloCache } from 'apollo-cache'; import { InMemoryCache, CacheResolverMap } from 'apollo-cache-inmemory'; import gql from 'graphql-tag'; -import ApolloClient from 'apollo-client'; +import ApolloClient, { + Resolvers, + LocalStateFragmentMatcher, +} from 'apollo-client'; import { DocumentNode } from 'graphql'; export { gql, HttpLink }; type ClientStateConfig = { cache?: ApolloCache; - resolvers: any | (() => any); + defaults?: Record; + resolvers?: Resolvers | Resolvers[]; typeDefs?: string | string[] | DocumentNode | DocumentNode[]; - fragmentMatcher?: any; + fragmentMatcher?: LocalStateFragmentMatcher; }; export interface PresetConfig { @@ -34,6 +38,9 @@ export interface PresetConfig { cache?: ApolloCache; name?: string; version?: string; + resolvers?: Resolvers | Resolvers[]; + typeDefs?: string | string[] | DocumentNode | DocumentNode[]; + fragmentMatcher?: LocalStateFragmentMatcher; } // Yes, these are the exact same as the `PresetConfig` interface. We're @@ -59,6 +66,9 @@ const PRESET_CONFIG_KEYS = [ 'cache', 'name', 'version', + 'resolvers', + 'typeDefs', + 'fragmentMatcher', ]; export default class DefaultClient extends ApolloClient { @@ -88,6 +98,9 @@ export default class DefaultClient extends ApolloClient { onError: errorCallback, name, version, + resolvers, + typeDefs, + fragmentMatcher, } = config; let { cache } = config; @@ -160,11 +173,18 @@ export default class DefaultClient extends ApolloClient { x => !!x, ) as ApolloLink[]); - let resolvers; - let typeDefs; + let activeResolvers = resolvers; + let activeTypeDefs = typeDefs; + let activeFragmentMatcher = fragmentMatcher; if (clientState) { - resolvers = clientState.resolvers; - typeDefs = clientState.typeDefs; + if (clientState.defaults) { + cache.writeData({ + data: clientState.defaults, + }); + } + activeResolvers = clientState.resolvers; + activeTypeDefs = clientState.typeDefs; + activeFragmentMatcher = clientState.fragmentMatcher; } // super hacky, we will fix the types eventually @@ -173,8 +193,9 @@ export default class DefaultClient extends ApolloClient { link, name, version, - resolvers, - typeDefs, + resolvers: activeResolvers, + typeDefs: activeTypeDefs, + fragmentMatcher: activeFragmentMatcher, } as any); } } diff --git a/packages/apollo-client/src/index.ts b/packages/apollo-client/src/index.ts index d8d86d9d66b..6b97a8c062a 100644 --- a/packages/apollo-client/src/index.ts +++ b/packages/apollo-client/src/index.ts @@ -18,13 +18,19 @@ export { } from './core/watchQueryOptions'; export { NetworkStatus } from './core/networkStatus'; export * from './core/types'; +export { + Resolver, + FragmentMatcher as LocalStateFragmentMatcher, +} from './core/LocalState'; export { isApolloError, ApolloError } from './errors/ApolloError'; -import ApolloClient, { ApolloClientOptions, DefaultOptions } from './ApolloClient'; +import ApolloClient, { + ApolloClientOptions, + DefaultOptions, +} from './ApolloClient'; export { ApolloClientOptions, DefaultOptions }; // Export the client as both default and named. export { ApolloClient }; export default ApolloClient; - From 7b1be577c44a4640d6c6fb37cd70af465b5b0efb Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 28 Jan 2019 11:15:02 -0500 Subject: [PATCH 033/230] Mention Apollo Boost in the migration steps People already using Boost won't have to change anything to use AC's integrated local state handling. --- docs/source/essentials/local-state.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 21df771b973..117d1dc02da 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -1090,7 +1090,9 @@ Updating your application to use Apollo Client's local state management features }); ``` -3. Test thoroughly! 🙂 +3. If you're using Apollo Boost, you shouldn't have to change anything. Apollo Boost has been updated to use Apollo Client's integrated local state handling, which means it is no longer using `apollo-link-state`. Behind the scenes, the Apollo Boost `clientState` constructor parameter now feeds the necessary local state initialization directly into Apollo Client. + +4. Test thoroughly! 🙂

Next steps

From d3931b8347c76c961ae24da68ef108576e67ff0d Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 1 Feb 2019 10:47:29 -0500 Subject: [PATCH 034/230] Remove `getTypeDefs` / `setTypeDefs` from `ApolloClient` We're going to avoid getters/setters for `typeDefs` for now, and instead recommend `typeDefs` are set via the `ApolloClient` constructor. We were originally exposing getters/setters for integrations like Apollo Client Devtools, but we'll adjust devtools to access the `typeDefs` in a different way. We will likely want to revisit this decision in the future, to accommodate the possibility that people want to add to their local schema at different points in their application, but we'll cross that bridge when we get there. For now keeping the changes to the public `ApolloClient` API minimal, is the goal. --- packages/apollo-client/src/ApolloClient.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index da7f8a1f33e..81ba7889183 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -616,27 +616,6 @@ export default class ApolloClient implements DataProxy { return this.localState.getResolvers(); } - /** - * Set the local schema type definitions. - */ - public setTypeDefs( - typeDefs: string | string[] | DocumentNode | DocumentNode[], - ) { - this.localState.setTypeDefs(typeDefs); - } - - /** - * Get local schema type definitions. - */ - public getTypeDefs(): - | string - | string[] - | DocumentNode - | DocumentNode[] - | undefined { - return this.localState.getTypeDefs(); - } - /** * Set a custom local state fragment matcher. */ From d5bacb48fce405f21305449772ad1d8025d4de72 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 1 Feb 2019 12:07:42 -0500 Subject: [PATCH 035/230] Prep for beta publish --- package.json | 2 +- packages/apollo-client/scripts/deploy.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cf654889fcf..3a6b67ea065 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "coverage": "jest --verbose --coverage", "coverage:upload": "codecov", "danger": "danger run --verbose --dangerfile=./config/dangerfile.ts", - "deploy": "lerna publish -m \"chore: Publish\" --npm-tag alpha && cd packages/apollo-client && npm run deploy", + "deploy": "lerna publish -m \"chore: Publish\" --npm-tag beta && cd packages/apollo-client && npm run deploy", "clean": "find . -name \"node_modules\" -exec rm -rf '{}' + && find . -name \"lib\" -exec rm -rf '{}' +" }, "bundlesize": [ diff --git a/packages/apollo-client/scripts/deploy.sh b/packages/apollo-client/scripts/deploy.sh index 9c59deaf305..51632417e26 100755 --- a/packages/apollo-client/scripts/deploy.sh +++ b/packages/apollo-client/scripts/deploy.sh @@ -62,4 +62,4 @@ node -e "\ cp ../../README.md npm/ cp ../../LICENSE npm/ -cd npm && npm publish --tag alpha +cd npm && npm publish --tag beta From b49a7e851b5637eb9bf3784781fd2c8881a2d2d8 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 1 Feb 2019 12:21:33 -0500 Subject: [PATCH 036/230] chore: Publish - apollo-boost@0.3.0-beta.0 - apollo-cache-inmemory@1.5.0-beta.0 - apollo-cache@1.2.0-beta.0 - apollo-client@2.5.0-beta.0 - apollo-utilities@1.2.0-beta.0 - graphql-anywhere@4.2.0-beta.0 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index ba38d1e2480..a6a6e179712 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-alpha.12", + "version": "0.3.0-beta.0", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 2b34f656313..1f1ed1ab563 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.4.0-alpha.12", + "version": "1.5.0-beta.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index ce639326603..774e4c0bb3f 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-alpha.9", + "version": "1.2.0-beta.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index ef4c115f2b5..cb42312472d 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-alpha.10", + "version": "2.5.0-beta.0", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.umd.js", "module": "./lib/index.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 4307d4de254..1e98b0b33f2 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.1.0-alpha.10", + "version": "1.2.0-beta.0", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index d708b26e947..4a7f15c8ed2 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-alpha.9", + "version": "4.2.0-beta.0", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.umd.js", "module": "./lib/index.js", From 55be32a8885a61417cc423daebb71069c27f3d0f Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Mon, 24 Dec 2018 12:03:59 -0600 Subject: [PATCH 037/230] Revamp CJS and ESM bundling with Rollup (extracted from #4261). To create this commit, I (@benjamn) first squashed all of @rosskevin's commits from PR #4261 into one big commit, then reverted any changes that did not seem essential to the new bundling strategy discussed in that PR. Once that was done, I rebased against origin/release-2.5.0 and fixed the conflicts. With a few more minor tweaks, all tests are passing. I will push a few additional changes after this commit, but I wanted to preserve @rosskevin's intentions as much as possible here, since his name is still attached to this commit. --- .gitignore | 1 + .vscode/settings.json | 1 + config/buildEsmConfig.js | 29 +++++++++++++++ .../{rollup.config.js => buildUmdConfig.js} | 30 ++++++++++++--- config/jest.config.settings.js | 21 +++++++++++ config/tsconfig.base.json | 2 +- jest.config.js | 9 +++++ package.json | 36 ++++-------------- packages/apollo-boost/jest.config.js | 5 +++ packages/apollo-boost/package.json | 27 ++++---------- packages/apollo-boost/rollup-bundle.config.js | 36 ------------------ packages/apollo-boost/rollup.config.js | 20 ++++++---- packages/apollo-cache-inmemory/jest.config.js | 5 +++ packages/apollo-cache-inmemory/package.json | 25 ++++--------- .../apollo-cache-inmemory/rollup.config.js | 17 ++++++--- packages/apollo-cache/jest.config.js | 5 +++ packages/apollo-cache/package.json | 25 ++++--------- packages/apollo-cache/rollup.config.js | 10 ++--- packages/apollo-client/.babelrc | 10 ----- packages/apollo-client/jest.config.js | 7 ++++ packages/apollo-client/package.json | 37 +++++++------------ packages/apollo-client/rollup.config.js | 17 ++++++--- packages/apollo-client/scripts/deploy.sh | 3 +- .../tests.js => src/config/jest/setup.ts} | 6 +-- packages/apollo-utilities/jest.config.js | 5 +++ packages/apollo-utilities/package.json | 25 ++++--------- packages/apollo-utilities/rollup.config.js | 17 ++++++--- packages/graphql-anywhere/.travis.yml | 8 ---- packages/graphql-anywhere/Gruntfile.js | 17 --------- packages/graphql-anywhere/jest.config.js | 5 +++ packages/graphql-anywhere/package.json | 29 +++++---------- .../graphql-anywhere/rollup.async.config.js | 9 ----- packages/graphql-anywhere/rollup.config.js | 15 +++++++- tsconfig.json | 11 ++++-- 34 files changed, 253 insertions(+), 272 deletions(-) create mode 100644 config/buildEsmConfig.js rename config/{rollup.config.js => buildUmdConfig.js} (60%) create mode 100644 config/jest.config.settings.js create mode 100644 jest.config.js create mode 100644 packages/apollo-boost/jest.config.js delete mode 100644 packages/apollo-boost/rollup-bundle.config.js create mode 100644 packages/apollo-cache-inmemory/jest.config.js create mode 100644 packages/apollo-cache/jest.config.js delete mode 100644 packages/apollo-client/.babelrc create mode 100644 packages/apollo-client/jest.config.js rename packages/apollo-client/{scripts/tests.js => src/config/jest/setup.ts} (67%) create mode 100644 packages/apollo-utilities/jest.config.js delete mode 100644 packages/graphql-anywhere/.travis.yml delete mode 100644 packages/graphql-anywhere/Gruntfile.js create mode 100644 packages/graphql-anywhere/jest.config.js delete mode 100644 packages/graphql-anywhere/rollup.async.config.js diff --git a/.gitignore b/.gitignore index c58dd653114..8785ca25e0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # fs .DS_Store +.rpt2_cache # Logs logs diff --git a/.vscode/settings.json b/.vscode/settings.json index d0e33774401..473feaa5e27 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,7 @@ "files.exclude": { "**/.git": true, "**/.DS_Store": true, + "**/.rpt2_cache": true, "node_modules": true, "test-lib": true, "lib": true, diff --git a/config/buildEsmConfig.js b/config/buildEsmConfig.js new file mode 100644 index 00000000000..9e625c7e3be --- /dev/null +++ b/config/buildEsmConfig.js @@ -0,0 +1,29 @@ +import nodeResolve from 'rollup-plugin-node-resolve'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import typescript from 'typescript'; +import path from 'path'; + +// treat as externals not relative and not absolute paths +const external = id => !id.startsWith('.') && !id.startsWith('/'); + +const extensions = ['.ts', '.tsx']; +const input = './src/index.ts'; + +export default pkg => { + const projectDir = path.join(__filename, '..'); + console.info(`Building project esm ${projectDir}`); + const tsconfig = `${projectDir}/tsconfig.json`; + return { + input, + external, + output: { + file: pkg.module, + format: 'esm', + sourcemap: true, + }, + plugins: [ + nodeResolve({ extensions }), + typescriptPlugin({ typescript, tsconfig }), + ], + }; +}; diff --git a/config/rollup.config.js b/config/buildUmdConfig.js similarity index 60% rename from config/rollup.config.js rename to config/buildUmdConfig.js index b09c4e914e6..7ec2b8682d0 100644 --- a/config/rollup.config.js +++ b/config/buildUmdConfig.js @@ -1,5 +1,12 @@ -import node from 'rollup-plugin-node-resolve'; import sourcemaps from 'rollup-plugin-sourcemaps'; +import nodeResolve from 'rollup-plugin-node-resolve'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import commonjs from 'rollup-plugin-commonjs'; +import typescript from 'typescript'; +import path from 'path'; + +const extensions = ['.ts', '.tsx']; +const input = './src/index.ts'; export const globals = { // Apollo @@ -13,13 +20,25 @@ export const globals = { 'apollo-boost': 'apollo.boost', }; -export default (name, override = {}) => { +const commonjsOptions = { + include: 'node_modules/**', +}; + +export default (name, override = { output: { globals: {} } }) => { + const projectDir = path.join(__filename, '..'); + console.info(`Building project umd ${projectDir}`); + const tsconfig = `${projectDir}/tsconfig.json`; const config = Object.assign( { - input: 'lib/index.js', + input, //output: merged separately onwarn, - external: Object.keys(globals), + external: Object.keys({ ...globals, ...override.output.globals }), + plugins: [ + nodeResolve({ extensions }), + typescriptPlugin({ typescript, tsconfig }), + commonjs(commonjsOptions), + ], }, override, ); @@ -39,7 +58,7 @@ export default (name, override = {}) => { config.plugins = config.plugins || []; config.plugins.push( sourcemaps(), - node({ + nodeResolve({ // Inline anything imported from the tslib package, e.g. __extends // and __assign. This depends on the "importHelpers":true option in // tsconfig.base.json. @@ -47,6 +66,7 @@ export default (name, override = {}) => { only: ['tslib'], }), ); + return config; }; diff --git a/config/jest.config.settings.js b/config/jest.config.settings.js new file mode 100644 index 00000000000..93b3e51219d --- /dev/null +++ b/config/jest.config.settings.js @@ -0,0 +1,21 @@ +module.exports = { + transform: { + '.(ts|tsx)': 'ts-jest', + }, + + moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], + testURL: 'http://localhost', + + testMatch: ['/src/**/__tests__/*.ts'], + testPathIgnorePatterns: [ + '/node_modules/', + '/lib/', + '/lib/', + // '/../*/lib/', + ], + + // moduleNameMapper: { + // '(apollo-boost|apollo-cache-inmemory|apollo-cache|apollo-client|apollo-utilities|graphql-anywhere)(.*)': + // '/../$1/src/$2', + // }, +}; diff --git a/config/tsconfig.base.json b/config/tsconfig.base.json index 7662c0f0c7b..b0463b433b4 100644 --- a/config/tsconfig.base.json +++ b/config/tsconfig.base.json @@ -11,7 +11,7 @@ "declaration": true, "declarationMap": true, "target": "es5", - "module": "es2015", + "module": "commonjs", "esModuleInterop": true } } diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000000..977f709d842 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + rootDir: '.', + projects: ['/packages/*'], + + // moduleNameMapper: { + // '(apollo-boost|apollo-cache-inmemory|apollo-cache|apollo-client|apollo-utilities|graphql-anywhere)(.*)': + // '/packages/$1/src/$2', + // }, +}; diff --git a/package.json b/package.json index 2aaf7317c87..78f896387b3 100644 --- a/package.json +++ b/package.json @@ -23,45 +23,25 @@ "bundlesize": [ { "name": "apollo-cache", - "path": "./packages/apollo-cache/lib/bundle.min.js", + "path": "./packages/apollo-cache/lib/bundle.umd.min.js", "maxSize": "900 B" }, { "name": "apollo-cache-inmemory", - "path": "./packages/apollo-cache-inmemory/lib/bundle.min.js", + "path": "./packages/apollo-cache-inmemory/lib/bundle.umd.min.js", "maxSize": "6.2 kB" }, { "name": "apollo-client", - "path": "./packages/apollo-client/lib/bundle.min.js", + "path": "./packages/apollo-client/lib/bundle.umd.min.js", "maxSize": "13 kB" }, { "name": "apollo-utilities", - "path": "./packages/apollo-utilities/lib/bundle.min.js", + "path": "./packages/apollo-utilities/lib/bundle.umd.min.js", "maxSize": "4.75 kB" } ], - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "modulePathIgnorePatterns": [ - "/npm/" - ], - "testURL": "http://localhost", - "testPathIgnorePatterns": [ - "/npm/", - "/node_modules/" - ] - }, "lint-staged": { "*.ts*": [ "prettier --ignore-path \"./config/prettierignore\" --trailing-comma all --single-quote --write" @@ -109,17 +89,17 @@ "react": "16.7.0", "react-dom": "16.7.0", "rollup": "1.1.2", + "rollup-plugin-commonjs": "9.2.0", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", + "rollup-plugin-typescript2": "0.18.1", "rxjs": "6.4.0", - "ts-jest": "23.1.4", + "ts-jest": "23.10.5", "tslib": "^1.9.3", "tslint": "5.12.1", "typescript": "3.3.1", - "uglify-js": "3.4.9", - "webpack": "3.12.0", - "webpack-bundle-analyzer": "3.0.3" + "uglify-js": "3.4.9" }, "renovate": { "extends": [ diff --git a/packages/apollo-boost/jest.config.js b/packages/apollo-boost/jest.config.js new file mode 100644 index 00000000000..82849e9ef6d --- /dev/null +++ b/packages/apollo-boost/jest.config.js @@ -0,0 +1,5 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, +}; diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index a6a6e179712..7f3b2f7a218 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -9,9 +9,9 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/index.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { @@ -28,14 +28,16 @@ "coverage": "jest --coverage", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", - "build": "tsc -p .", + "build": "tsc -b .", "postbuild": "npm run bundle", "watch": "tsc -w -p .", "clean": "rm -rf coverage/* && rm -rf lib/*", "prepublishOnly": "npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify", - "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js && ../../node_modules/rollup/bin/rollup -c rollup-bundle.config.js" + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", + "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", + "postbundle": "npm run clean:tests" }, "dependencies": { "apollo-cache": "file:../apollo-cache", @@ -49,18 +51,5 @@ }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "testURL": "http://localhost" } } diff --git a/packages/apollo-boost/rollup-bundle.config.js b/packages/apollo-boost/rollup-bundle.config.js deleted file mode 100644 index f9e33f016e1..00000000000 --- a/packages/apollo-boost/rollup-bundle.config.js +++ /dev/null @@ -1,36 +0,0 @@ -import sourcemaps from 'rollup-plugin-sourcemaps'; -import resolve from 'rollup-plugin-node-resolve'; - -function onwarn(message) { - const suppressed = ['UNRESOLVED_IMPORT', 'THIS_IS_UNDEFINED']; - - if (!suppressed.find(code => message.code === code)) { - return console.warn(message.message); - } -} - -const globals = { - 'graphql-anywhere/lib/async': 'graphqlAnywhere.async', - 'graphql/language/printer': 'print', - 'symbol-observable': '$$observable', - 'zen-observable': 'zenObservable', - 'fast-json-stable-stringify': 'stringify', - 'graphql-tag': 'gql', - 'apollo-utilities': 'apolloUtilities', - optimism: 'optimism', -}; - -export default { - input: 'lib/index.js', - onwarn, - output: { - file: 'lib/bundle.umd.js', - format: 'umd', - sourcemap: true, - name: 'apollo.boost', - globals, - exports: 'named', - }, - external: Object.keys(globals), - plugins: [resolve(), sourcemaps()], -}; diff --git a/packages/apollo-boost/rollup.config.js b/packages/apollo-boost/rollup.config.js index 29445a404c3..dba2288919b 100644 --- a/packages/apollo-boost/rollup.config.js +++ b/packages/apollo-boost/rollup.config.js @@ -1,4 +1,6 @@ -import build from '../../config/rollup.config'; +import buildUmdConfig from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; const globals = { 'apollo-client': 'apollo.core', @@ -9,10 +11,12 @@ const globals = { 'graphql-tag': 'graphqlTag', }; -export default build('apollo.boost', { - external: Object.keys(global), - output: { - file: 'lib/index.umd.js', - globals, - }, -}); +export default [ + buildUmdConfig('apollo.boost', { + external: Object.keys(globals), + output: { + globals, + }, + }), + buildEsmConfig(pkg), +]; diff --git a/packages/apollo-cache-inmemory/jest.config.js b/packages/apollo-cache-inmemory/jest.config.js new file mode 100644 index 00000000000..82849e9ef6d --- /dev/null +++ b/packages/apollo-cache-inmemory/jest.config.js @@ -0,0 +1,5 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, +}; diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 1f1ed1ab563..27db260a9a0 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -11,9 +11,9 @@ "Bazyli Brzóska " ], "license": "MIT", - "main": "./lib/bundle.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": [ "./lib/fixPolyfills.js" @@ -32,13 +32,15 @@ "test": "jest", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", - "build": "tsc -p .", + "build": "tsc -b .", "postbuild": "npm run bundle", + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", + "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", "clean": "rm -rf coverage/* && rm -rf lib/*", "prepublishOnly": "npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify" }, "dependencies": { @@ -49,18 +51,5 @@ }, "peerDependencies": { "graphql": "0.11.7 || ^0.12.0 || ^0.13.0 || ^14.0.0" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "testURL": "http://localhost" } } diff --git a/packages/apollo-cache-inmemory/rollup.config.js b/packages/apollo-cache-inmemory/rollup.config.js index 551b6fa7d18..216a3e587ef 100644 --- a/packages/apollo-cache-inmemory/rollup.config.js +++ b/packages/apollo-cache-inmemory/rollup.config.js @@ -1,4 +1,6 @@ -import build, { globals } from '../../config/rollup.config'; +import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; const globalsOverride = { ...globals, @@ -7,8 +9,11 @@ const globalsOverride = { 'graphql/language/visitor': 'visitor', }; -export default build('apollo.cache.inmemory', { - output: { - globals: globalsOverride, - }, -}); +export default [ + buildUmdConfig('apollo.cache.inmemory', { + output: { + globals: globalsOverride, + }, + }), + buildEsmConfig(pkg), +]; diff --git a/packages/apollo-cache/jest.config.js b/packages/apollo-cache/jest.config.js new file mode 100644 index 00000000000..82849e9ef6d --- /dev/null +++ b/packages/apollo-cache/jest.config.js @@ -0,0 +1,5 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, +}; diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 774e4c0bb3f..f7ba9a2af57 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -10,9 +10,9 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/bundle.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { @@ -29,30 +29,19 @@ "test": "jest", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts && tslint -c \"../../config/tslint.json\" -p tsconfig.json tests/*.ts", "prebuild": "npm run clean", - "build": "tsc -p .", + "build": "tsc -b .", "postbuild": "npm run bundle", + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", + "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", "clean": "rm -rf coverage/* && rm -rf lib/*", "prepublishOnly": "npm run clean && npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify" }, "dependencies": { "apollo-utilities": "file:../apollo-utilities", "tslib": "^1.9.3" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "testURL": "http://localhost" } } diff --git a/packages/apollo-cache/rollup.config.js b/packages/apollo-cache/rollup.config.js index fdde2e65749..ddf1d71b3fd 100644 --- a/packages/apollo-cache/rollup.config.js +++ b/packages/apollo-cache/rollup.config.js @@ -1,7 +1,5 @@ -import resolve from 'rollup-plugin-node-resolve'; +import buildUmdConfig from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; -import build from '../../config/rollup.config'; - -export default build('apollo.cache.core', { - plugins: [resolve()], -}); +export default [buildUmdConfig('apollo.cache.core'), buildEsmConfig(pkg)]; diff --git a/packages/apollo-client/.babelrc b/packages/apollo-client/.babelrc deleted file mode 100644 index 71c8a7f4b05..00000000000 --- a/packages/apollo-client/.babelrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "plugins": [ - "transform-es2015-modules-commonjs" - ], - "ignore": [ - "lib/**/*.d.ts", - "lib/bundles/**", - "node_modules/**" - ] -} diff --git a/packages/apollo-client/jest.config.js b/packages/apollo-client/jest.config.js new file mode 100644 index 00000000000..5abf56021f6 --- /dev/null +++ b/packages/apollo-client/jest.config.js @@ -0,0 +1,7 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, + // must be inside the src dir + setupFiles: ['/src/config/jest/setup.ts'], +}; diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index cb42312472d..14cf47245e7 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -3,9 +3,9 @@ "private": true, "version": "2.5.0-beta.0", "description": "A simple yet functional GraphQL client.", - "main": "./lib/bundle.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "scripts": { @@ -13,17 +13,20 @@ "coverage": "jest --coverage", "dev": "./scripts/dev.sh", "deploy": "./scripts/deploy.sh", - "test": "tsc -p tsconfig.test.json --noEmit && jest", + "test": "jest", "benchmark": "npm run build:benchmark && node benchmark_lib/benchmark/index.js", "benchmark:inspect": "npm run build:benchmark && node --inspect --debug-brk benchmark_lib/benchmark/index.js", "filesize": "npm run minify", "type-check": "flow check", - "build": "tsc", + "prebuild": "npm run clean", + "build": "tsc -b .", + "postbuild": "npm run bundle", "build:benchmark": "tsc -p tsconfig.benchmark.json", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "watch": "tsc -w", + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbuild": "npm run bundle", + "postbundle": "npm run clean:tests", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "testonly": "jest", "preanalyze": "npm run build", @@ -56,23 +59,11 @@ "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, + "devDependencies": { + "webpack": "3.12.0", + "webpack-bundle-analyzer": "3.0.3" + }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "setupFiles": [ - "/scripts/tests.js" - ], - "testURL": "http://localhost" } } diff --git a/packages/apollo-client/rollup.config.js b/packages/apollo-client/rollup.config.js index adaf06f3a37..ddfdc7e4871 100644 --- a/packages/apollo-client/rollup.config.js +++ b/packages/apollo-client/rollup.config.js @@ -1,12 +1,17 @@ -import build, { globals } from '../../config/rollup.config'; +import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; const globalsOverride = { ...globals, 'symbol-observable': '$$observable', }; -export default build('apollo.core', { - output: { - globals: globalsOverride, - }, -}); +export default [ + buildUmdConfig('apollo.core', { + output: { + globals: globalsOverride, + }, + }), + buildEsmConfig(pkg), +]; diff --git a/packages/apollo-client/scripts/deploy.sh b/packages/apollo-client/scripts/deploy.sh index 51632417e26..49d778ca9af 100755 --- a/packages/apollo-client/scripts/deploy.sh +++ b/packages/apollo-client/scripts/deploy.sh @@ -46,8 +46,7 @@ node -e "\ delete package.scripts; \ delete package.options; \ package.main = 'bundle.umd.js'; \ - package.module = 'index.js'; \ - package['jsnext:main'] = 'index.js'; \ + package.module = 'bundle.esm.js'; \ package.typings = 'index.d.ts'; \ package.dependencies['apollo-cache'] = apolloCacheVersion; \ package.dependencies['apollo-utilities'] = apolloUtilitiesVersion; \ diff --git a/packages/apollo-client/scripts/tests.js b/packages/apollo-client/src/config/jest/setup.ts similarity index 67% rename from packages/apollo-client/scripts/tests.js rename to packages/apollo-client/src/config/jest/setup.ts index 1cf3cd870d5..c4c52ea821c 100644 --- a/packages/apollo-client/scripts/tests.js +++ b/packages/apollo-client/src/config/jest/setup.ts @@ -1,6 +1,6 @@ -process.on('unhandledRejection', () => {}); - -const { disableFragmentWarnings } = require('graphql-tag'); +import { disableFragmentWarnings } from 'graphql-tag'; // Turn off warnings for repeated fragment names disableFragmentWarnings(); + +process.on('unhandledRejection', () => {}); diff --git a/packages/apollo-utilities/jest.config.js b/packages/apollo-utilities/jest.config.js new file mode 100644 index 00000000000..82849e9ef6d --- /dev/null +++ b/packages/apollo-utilities/jest.config.js @@ -0,0 +1,5 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, +}; diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 1e98b0b33f2..6fb3583f9ed 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -10,9 +10,9 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/bundle.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { @@ -29,13 +29,15 @@ "coverage": "jest --coverage", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", - "build": "tsc -p .", + "build": "tsc -b .", "postbuild": "npm run bundle", + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", + "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", "clean": "rm -rf coverage/* && rm -rf lib/*", "prepublishOnly": "npm run clean && npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify" }, "peerDependencies": { @@ -44,18 +46,5 @@ "dependencies": { "fast-json-stable-stringify": "^2.0.0", "tslib": "^1.9.3" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "testURL": "http://localhost" } } diff --git a/packages/apollo-utilities/rollup.config.js b/packages/apollo-utilities/rollup.config.js index 5e75f8f9e74..a5bf715102b 100644 --- a/packages/apollo-utilities/rollup.config.js +++ b/packages/apollo-utilities/rollup.config.js @@ -1,12 +1,17 @@ -import build, { globals } from '../../config/rollup.config'; +import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; const globalsOverride = { ...globals, 'fast-json-stable-stringify': 'stringify', }; -export default build('apollo.utilities', { - output: { - globals: globalsOverride, - }, -}); +export default [ + buildUmdConfig('apollo.utilities', { + output: { + globals: globalsOverride, + }, + }), + buildEsmConfig(pkg), +]; diff --git a/packages/graphql-anywhere/.travis.yml b/packages/graphql-anywhere/.travis.yml deleted file mode 100644 index a617888611f..00000000000 --- a/packages/graphql-anywhere/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js - -node_js: - - "6" - - "4" - -# Allow Travis tests to run in containers. -sudo: false diff --git a/packages/graphql-anywhere/Gruntfile.js b/packages/graphql-anywhere/Gruntfile.js deleted file mode 100644 index 8ff077940c6..00000000000 --- a/packages/graphql-anywhere/Gruntfile.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -module.exports = function(grunt) { - grunt.initConfig({ - tslint: { - options: { - // can be a configuration object or a filepath to tslint.json - configuration: grunt.file.readJSON('tslint.json'), - }, - files: { - src: ['src/**/*.ts', 'test/**/*.ts', '!test/fixtures/**/*.ts'], - }, - }, - }); - - grunt.loadNpmTasks('grunt-tslint'); -}; diff --git a/packages/graphql-anywhere/jest.config.js b/packages/graphql-anywhere/jest.config.js new file mode 100644 index 00000000000..82849e9ef6d --- /dev/null +++ b/packages/graphql-anywhere/jest.config.js @@ -0,0 +1,5 @@ +const pkg = require('../../config/jest.config.settings'); + +module.exports = { + ...pkg, +}; diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 4a7f15c8ed2..44e83c7d974 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -2,24 +2,26 @@ "name": "graphql-anywhere", "version": "4.2.0-beta.0", "description": "Run GraphQL queries with no schema and just one resolver", - "main": "./lib/bundle.umd.js", - "module": "./lib/index.js", - "jsnext:main": "./lib/index.js", + "main": "./lib/index.js", + "module": "./lib/bundle.esm.js", + "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "scripts": { "prepare": "npm run lint && npm run build", "coverage": "jest --coverage", "test": "jest", - "build": "tsc", + "build": "tsc -b .", "postbuild": "npm run bundle", - "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js && ../../node_modules/rollup/bin/rollup -c rollup.async.config.js && cp ./lib/graphql-async.d.ts ./lib/async.d.ts", + "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", + "postbundle": "npm run clean:tests", "watch": "tsc -w", "prepublishOnly": "npm run build", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.umd.js", + "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "filesize": "npm run minify", - "clean": "rm -rf coverage/* && rm -rf lib/*" + "clean": "rm -rf coverage/* && rm -rf lib/*", + "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +" }, "repository": { "type": "git", @@ -42,18 +44,5 @@ "dependencies": { "apollo-utilities": "file:../apollo-utilities", "tslib": "^1.9.3" - }, - "jest": { - "transform": { - ".(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "json" - ], - "testURL": "http://localhost" } } diff --git a/packages/graphql-anywhere/rollup.async.config.js b/packages/graphql-anywhere/rollup.async.config.js deleted file mode 100644 index 3663810ec9f..00000000000 --- a/packages/graphql-anywhere/rollup.async.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import build from '../../config/rollup.config'; - -export default build('graphqlAnywhereAsync', { - input: 'lib/graphql-async.js', - output: { - file: 'lib/async.js', - format: 'umd', - }, -}); diff --git a/packages/graphql-anywhere/rollup.config.js b/packages/graphql-anywhere/rollup.config.js index 7861554f99b..3b14d1aff24 100644 --- a/packages/graphql-anywhere/rollup.config.js +++ b/packages/graphql-anywhere/rollup.config.js @@ -1,3 +1,14 @@ -import build from '../../config/rollup.config'; +import buildUmdConfig from '../../config/buildUmdConfig'; +import buildEsmConfig from '../../config/buildEsmConfig'; +import pkg from './package.json'; -export default build('graphqlAnywhere'); +export default [ + buildUmdConfig('graphqlAnywhere'), + buildUmdConfig('graphqlAnywhereAsync', { + input: 'lib/graphql-async.js', + output: { + file: 'lib/async.js', + }, + }), + buildEsmConfig(pkg), +]; diff --git a/tsconfig.json b/tsconfig.json index 4941dcf9e4f..f7275428011 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,11 @@ { "extends": "./config/tsconfig.base.json", - "compilerOptions": { - "noLib": true - } + "references": [ + { "path": "packages/apollo-boost" }, + { "path": "packages/apollo-cache" }, + { "path": "packages/apollo-cache-inmemory" }, + { "path": "packages/apollo-client" }, + { "path": "packages/apollo-utilities" }, + { "path": "packages/graphql-anywhere" } + ] } From 869e8592a91279348154456eb1840fe1e3003b00 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 16:26:01 -0500 Subject: [PATCH 038/230] Update package-lock.json. --- package-lock.json | 2399 +++------------------------------------------ 1 file changed, 163 insertions(+), 2236 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04cefc6b5a5..dfd3c9334c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1456,39 +1456,12 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, "acorn": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, "acorn-globals": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", @@ -1543,23 +1516,6 @@ "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -2085,12 +2041,6 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -2139,43 +2089,6 @@ "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -2203,12 +2116,6 @@ "lodash": "^4.17.10" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -2588,12 +2495,6 @@ } } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -2619,24 +2520,6 @@ "platform": "^1.3.3" } }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "bin-links": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", @@ -2650,12 +2533,6 @@ "write-file-atomic": "^2.3.0" } }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -2681,50 +2558,6 @@ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2746,12 +2579,6 @@ "repeat-element": "^1.1.2" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, "brotli-size": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.1.tgz", @@ -2777,75 +2604,13 @@ "resolve": "1.1.7" } }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "requires": { - "pako": "~1.0.5" + "fast-json-stable-stringify": "2.x" } }, "bser": { @@ -2863,17 +2628,6 @@ "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -2908,24 +2662,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, "builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", @@ -3118,16 +2860,6 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", @@ -3156,116 +2888,6 @@ "shell-tag": "~1.0.1" } }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - }, - "dependencies": { - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, "chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", @@ -3284,16 +2906,6 @@ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3392,12 +3004,6 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "closest-file-data": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/closest-file-data/-/closest-file-data-0.1.4.tgz", - "integrity": "sha1-l1+HwTLymdJKA3W59jyj+4j3Kzo=", - "dev": true - }, "cmd-shim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", @@ -3538,39 +3144,12 @@ "proto-list": "~1.2.1" } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, "conventional-changelog-angular": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", @@ -3676,18 +3255,6 @@ "safe-buffer": "~5.1.1" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -3732,43 +3299,6 @@ "parse-json": "^4.0.0" } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3782,25 +3312,6 @@ "which": "^1.2.9" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "cssom": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", @@ -3837,15 +3348,6 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, "danger": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.7.tgz", @@ -3992,12 +3494,6 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -4216,28 +3712,6 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -4275,17 +3749,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", @@ -4296,12 +3759,6 @@ "path-type": "^3.0.0" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -4370,51 +3827,12 @@ "safe-buffer": "^5.0.1" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true - }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", @@ -4433,33 +3851,12 @@ "once": "^1.4.0" } }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" - } - }, "err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4494,42 +3891,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.47", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", - "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, "es6-promise": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", @@ -4545,47 +3906,6 @@ "es6-promise": "^4.0.3" } }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -4620,33 +3940,12 @@ } } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", @@ -4665,38 +3964,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "exec-sh": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", @@ -4774,61 +4041,6 @@ "jest-regex-util": "^23.3.0" } }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5289,12 +4501,6 @@ "minimatch": "^3.0.3" } }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, "fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", @@ -5319,32 +4525,6 @@ } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "find-npm-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", @@ -5442,12 +4622,6 @@ "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -5457,12 +4631,6 @@ "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -6696,37 +5864,6 @@ } } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -6746,12 +5883,6 @@ "parse-passwd": "^1.0.0" } }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -6773,18 +5904,6 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, "http-proxy-agent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", @@ -6806,12 +5925,6 @@ "sshpk": "^1.7.0" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, "https-proxy-agent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", @@ -6846,12 +5959,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", @@ -6922,12 +6029,6 @@ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -7077,12 +6178,6 @@ "integrity": "sha512-vtI2YXBRZBkU6DlfHfd0GtZENfiEiTacAXUd0ZY6HA+X7aPznpFfPmzSC+tHKXAkz9KDSdI4AYfwAMXR5t+isg==", "dev": true }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7104,12 +6199,6 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -7125,15 +6214,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -8107,12 +7187,6 @@ } } }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -8248,12 +7322,6 @@ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", "dev": true }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -9190,40 +8258,6 @@ "strip-bom": "^3.0.0" } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -9262,12 +8296,6 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, "lodash.find": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", @@ -9446,12 +8474,6 @@ } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -9487,8 +8509,17 @@ "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", "dev": true }, - "make-dir": { - "version": "1.3.0", + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "make-dir": { + "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, @@ -9496,6 +8527,12 @@ "pify": "^3.0.0" } }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, "make-fetch-happen": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", @@ -9569,23 +8606,6 @@ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -9601,16 +8621,6 @@ "integrity": "sha512-D2JKK2DTuVYQqquBWco3K6UfSVyVwmd58dgNqh+TgxHOZdTmR8I130gjMbVCkemDl/EzqDA62417cJxKL3/FFA==", "dev": true }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "meow": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", @@ -9642,12 +8652,6 @@ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -9663,12 +8667,6 @@ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -9690,22 +8688,6 @@ "regex-cache": "^0.4.2" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, "mime-db": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", @@ -9733,18 +8715,6 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -9977,24 +8947,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -10067,45 +9019,6 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "node-notifier": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", @@ -10385,15 +9298,6 @@ "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10412,12 +9316,6 @@ "mimic-fn": "^1.0.0" } }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, "optimism": { "version": "0.6.9", "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.6.9.tgz", @@ -10458,12 +9356,6 @@ } } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -10717,12 +9609,6 @@ } } }, - "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", - "dev": true - }, "parallel-transform": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", @@ -10734,20 +9620,6 @@ "readable-stream": "^2.1.5" } }, - "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-diff": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/parse-diff/-/parse-diff-0.5.1.tgz", @@ -10820,24 +9692,12 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -10889,19 +9749,6 @@ "pify": "^3.0.0" } }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -11092,12 +9939,6 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -11170,22 +10011,6 @@ "genfun": "^5.0.0" } }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -11198,20 +10023,6 @@ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -11251,18 +10062,6 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -11294,54 +10093,6 @@ } } }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -11478,384 +10229,73 @@ "once": "^1.3.0" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "readline-sync": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz", + "integrity": "sha1-PtqOZfI80qF+YTAbHwADOWr17No=", + "dev": true + }, + "realpath-native": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", + "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "util.promisify": "^1.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "readline-sync": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz", - "integrity": "sha1-PtqOZfI80qF+YTAbHwADOWr17No=", - "dev": true - }, - "realpath-native": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", - "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -12008,15 +10448,6 @@ "integrity": "sha512-a4t5OlaOgAejBg48/lkyQMcV6EWpljjSjmXAtSXLhw83x1OhlcVGLMLf//GoUSpHsWt8x/7oxaf5FEGM9QH/iQ==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -12026,16 +10457,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "rollup": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.1.2.tgz", @@ -12055,6 +10476,29 @@ } } }, + "rollup-plugin-commonjs": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", + "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "magic-string": "^0.25.1", + "resolve": "^1.8.1", + "rollup-pluginutils": "^2.3.3" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, "rollup-plugin-local-resolve": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/rollup-plugin-local-resolve/-/rollup-plugin-local-resolve-1.0.7.tgz", @@ -12099,6 +10543,40 @@ "source-map-resolve": "^0.5.0" } }, + "rollup-plugin-typescript2": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.18.1.tgz", + "integrity": "sha512-aR2m5NCCAUV/KpcKgCWX6Giy8rTko9z92b5t0NX9eZyjOftCvcdDFa1C9Ze/9yp590hnRymr5hG0O9SAXi1oUg==", + "dev": true, + "requires": { + "fs-extra": "7.0.0", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, "rollup-pluginutils": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", @@ -12514,50 +10992,6 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -12576,28 +11010,6 @@ "split-string": "^3.0.1" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -12838,12 +11250,6 @@ "is-plain-obj": "^1.0.0" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -12878,6 +11284,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", + "dev": true + }, "spawn-sync": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", @@ -13033,28 +11445,12 @@ } } }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", @@ -13065,19 +11461,6 @@ "stream-shift": "^1.0.0" } }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", @@ -13261,12 +11644,6 @@ "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==", "dev": true }, - "tapable": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", - "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", - "dev": true - }, "tar": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", @@ -13468,15 +11845,6 @@ "xtend": "~4.0.1" } }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13492,12 +11860,6 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", @@ -13624,40 +11986,31 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, "ts-jest": { - "version": "23.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.1.4.tgz", - "integrity": "sha512-9rCSxbWfoZxxeXnSoEIzRNr9hDIQ8iEJAWmSRsWhDHDT8OeuGfURhJQUE8jtJlkyEygs6rngH8RYtHz9cfjmEA==", - "dev": true, - "requires": { - "closest-file-data": "^0.1.4", - "fs-extra": "6.0.1", - "json5": "^0.5.0", - "lodash": "^4.17.10" + "version": "23.10.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.10.5.tgz", + "integrity": "sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" }, "dependencies": { - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "requires": { + "camelcase": "^4.1.0" + } } } }, @@ -13732,12 +12085,6 @@ "tslib": "^1.8.1" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -13762,16 +12109,6 @@ "prelude-ls": "~1.1.2" } }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -13808,72 +12145,6 @@ } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, "uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", @@ -13945,12 +12216,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -13991,12 +12256,6 @@ } } }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -14012,24 +12271,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -14048,15 +12289,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14073,12 +12305,6 @@ "object.getownpropertydescriptors": "^2.0.3" } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -14104,12 +12330,6 @@ "builtins": "^1.0.3" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -14121,15 +12341,6 @@ "extsprintf": "^1.2.0" } }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, "vm2": { "version": "3.6.10", "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.6.10.tgz", @@ -14172,17 +12383,6 @@ } } }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14198,273 +12398,6 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true }, - "webpack": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", - "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", - "dev": true, - "requires": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^2.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "async": "^2.1.2", - "enhanced-resolve": "^3.4.0", - "escope": "^3.6.0", - "interpret": "^1.0.0", - "json-loader": "^0.5.4", - "json5": "^0.5.1", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "mkdirp": "~0.5.0", - "node-libs-browser": "^2.0.0", - "source-map": "^0.5.3", - "supports-color": "^4.2.1", - "tapable": "^0.2.7", - "uglifyjs-webpack-plugin": "^0.4.6", - "watchpack": "^1.4.0", - "webpack-sources": "^1.0.1", - "yargs": "^8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", - "dev": true, - "requires": { - "acorn": "^5.7.3", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -14527,12 +12460,6 @@ "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, "windows-release": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", From 074835ced3e981fd4cb69b709b91f7fe0defa3a2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 19:03:28 -0500 Subject: [PATCH 039/230] Remove "browser" field from package.json files. --- packages/apollo-boost/package.json | 1 - packages/apollo-cache-inmemory/package.json | 1 - packages/apollo-cache/package.json | 1 - packages/apollo-client/package.json | 1 - packages/apollo-utilities/package.json | 1 - packages/graphql-anywhere/package.json | 1 - 6 files changed, 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 7f3b2f7a218..16372a8d540 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -11,7 +11,6 @@ "license": "MIT", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 27db260a9a0..e9ed596a57a 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -13,7 +13,6 @@ "license": "MIT", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": [ "./lib/fixPolyfills.js" diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index f7ba9a2af57..9220600801a 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -12,7 +12,6 @@ "license": "MIT", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 14cf47245e7..4acbce7290f 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -5,7 +5,6 @@ "description": "A simple yet functional GraphQL client.", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "scripts": { diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 6fb3583f9ed..2e7d1522a08 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -12,7 +12,6 @@ "license": "MIT", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "repository": { diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 44e83c7d974..8c3ec4a03a7 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -4,7 +4,6 @@ "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/index.js", "module": "./lib/bundle.esm.js", - "browser": "./lib/bundle.umd.js", "typings": "./lib/index.d.ts", "sideEffects": false, "scripts": { From 4ae47c452eb919d2cbe353a0094a58eb1ac443e2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 19:03:55 -0500 Subject: [PATCH 040/230] Inline tslib helpers in ESM bundle, again. --- config/buildEsmConfig.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/config/buildEsmConfig.js b/config/buildEsmConfig.js index 9e625c7e3be..f0fcc89daab 100644 --- a/config/buildEsmConfig.js +++ b/config/buildEsmConfig.js @@ -6,15 +6,12 @@ import path from 'path'; // treat as externals not relative and not absolute paths const external = id => !id.startsWith('.') && !id.startsWith('/'); -const extensions = ['.ts', '.tsx']; -const input = './src/index.ts'; - export default pkg => { const projectDir = path.join(__filename, '..'); console.info(`Building project esm ${projectDir}`); const tsconfig = `${projectDir}/tsconfig.json`; return { - input, + input: './src/index.ts', external, output: { file: pkg.module, @@ -22,7 +19,14 @@ export default pkg => { sourcemap: true, }, plugins: [ - nodeResolve({ extensions }), + nodeResolve({ + extensions: ['.ts', '.tsx'], + // Inline anything imported from the tslib package, e.g. __extends + // and __assign. This depends on the "importHelpers":true option in + // tsconfig.base.json. + module: true, + only: ['tslib'], + }), typescriptPlugin({ typescript, tsconfig }), ], }; From 526231fb55db32acfd0a084e22ed2089d9a46c46 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 19:27:18 -0500 Subject: [PATCH 041/230] Build CJS and UMD bundles from the ESM bundle. --- config/buildEsmConfig.js | 33 ------- config/buildUmdConfig.js | 79 ----------------- config/rollup.config.js | 88 +++++++++++++++++++ packages/apollo-boost/rollup.config.js | 32 +++---- .../apollo-cache-inmemory/rollup.config.js | 27 ++---- packages/apollo-cache/rollup.config.js | 8 +- packages/apollo-client/rollup.config.js | 23 ++--- packages/apollo-utilities/rollup.config.js | 23 ++--- packages/graphql-anywhere/rollup.config.js | 16 ++-- 9 files changed, 132 insertions(+), 197 deletions(-) delete mode 100644 config/buildEsmConfig.js delete mode 100644 config/buildUmdConfig.js create mode 100644 config/rollup.config.js diff --git a/config/buildEsmConfig.js b/config/buildEsmConfig.js deleted file mode 100644 index f0fcc89daab..00000000000 --- a/config/buildEsmConfig.js +++ /dev/null @@ -1,33 +0,0 @@ -import nodeResolve from 'rollup-plugin-node-resolve'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import typescript from 'typescript'; -import path from 'path'; - -// treat as externals not relative and not absolute paths -const external = id => !id.startsWith('.') && !id.startsWith('/'); - -export default pkg => { - const projectDir = path.join(__filename, '..'); - console.info(`Building project esm ${projectDir}`); - const tsconfig = `${projectDir}/tsconfig.json`; - return { - input: './src/index.ts', - external, - output: { - file: pkg.module, - format: 'esm', - sourcemap: true, - }, - plugins: [ - nodeResolve({ - extensions: ['.ts', '.tsx'], - // Inline anything imported from the tslib package, e.g. __extends - // and __assign. This depends on the "importHelpers":true option in - // tsconfig.base.json. - module: true, - only: ['tslib'], - }), - typescriptPlugin({ typescript, tsconfig }), - ], - }; -}; diff --git a/config/buildUmdConfig.js b/config/buildUmdConfig.js deleted file mode 100644 index 7ec2b8682d0..00000000000 --- a/config/buildUmdConfig.js +++ /dev/null @@ -1,79 +0,0 @@ -import sourcemaps from 'rollup-plugin-sourcemaps'; -import nodeResolve from 'rollup-plugin-node-resolve'; -import typescriptPlugin from 'rollup-plugin-typescript2'; -import commonjs from 'rollup-plugin-commonjs'; -import typescript from 'typescript'; -import path from 'path'; - -const extensions = ['.ts', '.tsx']; -const input = './src/index.ts'; - -export const globals = { - // Apollo - 'apollo-client': 'apollo.core', - 'apollo-cache': 'apolloCache.core', - 'apollo-link': 'apolloLink.core', - 'apollo-link-dedup': 'apolloLink.dedup', - 'apollo-utilities': 'apollo.utilities', - 'graphql-anywhere': 'graphqlAnywhere', - 'graphql-anywhere/lib/async': 'graphqlAnywhere.async', - 'apollo-boost': 'apollo.boost', -}; - -const commonjsOptions = { - include: 'node_modules/**', -}; - -export default (name, override = { output: { globals: {} } }) => { - const projectDir = path.join(__filename, '..'); - console.info(`Building project umd ${projectDir}`); - const tsconfig = `${projectDir}/tsconfig.json`; - const config = Object.assign( - { - input, - //output: merged separately - onwarn, - external: Object.keys({ ...globals, ...override.output.globals }), - plugins: [ - nodeResolve({ extensions }), - typescriptPlugin({ typescript, tsconfig }), - commonjs(commonjsOptions), - ], - }, - override, - ); - - config.output = Object.assign( - { - file: 'lib/bundle.umd.js', - format: 'umd', - name, - exports: 'named', - sourcemap: true, - globals, - }, - config.output, - ); - - config.plugins = config.plugins || []; - config.plugins.push( - sourcemaps(), - nodeResolve({ - // Inline anything imported from the tslib package, e.g. __extends - // and __assign. This depends on the "importHelpers":true option in - // tsconfig.base.json. - module: true, - only: ['tslib'], - }), - ); - - return config; -}; - -function onwarn(message) { - const suppressed = ['UNRESOLVED_IMPORT', 'THIS_IS_UNDEFINED']; - - if (!suppressed.find(code => message.code === code)) { - return console.warn(message.message); - } -} diff --git a/config/rollup.config.js b/config/rollup.config.js new file mode 100644 index 00000000000..099a63a5be9 --- /dev/null +++ b/config/rollup.config.js @@ -0,0 +1,88 @@ +import nodeResolve from 'rollup-plugin-node-resolve'; +import typescriptPlugin from 'rollup-plugin-typescript2'; +import typescript from 'typescript'; +import path from 'path'; + +function onwarn(message) { + const suppressed = ['UNRESOLVED_IMPORT', 'THIS_IS_UNDEFINED']; + + if (!suppressed.find(code => message.code === code)) { + return console.warn(message.message); + } +} + +const defaultGlobals = { + 'apollo-client': 'apollo.core', + 'apollo-cache': 'apolloCache.core', + 'apollo-link': 'apolloLink.core', + 'apollo-link-dedup': 'apolloLink.dedup', + 'apollo-utilities': 'apollo.utilities', + 'graphql-anywhere': 'graphqlAnywhere', + 'graphql-anywhere/lib/async': 'graphqlAnywhere.async', + 'apollo-boost': 'apollo.boost', +}; + +export function rollup({ + name, + input = './src/index.ts', + outputPrefix = 'bundle', + extraGlobals = {}, +}) { + const projectDir = path.join(__filename, '..'); + console.info(`Building project esm ${projectDir}`); + const tsconfig = `${projectDir}/tsconfig.json`; + + const globals = { + ...defaultGlobals, + ...extraGlobals, + }; + + function external(id) { + return Object.prototype.hasOwnProperty.call(globals, id); + } + + function outputFile(format) { + return './lib/' + outputPrefix + '.' + format + '.js'; + } + + function convert(format) { + return { + input: outputFile('esm'), + external, + output: { + file: outputFile(format), + format, + sourcemap: true, + name, + globals, + }, + onwarn, + }; + } + + return [ + { + input, + external, + output: { + file: outputFile('esm'), + format: 'esm', + sourcemap: true, + }, + plugins: [ + nodeResolve({ + extensions: ['.ts', '.tsx'], + // Inline anything imported from the tslib package, e.g. __extends + // and __assign. This depends on the "importHelpers":true option in + // tsconfig.base.json. + module: true, + only: ['tslib'], + }), + typescriptPlugin({ typescript, tsconfig }), + ], + onwarn, + }, + convert('cjs'), + convert('umd'), + ]; +} diff --git a/packages/apollo-boost/rollup.config.js b/packages/apollo-boost/rollup.config.js index dba2288919b..be65a0f4ad0 100644 --- a/packages/apollo-boost/rollup.config.js +++ b/packages/apollo-boost/rollup.config.js @@ -1,22 +1,12 @@ -import buildUmdConfig from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; -const globals = { - 'apollo-client': 'apollo.core', - 'apollo-cache-inmemory': 'apolloCacheInMemory', - 'apollo-link': 'apolloLink.core', - 'apollo-link-http': 'apolloLinkHttp', - 'apollo-link-error': 'apolloLinkError', - 'graphql-tag': 'graphqlTag', -}; - -export default [ - buildUmdConfig('apollo.boost', { - external: Object.keys(globals), - output: { - globals, - }, - }), - buildEsmConfig(pkg), -]; +export default rollup({ + name: 'apollo-boost', + extraGlobals: { + 'apollo-cache-inmemory': 'apolloCacheInMemory', + 'apollo-link': 'apolloLink.core', + 'apollo-link-http': 'apolloLinkHttp', + 'apollo-link-error': 'apolloLinkError', + 'graphql-tag': 'graphqlTag', + }, +}); diff --git a/packages/apollo-cache-inmemory/rollup.config.js b/packages/apollo-cache-inmemory/rollup.config.js index 216a3e587ef..4be33527cbe 100644 --- a/packages/apollo-cache-inmemory/rollup.config.js +++ b/packages/apollo-cache-inmemory/rollup.config.js @@ -1,19 +1,10 @@ -import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; -const globalsOverride = { - ...globals, - 'graphql/language/printer': 'print', - optimism: 'optimism', - 'graphql/language/visitor': 'visitor', -}; - -export default [ - buildUmdConfig('apollo.cache.inmemory', { - output: { - globals: globalsOverride, - }, - }), - buildEsmConfig(pkg), -]; +export default rollup({ + name: 'apollo-cache-inmemory', + extraGlobals: { + 'graphql/language/printer': 'print', + optimism: 'optimism', + 'graphql/language/visitor': 'visitor', + }, +}); diff --git a/packages/apollo-cache/rollup.config.js b/packages/apollo-cache/rollup.config.js index ddf1d71b3fd..df20d06bfd5 100644 --- a/packages/apollo-cache/rollup.config.js +++ b/packages/apollo-cache/rollup.config.js @@ -1,5 +1,5 @@ -import buildUmdConfig from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; -export default [buildUmdConfig('apollo.cache.core'), buildEsmConfig(pkg)]; +export default rollup({ + name: 'apollo-cache', +}); diff --git a/packages/apollo-client/rollup.config.js b/packages/apollo-client/rollup.config.js index ddfdc7e4871..a55db801d3e 100644 --- a/packages/apollo-client/rollup.config.js +++ b/packages/apollo-client/rollup.config.js @@ -1,17 +1,8 @@ -import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; -const globalsOverride = { - ...globals, - 'symbol-observable': '$$observable', -}; - -export default [ - buildUmdConfig('apollo.core', { - output: { - globals: globalsOverride, - }, - }), - buildEsmConfig(pkg), -]; +export default rollup({ + name: 'apollo-client', + extraGlobals: { + 'symbol-observable': '$$observable', + }, +}); diff --git a/packages/apollo-utilities/rollup.config.js b/packages/apollo-utilities/rollup.config.js index a5bf715102b..1314466bcc8 100644 --- a/packages/apollo-utilities/rollup.config.js +++ b/packages/apollo-utilities/rollup.config.js @@ -1,17 +1,8 @@ -import buildUmdConfig, { globals } from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; -const globalsOverride = { - ...globals, - 'fast-json-stable-stringify': 'stringify', -}; - -export default [ - buildUmdConfig('apollo.utilities', { - output: { - globals: globalsOverride, - }, - }), - buildEsmConfig(pkg), -]; +export default rollup({ + name: 'apollo-utilities', + extraGlobals: { + 'fast-json-stable-stringify': 'stringify', + }, +}); diff --git a/packages/graphql-anywhere/rollup.config.js b/packages/graphql-anywhere/rollup.config.js index 3b14d1aff24..3f46b907150 100644 --- a/packages/graphql-anywhere/rollup.config.js +++ b/packages/graphql-anywhere/rollup.config.js @@ -1,14 +1,10 @@ -import buildUmdConfig from '../../config/buildUmdConfig'; -import buildEsmConfig from '../../config/buildEsmConfig'; -import pkg from './package.json'; +import { rollup } from '../../config/rollup.config'; export default [ - buildUmdConfig('graphqlAnywhere'), - buildUmdConfig('graphqlAnywhereAsync', { - input: 'lib/graphql-async.js', - output: { - file: 'lib/async.js', - }, + ...rollup({ name: 'graphql-anywhere' }), + ...rollup({ + name: 'graphql-anywhere-async', + input: 'src/graphql-async.ts', + outputPrefix: 'async', }), - buildEsmConfig(pkg), ]; From 0d59a1b765d0026c38e7836df48defbb9e0d174f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 20:08:24 -0500 Subject: [PATCH 042/230] Use lib/bundle.cjs.js as the "main" entry point in package.json. --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 16372a8d540..f18f440d0fc 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -9,7 +9,7 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": false, diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index e9ed596a57a..8ee3f4241c5 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -11,7 +11,7 @@ "Bazyli Brzóska " ], "license": "MIT", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 9220600801a..16bbf613e35 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -10,7 +10,7 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": false, diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 4acbce7290f..cc5b93a3e43 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -3,7 +3,7 @@ "private": true, "version": "2.5.0-beta.0", "description": "A simple yet functional GraphQL client.", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": false, diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 2e7d1522a08..23c43f9d4a5 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -10,7 +10,7 @@ "James Burgess " ], "license": "MIT", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": false, diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 8c3ec4a03a7..6488e19e4b0 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -2,7 +2,7 @@ "name": "graphql-anywhere", "version": "4.2.0-beta.0", "description": "Run GraphQL queries with no schema and just one resolver", - "main": "./lib/index.js", + "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", "typings": "./lib/index.d.ts", "sideEffects": false, From ecedb7db5b9a2668aff51d0bb4da8a24c238e63d Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 20:58:37 -0500 Subject: [PATCH 043/230] Disable ts-jest diagnostics globally to fix tests. Type checking should respect the local tsconfig.json file within each package. --- config/jest.config.settings.js | 6 ++++++ packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 7 files changed, 12 insertions(+), 6 deletions(-) diff --git a/config/jest.config.settings.js b/config/jest.config.settings.js index 93b3e51219d..7b188685b02 100644 --- a/config/jest.config.settings.js +++ b/config/jest.config.settings.js @@ -3,6 +3,12 @@ module.exports = { '.(ts|tsx)': 'ts-jest', }, + globals: { + 'ts-jest': { + diagnostics: false, + }, + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], testURL: 'http://localhost', diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index f18f440d0fc..342dfdb21b2 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -23,7 +23,7 @@ "homepage": "https://github.com/apollographql/apollo-client#readme", "scripts": { "prepare": "npm run lint && npm run build", - "test": "jest", + "test": "tsc -p tsconfig.json --noEmit && jest", "coverage": "jest --coverage", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 8ee3f4241c5..cb5b9984cb7 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -28,7 +28,7 @@ "scripts": { "prepare": "npm run build", "coverage": "jest --coverage", - "test": "jest", + "test": "tsc -p tsconfig.json --noEmit && jest", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", "build": "tsc -b .", diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 16bbf613e35..1b18ae0642e 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -25,7 +25,7 @@ "scripts": { "prepare": "npm run lint && npm run build", "coverage": "jest --coverage", - "test": "jest", + "test": "tsc -p tsconfig.json --noEmit && jest", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts && tslint -c \"../../config/tslint.json\" -p tsconfig.json tests/*.ts", "prebuild": "npm run clean", "build": "tsc -b .", diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index cc5b93a3e43..acd85522017 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -12,7 +12,7 @@ "coverage": "jest --coverage", "dev": "./scripts/dev.sh", "deploy": "./scripts/deploy.sh", - "test": "jest", + "test": "tsc -p tsconfig.test.json --noEmit && jest", "benchmark": "npm run build:benchmark && node benchmark_lib/benchmark/index.js", "benchmark:inspect": "npm run build:benchmark && node --inspect --debug-brk benchmark_lib/benchmark/index.js", "filesize": "npm run minify", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 23c43f9d4a5..67be12e9c87 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -24,7 +24,7 @@ "homepage": "https://github.com/apollographql/apollo-client#readme", "scripts": { "prepare": "npm run lint && npm run build", - "test": "jest", + "test": "tsc -p tsconfig.json --noEmit && jest", "coverage": "jest --coverage", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "prebuild": "npm run clean", diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 6488e19e4b0..b79cc7fa1e5 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -9,7 +9,7 @@ "scripts": { "prepare": "npm run lint && npm run build", "coverage": "jest --coverage", - "test": "jest", + "test": "tsc -p tsconfig.json --noEmit && jest", "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", From ccbc22404dc463ba9277a486fef0c4dd36aa47ab Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Feb 2019 21:14:47 -0500 Subject: [PATCH 044/230] Simplify jest.config.js files. --- packages/apollo-boost/jest.config.js | 4 +--- packages/apollo-cache-inmemory/jest.config.js | 4 +--- packages/apollo-cache/jest.config.js | 4 +--- packages/apollo-client/jest.config.js | 4 +--- packages/apollo-utilities/jest.config.js | 4 +--- packages/graphql-anywhere/jest.config.js | 4 +--- 6 files changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/apollo-boost/jest.config.js b/packages/apollo-boost/jest.config.js index 82849e9ef6d..48f0a891eaf 100644 --- a/packages/apollo-boost/jest.config.js +++ b/packages/apollo-boost/jest.config.js @@ -1,5 +1,3 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), }; diff --git a/packages/apollo-cache-inmemory/jest.config.js b/packages/apollo-cache-inmemory/jest.config.js index 82849e9ef6d..48f0a891eaf 100644 --- a/packages/apollo-cache-inmemory/jest.config.js +++ b/packages/apollo-cache-inmemory/jest.config.js @@ -1,5 +1,3 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), }; diff --git a/packages/apollo-cache/jest.config.js b/packages/apollo-cache/jest.config.js index 82849e9ef6d..48f0a891eaf 100644 --- a/packages/apollo-cache/jest.config.js +++ b/packages/apollo-cache/jest.config.js @@ -1,5 +1,3 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), }; diff --git a/packages/apollo-client/jest.config.js b/packages/apollo-client/jest.config.js index 5abf56021f6..4f32161655f 100644 --- a/packages/apollo-client/jest.config.js +++ b/packages/apollo-client/jest.config.js @@ -1,7 +1,5 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), // must be inside the src dir setupFiles: ['/src/config/jest/setup.ts'], }; diff --git a/packages/apollo-utilities/jest.config.js b/packages/apollo-utilities/jest.config.js index 82849e9ef6d..48f0a891eaf 100644 --- a/packages/apollo-utilities/jest.config.js +++ b/packages/apollo-utilities/jest.config.js @@ -1,5 +1,3 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), }; diff --git a/packages/graphql-anywhere/jest.config.js b/packages/graphql-anywhere/jest.config.js index 82849e9ef6d..48f0a891eaf 100644 --- a/packages/graphql-anywhere/jest.config.js +++ b/packages/graphql-anywhere/jest.config.js @@ -1,5 +1,3 @@ -const pkg = require('../../config/jest.config.settings'); - module.exports = { - ...pkg, + ...require('../../config/jest.config.settings'), }; From 8a79339f8e2e85861a9c405ef6c7eb12224190ac Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 16:29:58 -0500 Subject: [PATCH 045/230] Address review feedback from @hwillson. --- .npmignore | 1 + config/jest.config.settings.js | 6 --- jest.config.js | 5 -- package-lock.json | 62 ++++++++++------------- package.json | 4 +- packages/apollo-boost/.npmignore | 1 + packages/apollo-cache-inmemory/.npmignore | 1 + packages/apollo-cache/.npmignore | 1 + packages/apollo-client/.npmignore | 1 + packages/apollo-client/package.json | 4 -- packages/apollo-utilities/.npmignore | 1 + packages/graphql-anywhere/.npmignore | 1 + 12 files changed, 37 insertions(+), 51 deletions(-) diff --git a/.npmignore b/.npmignore index 91e688d96f7..9a0bb53e265 100644 --- a/.npmignore +++ b/.npmignore @@ -3,6 +3,7 @@ test typings .gitignore .travis.yml +.rpt2_cache ambient.d.ts CHANGELOG.md design.md diff --git a/config/jest.config.settings.js b/config/jest.config.settings.js index 7b188685b02..c00ccf94690 100644 --- a/config/jest.config.settings.js +++ b/config/jest.config.settings.js @@ -17,11 +17,5 @@ module.exports = { '/node_modules/', '/lib/', '/lib/', - // '/../*/lib/', ], - - // moduleNameMapper: { - // '(apollo-boost|apollo-cache-inmemory|apollo-cache|apollo-client|apollo-utilities|graphql-anywhere)(.*)': - // '/../$1/src/$2', - // }, }; diff --git a/jest.config.js b/jest.config.js index 977f709d842..48490b9e8fa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,9 +1,4 @@ module.exports = { rootDir: '.', projects: ['/packages/*'], - - // moduleNameMapper: { - // '(apollo-boost|apollo-cache-inmemory|apollo-cache|apollo-client|apollo-utilities|graphql-anywhere)(.*)': - // '/packages/$1/src/$2', - // }, }; diff --git a/package-lock.json b/package-lock.json index dfd3c9334c2..22a3c3a4855 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2604,15 +2604,6 @@ "resolve": "1.1.7" } }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, "bser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", @@ -3004,6 +2995,12 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, + "closest-file-data": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/closest-file-data/-/closest-file-data-0.1.4.tgz", + "integrity": "sha1-l1+HwTLymdJKA3W59jyj+4j3Kzo=", + "dev": true + }, "cmd-shim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", @@ -8527,12 +8524,6 @@ "pify": "^3.0.0" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, "make-fetch-happen": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", @@ -11987,30 +11978,33 @@ "dev": true }, "ts-jest": { - "version": "23.10.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.10.5.tgz", - "integrity": "sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" + "version": "23.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.1.4.tgz", + "integrity": "sha512-9rCSxbWfoZxxeXnSoEIzRNr9hDIQ8iEJAWmSRsWhDHDT8OeuGfURhJQUE8jtJlkyEygs6rngH8RYtHz9cfjmEA==", + "dev": true, + "requires": { + "closest-file-data": "^0.1.4", + "fs-extra": "6.0.1", + "json5": "^0.5.0", + "lodash": "^4.17.10" }, "dependencies": { - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true } } }, diff --git a/package.json b/package.json index 78f896387b3..eed833ec433 100644 --- a/package.json +++ b/package.json @@ -95,8 +95,8 @@ "rollup-plugin-sourcemaps": "0.4.2", "rollup-plugin-typescript2": "0.18.1", "rxjs": "6.4.0", - "ts-jest": "23.10.5", - "tslib": "^1.9.3", + "ts-jest": "23.1.4", + "tslib": "1.9.3", "tslint": "5.12.1", "typescript": "3.3.1", "uglify-js": "3.4.9" diff --git a/packages/apollo-boost/.npmignore b/packages/apollo-boost/.npmignore index 21e0d3d8bf0..9826972fcd8 100644 --- a/packages/apollo-boost/.npmignore +++ b/packages/apollo-boost/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md design.md rollup.*.js diff --git a/packages/apollo-cache-inmemory/.npmignore b/packages/apollo-cache-inmemory/.npmignore index 2505d35a9cf..50567fa00e5 100644 --- a/packages/apollo-cache-inmemory/.npmignore +++ b/packages/apollo-cache-inmemory/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md design.md rollup.config.js diff --git a/packages/apollo-cache/.npmignore b/packages/apollo-cache/.npmignore index a6bd0a29e8f..30da7596a4d 100644 --- a/packages/apollo-cache/.npmignore +++ b/packages/apollo-cache/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md design.md rollup.config.js diff --git a/packages/apollo-client/.npmignore b/packages/apollo-client/.npmignore index bf82fd8a67c..8439bdd795e 100644 --- a/packages/apollo-client/.npmignore +++ b/packages/apollo-client/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md DESIGN.md rollup.config.js diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index acd85522017..edf49b13c7a 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -58,10 +58,6 @@ "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, - "devDependencies": { - "webpack": "3.12.0", - "webpack-bundle-analyzer": "3.0.3" - }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" } diff --git a/packages/apollo-utilities/.npmignore b/packages/apollo-utilities/.npmignore index c0afc605525..cebd722913c 100644 --- a/packages/apollo-utilities/.npmignore +++ b/packages/apollo-utilities/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md rollup.config.js tsconfig.json diff --git a/packages/graphql-anywhere/.npmignore b/packages/graphql-anywhere/.npmignore index f1150c6a1a2..b7a58c8f15c 100644 --- a/packages/graphql-anywhere/.npmignore +++ b/packages/graphql-anywhere/.npmignore @@ -1,4 +1,5 @@ .gitignore +.rpt2_cache CHANGELOG.md rollup.*.js tsconfig.json From 829a1ae037d401c71279ba41eb973128a56d4748 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sat, 2 Feb 2019 17:25:59 -0500 Subject: [PATCH 046/230] Compute filesize from minified CJS (rather than UMD) bundle. --- config/rollup.config.js | 22 +++++++++++++++++++++- package.json | 12 ++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/config/rollup.config.js b/config/rollup.config.js index 099a63a5be9..8c71196af89 100644 --- a/config/rollup.config.js +++ b/config/rollup.config.js @@ -2,6 +2,7 @@ import nodeResolve from 'rollup-plugin-node-resolve'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import path from 'path'; +import { terser as minify } from 'rollup-plugin-terser'; function onwarn(message) { const suppressed = ['UNRESOLVED_IMPORT', 'THIS_IS_UNDEFINED']; @@ -82,7 +83,26 @@ export function rollup({ ], onwarn, }, - convert('cjs'), convert('umd'), + convert('cjs'), + { + input: outputFile('cjs'), + output: { + file: outputFile('cjs.min'), + format: 'cjs', + }, + plugins: [ + minify({ + mangle: { + toplevel: true, + }, + compress: { + global_defs: { + '@process.env.NODE_ENV': JSON.stringify('production'), + }, + }, + }), + ], + }, ]; } diff --git a/package.json b/package.json index eed833ec433..dfa33ab8571 100644 --- a/package.json +++ b/package.json @@ -23,22 +23,22 @@ "bundlesize": [ { "name": "apollo-cache", - "path": "./packages/apollo-cache/lib/bundle.umd.min.js", + "path": "./packages/apollo-cache/lib/bundle.cjs.min.js", "maxSize": "900 B" }, { "name": "apollo-cache-inmemory", - "path": "./packages/apollo-cache-inmemory/lib/bundle.umd.min.js", + "path": "./packages/apollo-cache-inmemory/lib/bundle.cjs.min.js", "maxSize": "6.2 kB" }, { "name": "apollo-client", - "path": "./packages/apollo-client/lib/bundle.umd.min.js", + "path": "./packages/apollo-client/lib/bundle.cjs.min.js", "maxSize": "13 kB" }, { "name": "apollo-utilities", - "path": "./packages/apollo-utilities/lib/bundle.umd.min.js", + "path": "./packages/apollo-utilities/lib/bundle.cjs.min.js", "maxSize": "4.75 kB" } ], @@ -93,13 +93,13 @@ "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", + "rollup-plugin-terser": "^4.0.3", "rollup-plugin-typescript2": "0.18.1", "rxjs": "6.4.0", "ts-jest": "23.1.4", "tslib": "1.9.3", "tslint": "5.12.1", - "typescript": "3.3.1", - "uglify-js": "3.4.9" + "typescript": "3.3.1" }, "renovate": { "extends": [ From 2d73dc480f1a5eacdf3ba0edace3d0c58a255fe0 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sat, 2 Feb 2019 17:26:48 -0500 Subject: [PATCH 047/230] Strip invariant(condition, message) strings in production. --- config/rollup.config.js | 2 ++ package.json | 1 + 2 files changed, 3 insertions(+) diff --git a/config/rollup.config.js b/config/rollup.config.js index 8c71196af89..0889e2a62b9 100644 --- a/config/rollup.config.js +++ b/config/rollup.config.js @@ -2,6 +2,7 @@ import nodeResolve from 'rollup-plugin-node-resolve'; import typescriptPlugin from 'rollup-plugin-typescript2'; import typescript from 'typescript'; import path from 'path'; +import invariantPlugin from 'rollup-plugin-invariant'; import { terser as minify } from 'rollup-plugin-terser'; function onwarn(message) { @@ -80,6 +81,7 @@ export function rollup({ only: ['tslib'], }), typescriptPlugin({ typescript, tsconfig }), + invariantPlugin(), ], onwarn, }, diff --git a/package.json b/package.json index dfa33ab8571..bd9e24a738e 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "react-dom": "16.7.0", "rollup": "1.1.2", "rollup-plugin-commonjs": "9.2.0", + "rollup-plugin-invariant": "^0.1.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", From 31f3caa3c58c9c0f54d31ffa0a7b2328fcf93c3e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sat, 2 Feb 2019 18:19:30 -0500 Subject: [PATCH 048/230] Stop inlining tslib helpers, since they are tree-shakeable. --- config/rollup.config.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/config/rollup.config.js b/config/rollup.config.js index 0889e2a62b9..cd0cefa5c85 100644 --- a/config/rollup.config.js +++ b/config/rollup.config.js @@ -22,6 +22,7 @@ const defaultGlobals = { 'graphql-anywhere': 'graphqlAnywhere', 'graphql-anywhere/lib/async': 'graphqlAnywhere.async', 'apollo-boost': 'apollo.boost', + 'tslib': 'tslib', }; export function rollup({ @@ -74,11 +75,7 @@ export function rollup({ plugins: [ nodeResolve({ extensions: ['.ts', '.tsx'], - // Inline anything imported from the tslib package, e.g. __extends - // and __assign. This depends on the "importHelpers":true option in - // tsconfig.base.json. module: true, - only: ['tslib'], }), typescriptPlugin({ typescript, tsconfig }), invariantPlugin(), From 6859064f2805ea6a5bbdcc3db2c8107fead64c79 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sat, 2 Feb 2019 17:42:25 -0500 Subject: [PATCH 049/230] Simplify npm clean scripts. --- package.json | 2 +- packages/apollo-boost/package.json | 8 ++------ packages/apollo-cache-inmemory/package.json | 8 ++------ packages/apollo-cache/package.json | 8 ++------ packages/apollo-client/package.json | 6 +----- packages/apollo-utilities/package.json | 8 ++------ packages/graphql-anywhere/package.json | 6 +----- 7 files changed, 11 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index bd9e24a738e..56e6740d56a 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "lint": "lerna run lint", "lint-fix": "prettier --ignore-path \"./config/prettierignore\" --trailing-comma all --single-quote --write \"packages/*/{src,tests,test,benchmark}/**/*.{j,t}s*\"", "lint-staged": "lint-staged", - "filesize": "lerna run filesize && bundlesize", + "filesize": "lerna run build && bundlesize", "coverage": "jest --verbose --coverage", "coverage:upload": "codecov", "danger": "danger run --verbose --dangerfile=./config/dangerfile.ts", diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 342dfdb21b2..b40ac20ddff 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -30,13 +30,9 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "watch": "tsc -w -p .", - "clean": "rm -rf coverage/* && rm -rf lib/*", + "clean": "rm -rf coverage/* lib/*", "prepublishOnly": "npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", - "filesize": "npm run minify", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", - "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests" + "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js" }, "dependencies": { "apollo-cache": "file:../apollo-cache", diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index cb5b9984cb7..69b484f1df6 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -33,14 +33,10 @@ "prebuild": "npm run clean", "build": "tsc -b .", "postbuild": "npm run bundle", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", - "clean": "rm -rf coverage/* && rm -rf lib/*", - "prepublishOnly": "npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", - "filesize": "npm run minify" + "clean": "rm -rf coverage/* lib/*", + "prepublishOnly": "npm run build" }, "dependencies": { "apollo-cache": "file:../apollo-cache", diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 1b18ae0642e..960be6efdf5 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -30,14 +30,10 @@ "prebuild": "npm run clean", "build": "tsc -b .", "postbuild": "npm run bundle", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", - "clean": "rm -rf coverage/* && rm -rf lib/*", - "prepublishOnly": "npm run clean && npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", - "filesize": "npm run minify" + "clean": "rm -rf coverage/* lib/*", + "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { "apollo-utilities": "file:../apollo-utilities", diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index edf49b13c7a..c77b8a6b0c1 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -15,22 +15,18 @@ "test": "tsc -p tsconfig.test.json --noEmit && jest", "benchmark": "npm run build:benchmark && node benchmark_lib/benchmark/index.js", "benchmark:inspect": "npm run build:benchmark && node --inspect --debug-brk benchmark_lib/benchmark/index.js", - "filesize": "npm run minify", "type-check": "flow check", "prebuild": "npm run clean", "build": "tsc -b .", "postbuild": "npm run bundle", "build:benchmark": "tsc -p tsconfig.benchmark.json", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", "watch": "tsc -w", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "testonly": "jest", "preanalyze": "npm run build", "analyze": "webpack -p --config analyze/webpack.config.js", - "clean": "rm -rf coverage/* && rm -rf lib/*" + "clean": "rm -rf coverage/* lib/*" }, "repository": { "type": "git", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 67be12e9c87..758df13dcd9 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -30,14 +30,10 @@ "prebuild": "npm run clean", "build": "tsc -b .", "postbuild": "npm run bundle", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests", "watch": "tsc -w -p .", - "clean": "rm -rf coverage/* && rm -rf lib/*", - "prepublishOnly": "npm run clean && npm run build", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", - "filesize": "npm run minify" + "clean": "rm -rf coverage/* lib/*", + "prepublishOnly": "npm run clean && npm run build" }, "peerDependencies": { "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0" diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index b79cc7fa1e5..fb948d69073 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -13,14 +13,10 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "postbundle": "npm run clean:tests", "watch": "tsc -w", "prepublishOnly": "npm run build", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", - "minify": "../../node_modules/uglify-js/bin/uglifyjs -c -m -o ./lib/bundle.umd.min.js -- ./lib/bundle.umd.js", - "filesize": "npm run minify", - "clean": "rm -rf coverage/* && rm -rf lib/*", - "clean:tests": "find ./lib -name \"__tests__\" -exec rm -rf '{}' +" + "clean": "rm -rf coverage/* lib/*" }, "repository": { "type": "git", From 29b56f0324eed2e7bb33f14ddc33af67f750255e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sat, 2 Feb 2019 17:43:31 -0500 Subject: [PATCH 050/230] Use invariant(condition, message) in apollo-client package. --- config/rollup.config.js | 1 + packages/apollo-client/package-lock.json | 8 ++ packages/apollo-client/package.json | 1 + packages/apollo-client/src/ApolloClient.ts | 14 +-- packages/apollo-client/src/core/LocalState.ts | 9 +- .../apollo-client/src/core/ObservableQuery.ts | 40 ++++----- .../apollo-client/src/core/QueryManager.ts | 85 +++++++++---------- packages/apollo-client/src/data/queries.ts | 6 +- 8 files changed, 84 insertions(+), 80 deletions(-) diff --git a/config/rollup.config.js b/config/rollup.config.js index cd0cefa5c85..60c68d674e3 100644 --- a/config/rollup.config.js +++ b/config/rollup.config.js @@ -23,6 +23,7 @@ const defaultGlobals = { 'graphql-anywhere/lib/async': 'graphqlAnywhere.async', 'apollo-boost': 'apollo.boost', 'tslib': 'tslib', + 'ts-invariant': 'invariant', }; export function rollup({ diff --git a/packages/apollo-client/package-lock.json b/packages/apollo-client/package-lock.json index b90b805acc0..1630ce7d30d 100644 --- a/packages/apollo-client/package-lock.json +++ b/packages/apollo-client/package-lock.json @@ -64,6 +64,14 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, + "ts-invariant": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.1.1.tgz", + "integrity": "sha512-BxA9rZ1s7YjhqJSIpTCMf0DSQi1UJHdtJAEKPMFet7Y7FsJjQ3fL0PXDvSi/cL83nLiZc0nCO2BLovZVQIRRzA==", + "requires": { + "tslib": "^1.9.3" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index c77b8a6b0c1..058ec690252 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -51,6 +51,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:../apollo-utilities", "symbol-observable": "^1.0.2", + "ts-invariant": "^0.1.1", "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 81ba7889183..8da12857be1 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -13,6 +13,8 @@ import { removeConnectionDirectiveFromDocument, } from 'apollo-utilities'; +import { invariant, InvariantError } from 'ts-invariant'; + import { QueryManager } from './core/QueryManager'; import { ApolloQueryResult, @@ -37,6 +39,7 @@ import { DataStore } from './data/store'; import { version } from './version'; + export interface DefaultOptions { watchQuery?: ModifiableWatchQueryOptions; query?: QueryBaseOptions; @@ -136,7 +139,7 @@ export default class ApolloClient implements DataProxy { } if (!link || !cache) { - throw new Error(` + throw new InvariantError(` In order to initialize Apollo Client, you must specify link & cache properties on the config object. This is part of the required upgrade when migrating from Apollo Client 1.0 to Apollo Client 2.0. For more information, please visit: @@ -315,11 +318,10 @@ export default class ApolloClient implements DataProxy { >; } - if (options.fetchPolicy === 'cache-and-network') { - throw new Error( - 'cache-and-network fetchPolicy can only be used with watchQuery', - ); - } + invariant( + options.fetchPolicy !== 'cache-and-network', + 'cache-and-network fetchPolicy can only be used with watchQuery' + ); // XXX Overwriting options is probably not the best way to do this long // term... diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index e1aabf28c67..8847d8bd4ae 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -30,10 +30,13 @@ import { isInlineFragment, } from 'apollo-utilities'; +import invariant from 'ts-invariant'; + import ApolloClient from '../ApolloClient'; import { Resolvers, OperationVariables } from './types'; import { capitalizeFirstLetter } from '../util/capitalizeFirstLetter'; + export type Resolver = ( fieldName: string, rootValue: any, @@ -218,7 +221,7 @@ export class LocalState { if ((cache as any).config) { return (cache as any).config.dataIdFromObject(obj); } else { - throw new Error( + invariant(false, 'To use context.getCacheKey, you need to use a cache that has ' + 'a configurable dataIdFromObject, like apollo-cache-inmemory.', ); @@ -381,9 +384,7 @@ export class LocalState { } else { // This is a named fragment. fragment = fragmentMap[selection.name.value]; - if (!fragment) { - throw new Error(`No fragment named ${selection.name.value}`); - } + invariant(fragment, `No fragment named ${selection.name.value}`); } if (fragment && fragment.typeCondition) { diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 531ff585ab8..66b9a97edc9 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -16,6 +16,8 @@ import { import { QueryStoreValue } from '../data/queries'; +import invariant from 'ts-invariant'; + // XXX remove in the next breaking semver change (3.0) // Deprecated, use ApolloCurrentQueryResult export type ApolloCurrentResult = { @@ -335,11 +337,9 @@ export class ObservableQuery< FetchMoreOptions, ): Promise> { // early return if no update Query - if (!fetchMoreOptions.updateQuery) { - throw new Error( - 'updateQuery option is required. This function defines how to update the query data with the new results.', - ); - } + invariant(fetchMoreOptions.updateQuery, + 'updateQuery option is required. This function defines how to update the query data with the new results.', + ); let combinedOptions: any; @@ -559,15 +559,7 @@ export class ObservableQuery< } public startPolling(pollInterval: number) { - if ( - this.options.fetchPolicy === 'cache-first' || - this.options.fetchPolicy === 'cache-only' - ) { - throw new Error( - 'Queries that specify the cache-first and cache-only fetchPolicies cannot also be polling queries.', - ); - } - + assertNotCacheFirstOrOnly(this); this.options.pollInterval = pollInterval; this.queryManager.startPollingQuery(this.options, this.queryId); } @@ -611,15 +603,7 @@ export class ObservableQuery< } if (!!this.options.pollInterval) { - if ( - this.options.fetchPolicy === 'cache-first' || - this.options.fetchPolicy === 'cache-only' - ) { - throw new Error( - 'Queries that specify the cache-first and cache-only fetchPolicies cannot also be polling queries.', - ); - } - + assertNotCacheFirstOrOnly(this); this.queryManager.startPollingQuery(this.options, this.queryId); } @@ -661,3 +645,13 @@ export class ObservableQuery< this.observers = []; } } + +function assertNotCacheFirstOrOnly( + obsQuery: ObservableQuery, +) { + const { fetchPolicy } = obsQuery.options; + invariant( + fetchPolicy !== 'cache-first' && fetchPolicy !== 'cache-only', + 'Queries that specify the cache-first and cache-only fetchPolicies cannot also be polling queries.', + ); +} diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index f7711654287..b9c3cda4e98 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -15,6 +15,8 @@ import { hasClientExports, } from 'apollo-utilities'; +import invariant from 'ts-invariant'; + import { isApolloError, ApolloError } from '../errors/ApolloError'; import { Observer, Subscription, Observable } from '../util/Observable'; import { QueryWithUpdater, DataStore } from '../data/store'; @@ -138,17 +140,15 @@ export class QueryManager { fetchPolicy, context = {}, }: MutationOptions): Promise> { - if (!mutation) { - throw new Error( - 'mutation option is required. You must specify your GraphQL document in the mutation option.', - ); - } + invariant( + mutation, + 'mutation option is required. You must specify your GraphQL document in the mutation option.', + ); - if (fetchPolicy && fetchPolicy !== 'no-cache') { - throw new Error( - "fetchPolicy for mutations currently only supports the 'no-cache' policy", - ); - } + invariant( + !fetchPolicy || fetchPolicy === 'no-cache', + "fetchPolicy for mutations currently only supports the 'no-cache' policy" + ); const mutationId = this.generateQueryId(); const cache = this.dataStore.getCache(); @@ -745,11 +745,10 @@ export class QueryManager { options: WatchQueryOptions, shouldSubscribe = true, ): ObservableQuery { - if (options.fetchPolicy === 'standby') { - throw new Error( - 'client.watchQuery cannot be called with fetchPolicy set to "standby"', - ); - } + invariant( + options.fetchPolicy !== 'standby', + 'client.watchQuery cannot be called with fetchPolicy set to "standby"', + ); // get errors synchronously const queryDefinition = getQueryDefinition(options.query); @@ -778,24 +777,26 @@ export class QueryManager { } public query(options: QueryOptions): Promise> { - if (!options.query) { - throw new Error( - 'query option is required. You must specify your GraphQL document ' + - 'in the query option.', - ); - } + invariant( + options.query, + 'query option is required. You must specify your GraphQL document ' + + 'in the query option.', + ); - if (options.query.kind !== 'Document') { - throw new Error('You must wrap the query string in a "gql" tag.'); - } + invariant( + options.query.kind === 'Document', + 'You must wrap the query string in a "gql" tag.', + ); - if ((options as any).returnPartialData) { - throw new Error('returnPartialData option only supported on watchQuery.'); - } + invariant( + !(options as any).returnPartialData, + 'returnPartialData option only supported on watchQuery.', + ); - if ((options as any).pollInterval) { - throw new Error('pollInterval option only supported on watchQuery.'); - } + invariant( + !(options as any).pollInterval, + 'pollInterval option only supported on watchQuery.', + ); return new Promise>((resolve, reject) => { const watchedQuery = this.watchQuery(options, false); @@ -1167,12 +1168,11 @@ export class QueryManager { const { observableQuery: foundObserveableQuery } = this.getQuery( queryIdOrObservable, ); - if (!foundObserveableQuery) { - throw new Error( - `ObservableQuery with this id doesn't exist: ${queryIdOrObservable}`, - ); - } - observableQuery = foundObserveableQuery; + invariant( + foundObserveableQuery, + `ObservableQuery with this id doesn't exist: ${queryIdOrObservable}` + ); + observableQuery = foundObserveableQuery!; } else { observableQuery = queryIdOrObservable; } @@ -1512,16 +1512,15 @@ export class QueryManager { ): string { const { pollInterval } = options; - if (!pollInterval) { - throw new Error( - 'Attempted to start a polling query without a polling interval.', - ); - } + invariant( + pollInterval, + 'Attempted to start a polling query without a polling interval.', + ); // Do not poll in SSR mode if (!this.ssrMode) { this.pollingInfoByQueryId.set(queryId, { - interval: pollInterval, + interval: pollInterval!, // Avoid polling until at least pollInterval milliseconds from now. // The -10 is a fudge factor to help with tests that rely on simulated // timeouts via jest.runTimersToTime. @@ -1536,7 +1535,7 @@ export class QueryManager { this.addQueryListener(queryId, listener); } - this.schedulePoll(pollInterval); + this.schedulePoll(pollInterval!); } return queryId; diff --git a/packages/apollo-client/src/data/queries.ts b/packages/apollo-client/src/data/queries.ts index 1735082ddfd..c97cb5e1b1c 100644 --- a/packages/apollo-client/src/data/queries.ts +++ b/packages/apollo-client/src/data/queries.ts @@ -1,6 +1,6 @@ import { DocumentNode, GraphQLError, ExecutionResult } from 'graphql'; import { isEqual } from 'apollo-utilities'; - +import invariant from 'ts-invariant'; import { NetworkStatus } from '../core/networkStatus'; export type QueryStoreValue = { @@ -44,9 +44,7 @@ export class QueryStore { // XXX we're throwing an error here to catch bugs where a query gets overwritten by a new one. // we should implement a separate action for refetching so that QUERY_INIT may never overwrite // an existing query (see also: https://github.com/apollostack/apollo-client/issues/732) - throw new Error( - 'Internal Error: may not update existing query string in store', - ); + invariant(false, 'Internal Error: may not update existing query string in store'); } let isSetVariables = false; From f36e023fbca24c4a42570af4d1fde901dd9d906e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 20:29:36 -0500 Subject: [PATCH 051/230] Replace isProduction with process.env.NODE_ENV check. --- packages/apollo-client/src/ApolloClient.ts | 5 ++--- packages/apollo-client/src/core/QueryManager.ts | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 8da12857be1..92b3499ccce 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -9,7 +9,6 @@ import { import { ExecutionResult, DocumentNode } from 'graphql'; import { ApolloCache, DataProxy } from 'apollo-cache'; import { - isProduction, removeConnectionDirectiveFromDocument, } from 'apollo-utilities'; @@ -187,7 +186,7 @@ export default class ApolloClient implements DataProxy { // Attach the client instance to window to let us be found by chrome devtools, but only in // development mode const defaultConnectToDevTools = - !isProduction() && + process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && !(window as any).__APOLLO_CLIENT__; @@ -202,7 +201,7 @@ export default class ApolloClient implements DataProxy { /** * Suggest installing the devtools for developers who don't have them */ - if (!hasSuggestedDevtools && !isProduction()) { + if (!hasSuggestedDevtools && process.env.NODE_ENV !== 'production') { hasSuggestedDevtools = true; if ( typeof window !== 'undefined' && diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index b9c3cda4e98..92ebadf616b 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -9,7 +9,6 @@ import { getOperationDefinition, getOperationName, getQueryDefinition, - isProduction, hasDirectives, graphQLResultHasError, hasClientExports, @@ -607,7 +606,7 @@ export class QueryManager { setTimeout(() => { throw apolloError; }, 0); - if (!isProduction()) { + if (process.env.NODE_ENV !== 'production') { /* tslint:disable-next-line */ console.info( 'An unhandled error was thrown because no error handler is registered ' + From 69bae61146bf4c56d613c5a4e725101bbb2f5481 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 20:30:52 -0500 Subject: [PATCH 052/230] Update to latest rollup-plugin-invariant. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 56e6740d56a..4c4cb76a2a8 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "react-dom": "16.7.0", "rollup": "1.1.2", "rollup-plugin-commonjs": "9.2.0", - "rollup-plugin-invariant": "^0.1.2", + "rollup-plugin-invariant": "^0.2.3", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", From 8cb112c65f82306f5961411f270e8b0499fae733 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 20:33:21 -0500 Subject: [PATCH 053/230] Update package-lock.json. --- package-lock.json | 133 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22a3c3a4855..626c1a4039e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1897,6 +1897,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:packages/apollo-utilities", "symbol-observable": "^1.0.2", + "ts-invariant": "^0.1.1", "tslib": "^1.9.3", "zen-observable": "^0.8.0" } @@ -2101,6 +2102,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.12.1.tgz", + "integrity": "sha512-H2izJAyT2xwew4TxShpmxe6f9R5hHgJQy1QloLiUC2yrJMtyraBWNJL7903rpeCY9keNUipORR/zIUC2XcYKng==", + "dev": true + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -10235,6 +10242,26 @@ "util.promisify": "^1.0.0" } }, + "recast": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.17.2.tgz", + "integrity": "sha512-YHFvn4rBXl8eIjALjUiOV/AP3xFpyGNGNHDw9mAncAWuIdgnBKjbZQ9+P3VlsKcNaNapRVFlTEX1dvDRlYwyxg==", + "dev": true, + "requires": { + "ast-types": "0.12.1", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "redent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", @@ -10490,6 +10517,17 @@ } } }, + "rollup-plugin-invariant": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.2.3.tgz", + "integrity": "sha512-/hDxOD7YXexgQmpW9FGTgomxT+E2T8IZroWZ4QAXiBqAaYqflyefd+t1c8MRgXreoBb+85P/pLOLDC/0csGQZA==", + "dev": true, + "requires": { + "recast": "^0.17.2", + "rollup-pluginutils": "^2.3.3", + "tslib": "^1.9.3" + } + }, "rollup-plugin-local-resolve": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/rollup-plugin-local-resolve/-/rollup-plugin-local-resolve-1.0.7.tgz", @@ -10534,6 +10572,45 @@ "source-map-resolve": "^0.5.0" } }, + "rollup-plugin-terser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz", + "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "jest-worker": "^24.0.0", + "serialize-javascript": "^1.6.1", + "terser": "^3.14.1" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "jest-worker": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz", + "integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "rollup-plugin-typescript2": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.18.1.tgz", @@ -10983,6 +11060,12 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -11705,6 +11788,41 @@ "uuid": "^3.0.1" } }, + "terser": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, "test-exclude": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", @@ -11977,6 +12095,14 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "ts-invariant": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.1.1.tgz", + "integrity": "sha512-BxA9rZ1s7YjhqJSIpTCMf0DSQi1UJHdtJAEKPMFet7Y7FsJjQ3fL0PXDvSi/cL83nLiZc0nCO2BLovZVQIRRzA==", + "requires": { + "tslib": "^1.9.3" + } + }, "ts-jest": { "version": "23.1.4", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.1.4.tgz", @@ -12120,6 +12246,7 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, + "optional": true, "requires": { "commander": "~2.17.1", "source-map": "~0.6.1" @@ -12129,13 +12256,15 @@ "version": "2.17.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "dev": true, + "optional": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, From a864114bce7d6863f2aa9010f9e3110bc6711ab2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 20:50:05 -0500 Subject: [PATCH 054/230] One more use case for InvariantError. --- packages/apollo-client/src/data/queries.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/apollo-client/src/data/queries.ts b/packages/apollo-client/src/data/queries.ts index c97cb5e1b1c..7ca385780dd 100644 --- a/packages/apollo-client/src/data/queries.ts +++ b/packages/apollo-client/src/data/queries.ts @@ -1,6 +1,6 @@ import { DocumentNode, GraphQLError, ExecutionResult } from 'graphql'; import { isEqual } from 'apollo-utilities'; -import invariant from 'ts-invariant'; +import { InvariantError } from 'ts-invariant'; import { NetworkStatus } from '../core/networkStatus'; export type QueryStoreValue = { @@ -44,7 +44,9 @@ export class QueryStore { // XXX we're throwing an error here to catch bugs where a query gets overwritten by a new one. // we should implement a separate action for refetching so that QUERY_INIT may never overwrite // an existing query (see also: https://github.com/apollostack/apollo-client/issues/732) - invariant(false, 'Internal Error: may not update existing query string in store'); + throw new InvariantError( + 'Internal Error: may not update existing query string in store', + ); } let isSetVariables = false; From 6244703c1962a1063bd7660ac8a5d2d5ec661fa2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Feb 2019 20:59:34 -0500 Subject: [PATCH 055/230] Use only named import { invariant } from 'ts-invariant'. Mixing default and named imports causes Rollup to use both, which leads to slightly more generated code, on the whole. --- packages/apollo-client/src/core/LocalState.ts | 2 +- packages/apollo-client/src/core/ObservableQuery.ts | 2 +- packages/apollo-client/src/core/QueryManager.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 8847d8bd4ae..7b8b2cce2e0 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -30,7 +30,7 @@ import { isInlineFragment, } from 'apollo-utilities'; -import invariant from 'ts-invariant'; +import { invariant } from 'ts-invariant'; import ApolloClient from '../ApolloClient'; import { Resolvers, OperationVariables } from './types'; diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 66b9a97edc9..574e7ef8c38 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -16,7 +16,7 @@ import { import { QueryStoreValue } from '../data/queries'; -import invariant from 'ts-invariant'; +import { invariant } from 'ts-invariant'; // XXX remove in the next breaking semver change (3.0) // Deprecated, use ApolloCurrentQueryResult diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 92ebadf616b..9bcfa0a72de 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -14,7 +14,7 @@ import { hasClientExports, } from 'apollo-utilities'; -import invariant from 'ts-invariant'; +import { invariant } from 'ts-invariant'; import { isApolloError, ApolloError } from '../errors/ApolloError'; import { Observer, Subscription, Observable } from '../util/Observable'; From cc0741e671eb38a5a1e107afd4490db56adc14f0 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Feb 2019 11:51:17 -0500 Subject: [PATCH 056/230] Update {rollup-plugin,ts}-invariant dependencies to latest versions. Now with support for production-strippable invariant.warn(...) and invariant.error(...) calls! --- package-lock.json | 15 +++------------ package.json | 2 +- packages/apollo-client/package-lock.json | 8 ++++---- packages/apollo-client/package.json | 2 +- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 626c1a4039e..ef9099c4a98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1897,7 +1897,6 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:packages/apollo-utilities", "symbol-observable": "^1.0.2", - "ts-invariant": "^0.1.1", "tslib": "^1.9.3", "zen-observable": "^0.8.0" } @@ -10518,9 +10517,9 @@ } }, "rollup-plugin-invariant": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.2.3.tgz", - "integrity": "sha512-/hDxOD7YXexgQmpW9FGTgomxT+E2T8IZroWZ4QAXiBqAaYqflyefd+t1c8MRgXreoBb+85P/pLOLDC/0csGQZA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.3.2.tgz", + "integrity": "sha512-1LxRFWan0jXGIlP8H7XaL2ivt96SLQFM7mdSJVMkZSdfNTTCCrIjk4G2H2wdhStcFDtCRpmu9ukYPUXShTa2yg==", "dev": true, "requires": { "recast": "^0.17.2", @@ -12095,14 +12094,6 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "ts-invariant": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.1.1.tgz", - "integrity": "sha512-BxA9rZ1s7YjhqJSIpTCMf0DSQi1UJHdtJAEKPMFet7Y7FsJjQ3fL0PXDvSi/cL83nLiZc0nCO2BLovZVQIRRzA==", - "requires": { - "tslib": "^1.9.3" - } - }, "ts-jest": { "version": "23.1.4", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.1.4.tgz", diff --git a/package.json b/package.json index 4c4cb76a2a8..27da4b34bf7 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "react-dom": "16.7.0", "rollup": "1.1.2", "rollup-plugin-commonjs": "9.2.0", - "rollup-plugin-invariant": "^0.2.3", + "rollup-plugin-invariant": "^0.3.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", diff --git a/packages/apollo-client/package-lock.json b/packages/apollo-client/package-lock.json index 1630ce7d30d..1c094b23e3b 100644 --- a/packages/apollo-client/package-lock.json +++ b/packages/apollo-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-client", - "version": "2.4.10", + "version": "2.5.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -65,9 +65,9 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "ts-invariant": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.1.1.tgz", - "integrity": "sha512-BxA9rZ1s7YjhqJSIpTCMf0DSQi1UJHdtJAEKPMFet7Y7FsJjQ3fL0PXDvSi/cL83nLiZc0nCO2BLovZVQIRRzA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", + "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 058ec690252..057dfcbdcd9 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -51,7 +51,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:../apollo-utilities", "symbol-observable": "^1.0.2", - "ts-invariant": "^0.1.1", + "ts-invariant": "^0.2.1", "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, From f7a1d1cabe81d9cdcbed31a8d203b4527d5ca0ab Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Feb 2019 12:15:49 -0500 Subject: [PATCH 057/230] Use invariant, InvariantError, and invariant.warn in apollo-cache-inmemory. --- .../apollo-cache-inmemory/package-lock.json | 10 ++- packages/apollo-cache-inmemory/package.json | 1 + .../src/__tests__/diffAgainstStore.ts | 9 +-- .../src/fragmentMatcher.ts | 66 ++++++++--------- .../src/inMemoryCache.ts | 8 ++- .../src/readFromStore.ts | 12 ++-- .../apollo-cache-inmemory/src/writeToStore.ts | 71 +++++++++---------- 7 files changed, 92 insertions(+), 85 deletions(-) diff --git a/packages/apollo-cache-inmemory/package-lock.json b/packages/apollo-cache-inmemory/package-lock.json index 2a7daf506fb..ced1bc55172 100644 --- a/packages/apollo-cache-inmemory/package-lock.json +++ b/packages/apollo-cache-inmemory/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.4.0", + "version": "1.5.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -50,6 +50,14 @@ "immutable-tuple": "^0.4.9" } }, + "ts-invariant": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", + "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "requires": { + "tslib": "^1.9.3" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 69b484f1df6..dec360eb42e 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -42,6 +42,7 @@ "apollo-cache": "file:../apollo-cache", "apollo-utilities": "file:../apollo-utilities", "optimism": "^0.6.9", + "ts-invariant": "^0.2.1", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-cache-inmemory/src/__tests__/diffAgainstStore.ts b/packages/apollo-cache-inmemory/src/__tests__/diffAgainstStore.ts index 2861f975fb0..f3a969eba13 100644 --- a/packages/apollo-cache-inmemory/src/__tests__/diffAgainstStore.ts +++ b/packages/apollo-cache-inmemory/src/__tests__/diffAgainstStore.ts @@ -13,16 +13,17 @@ const fragmentMatcherFunction = new HeuristicFragmentMatcher().match; disableFragmentWarnings(); export function withError(func: Function, regex: RegExp) { let message: string = null as never; - const oldError = console.error; - - console.error = (m: string) => (message = m); + const { error } = console; + console.error = m => { + message = m; + }; try { const result = func(); expect(message).toMatch(regex); return result; } finally { - console.error = oldError; + console.error = error; } } diff --git a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts index 167276ae487..0d7e66f19c4 100644 --- a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts +++ b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts @@ -1,4 +1,5 @@ -import { isTest, warnOnceInDevelopment, IdValue } from 'apollo-utilities'; +import { isTest, IdValue } from 'apollo-utilities'; +import { invariant } from 'ts-invariant'; import { ReadStoreContext, @@ -9,6 +10,15 @@ import { let haveWarned = false; +function shouldWarn() { + const answer = !haveWarned; + /* istanbul ignore if */ + if (!isTest()) { + haveWarned = true; + } + return answer; +} + /** * This fragment matcher is very basic and unable to match union or interface type conditions */ @@ -41,26 +51,20 @@ export class HeuristicFragmentMatcher implements FragmentMatcherInterface { } if (!obj.__typename) { - if (!haveWarned) { - console.warn(`You're using fragments in your queries, but either don't have the addTypename: + if (shouldWarn()) { + invariant.warn(`You're using fragments in your queries, but either don't have the addTypename: true option set in Apollo Client, or you are trying to write a fragment to the store without the __typename. Please turn on the addTypename option and include __typename when writing fragments so that Apollo Client can accurately match fragments.`); - console.warn( + invariant.warn( 'Could not find __typename on Fragment ', typeCondition, obj, ); - console.warn( + invariant.warn( `DEPRECATION WARNING: using fragments without __typename is unsupported behavior ` + `and will be removed in future versions of Apollo client. You should fix this and set addTypename to true now.`, ); - - /* istanbul ignore if */ - if (!isTest()) { - // When running tests, we want to print the warning every time - haveWarned = true; - } } return 'heuristic'; @@ -75,14 +79,15 @@ export class HeuristicFragmentMatcher implements FragmentMatcherInterface { // 2. A fragment on a matching interface or union // If it's 1, we don't want to return anything, if it's 2 we want to match. We can't tell the // difference, so we warn the user, but still try to match it (backcompat). - warnOnceInDevelopment( - 'You are using the simple (heuristic) fragment matcher, but your ' + - 'queries contain union or interface types. Apollo Client will not be ' + - 'able to accurately map fragments. To make this error go away, use ' + - 'the `IntrospectionFragmentMatcher` as described in the docs: ' + - 'https://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher', - 'error', - ); + if (shouldWarn()) { + invariant.error( + 'You are using the simple (heuristic) fragment matcher, but your ' + + 'queries contain union or interface types. Apollo Client will not be ' + + 'able to accurately map fragments. To make this error go away, use ' + + 'the `IntrospectionFragmentMatcher` as described in the docs: ' + + 'https://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher', + ); + } return 'heuristic'; } @@ -112,12 +117,10 @@ export class IntrospectionFragmentMatcher implements FragmentMatcherInterface { typeCondition: string, context: ReadStoreContext, ) { - if (!this.isReady) { - // this should basically never happen in proper use. - throw new Error( - 'FragmentMatcher.match() was called before FragmentMatcher.init()', - ); - } + invariant( + this.isReady, + 'FragmentMatcher.match() was called before FragmentMatcher.init()', + ); const obj = context.store.get(idValue.id); @@ -125,13 +128,12 @@ export class IntrospectionFragmentMatcher implements FragmentMatcherInterface { return false; } - if (!obj.__typename) { - throw new Error( - `Cannot match fragment because __typename property is missing: ${JSON.stringify( - obj, - )}`, - ); - } + invariant( + obj.__typename, + `Cannot match fragment because __typename property is missing: ${JSON.stringify( + obj, + )}`, + ); if (obj.__typename === typeCondition) { return true; diff --git a/packages/apollo-cache-inmemory/src/inMemoryCache.ts b/packages/apollo-cache-inmemory/src/inMemoryCache.ts index 79fc9d03d63..3d4af3f4f4a 100644 --- a/packages/apollo-cache-inmemory/src/inMemoryCache.ts +++ b/packages/apollo-cache-inmemory/src/inMemoryCache.ts @@ -9,6 +9,8 @@ import { addTypenameToDocument } from 'apollo-utilities'; import { wrap } from 'optimism'; +import { invariant, InvariantError } from 'ts-invariant'; + import { HeuristicFragmentMatcher } from './fragmentMatcher'; import { ApolloReducerConfig, @@ -97,14 +99,14 @@ export class InMemoryCache extends ApolloCache { // backwards compat if ((this.config as any).customResolvers) { - console.warn( + invariant.warn( 'customResolvers have been renamed to cacheRedirects. Please update your config as we will be deprecating customResolvers in the next major version.', ); this.config.cacheRedirects = (this.config as any).customResolvers; } if ((this.config as any).cacheResolvers) { - console.warn( + invariant.warn( 'cacheResolvers have been renamed to cacheRedirects. Please update your config as we will be deprecating cacheResolvers in the next major version.', ); this.config.cacheRedirects = (this.config as any).cacheResolvers; @@ -222,7 +224,7 @@ export class InMemoryCache extends ApolloCache { } public evict(query: Cache.EvictOptions): Cache.EvictionResult { - throw new Error(`eviction is not implemented on InMemory Cache`); + throw new InvariantError(`eviction is not implemented on InMemory Cache`); } public reset(): Promise { diff --git a/packages/apollo-cache-inmemory/src/readFromStore.ts b/packages/apollo-cache-inmemory/src/readFromStore.ts index 0091759e072..495b120a1c8 100644 --- a/packages/apollo-cache-inmemory/src/readFromStore.ts +++ b/packages/apollo-cache-inmemory/src/readFromStore.ts @@ -43,6 +43,7 @@ import { import { wrap } from 'optimism'; import { CacheKeyNode } from './cacheKeys'; import { DepTrackingCache } from './depTrackingCache'; +import { invariant, InvariantError } from 'ts-invariant'; export type VariableMap = { [name: string]: any }; @@ -225,7 +226,7 @@ export class StoreReader { if (hasMissingFields && ! returnPartialData) { execResult.missing.forEach(info => { if (info.tolerable) return; - throw new Error( + throw new InvariantError( `Can't find field ${info.fieldName} on object ${JSON.stringify( info.object, null, @@ -343,7 +344,7 @@ export class StoreReader { fragment = fragmentMap[selection.name.value]; if (!fragment) { - throw new Error(`No fragment named ${selection.name.value}`); + throw new InvariantError(`No fragment named ${selection.name.value}`); } } @@ -503,7 +504,7 @@ function assertSelectionSetForIdValue( value: any, ) { if (!field.selectionSet && isIdValue(value)) { - throw new Error( + throw new InvariantError( `Missing selection set for object of type ${ value.typename } returned for query field ${field.name.value}` @@ -516,11 +517,10 @@ function defaultFragmentMatcher() { } export function assertIdValue(idValue: IdValue) { - if (!isIdValue(idValue)) { - throw new Error(`Encountered a sub-selection on the query, but the store doesn't have \ + invariant(isIdValue(idValue), `\ +Encountered a sub-selection on the query, but the store doesn't have \ an object reference. This should never happen during normal use unless you have custom code \ that is directly manipulating the store; please file an issue.`); - } } function readStoreResolver( diff --git a/packages/apollo-cache-inmemory/src/writeToStore.ts b/packages/apollo-cache-inmemory/src/writeToStore.ts index b92e8a4325c..c5b566d5f6b 100644 --- a/packages/apollo-cache-inmemory/src/writeToStore.ts +++ b/packages/apollo-cache-inmemory/src/writeToStore.ts @@ -27,6 +27,8 @@ import { isEqual, } from 'apollo-utilities'; +import { invariant } from 'ts-invariant'; + import { ObjectCache } from './objectCache'; import { defaultNormalizedCacheFactory } from './depTrackingCache'; @@ -202,15 +204,13 @@ export class StoreWriter { // XXX We'd like to throw an error, but for backwards compatibility's sake // we just print a warning for the time being. //throw new WriteError(`Missing field ${resultFieldKey} in ${JSON.stringify(result, null, 2).substring(0, 100)}`); - if (!isProduction()) { - console.warn( - `Missing field ${resultFieldKey} in ${JSON.stringify( - result, - null, - 2, - ).substring(0, 100)}`, - ); - } + invariant.warn( + `Missing field ${resultFieldKey} in ${JSON.stringify( + result, + null, + 2, + ).substring(0, 100)}`, + ); } } } else { @@ -222,10 +222,7 @@ export class StoreWriter { } else { // Named fragment fragment = (fragmentMap || {})[selection.name.value]; - - if (!fragment) { - throw new Error(`No fragment named ${selection.name.value}.`); - } + invariant(fragment, `No fragment named ${selection.name.value}.`); } let matches = true; @@ -246,7 +243,7 @@ export class StoreWriter { fakeContext, ); if (!isProduction() && match === 'heuristic') { - console.error('WARNING: heuristic fragment matching going on!'); + invariant.error('WARNING: heuristic fragment matching going on!'); } matches = !!match; } @@ -319,11 +316,10 @@ export class StoreWriter { // because we use that character to designate an Apollo-generated id // and we use the distinction between user-desiginated and application-provided // ids when managing overwrites. - if (semanticId && isGeneratedId(semanticId)) { - throw new Error( - 'IDs returned by dataIdFromObject cannot begin with the "$" character.', - ); - } + invariant( + !semanticId || !isGeneratedId(semanticId), + 'IDs returned by dataIdFromObject cannot begin with the "$" character.', + ); if ( semanticId || @@ -365,27 +361,24 @@ export class StoreWriter { // One exception we allow is when the typename has changed, which occurs // when schema defines a union, both with and without an ID in the same place. // checks if we "lost" the read id - if (generated && !escapedId.generated && !typenameChanged) { - throw new Error( - `Store error: the application attempted to write an object with no provided id` + - ` but the store already contains an id of ${ - escapedId.id - } for this object. The selectionSet` + - ` that was trying to be written is:\n` + - JSON.stringify(field), - ); - } + invariant( + !generated || escapedId.generated || typenameChanged, + `Store error: the application attempted to write an object with no provided id but the store already contains an id of ${ + escapedId.id + } for this object. The selectionSet that was trying to be written is:\n${ + JSON.stringify(field) + }`, + ); + // checks if we "lost" the typename - if (hadTypename && !hasTypename) { - throw new Error( - `Store error: the application attempted to write an object with no provided typename` + - ` but the store already contains an object with typename of ${ - escapedId.typename - } for the object of id ${escapedId.id}. The selectionSet` + - ` that was trying to be written is:\n` + - JSON.stringify(field), - ); - } + invariant( + !hadTypename || hasTypename, + `Store error: the application attempted to write an object with no provided typename but the store already contains an object with typename of ${ + escapedId.typename + } for the object of id ${escapedId.id}. The selectionSet that was trying to be written is:\n${ + JSON.stringify(field) + }`, + ); if (escapedId.generated) { // We should only merge if it's an object of the same type, From 94724c7e8c25c1af08be9466422bd67b193ce660 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Feb 2019 13:17:17 -0500 Subject: [PATCH 058/230] Use invariant and invariant.warn in apollo-boost. We don't include apollo-boost in the bundlesize limits any more, but it doesn't hurt to use these tools. --- packages/apollo-boost/package-lock.json | 18 +++++++++--------- packages/apollo-boost/package.json | 1 + packages/apollo-boost/src/index.ts | 18 +++++++++--------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/apollo-boost/package-lock.json b/packages/apollo-boost/package-lock.json index 9bbbcf484a0..fdc6a88c7e4 100644 --- a/packages/apollo-boost/package-lock.json +++ b/packages/apollo-boost/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.1.25", + "version": "0.3.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -223,19 +223,19 @@ } } }, - "graphql-anywhere": { - "version": "4.1.26", - "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.26.tgz", - "integrity": "sha512-A8aZ6hrx7dbBP/sgItdp8S0q1V8gvpHXClCL+Kg3AHEwLuqxMG65CVrrBUuoVHDa2mW/WRxEw4IjL1fRnTVJEQ==", - "requires": { - "apollo-utilities": "^1.1.1" - } - }, "graphql-tag": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" }, + "ts-invariant": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", + "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "requires": { + "tslib": "^1.9.3" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index b40ac20ddff..fbd8b94f6b6 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -42,6 +42,7 @@ "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", "graphql-tag": "^2.4.2", + "ts-invariant": "^0.2.1", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-boost/src/index.ts b/packages/apollo-boost/src/index.ts index 457babea49d..e0813e2935d 100644 --- a/packages/apollo-boost/src/index.ts +++ b/packages/apollo-boost/src/index.ts @@ -14,6 +14,7 @@ import ApolloClient, { LocalStateFragmentMatcher, } from 'apollo-client'; import { DocumentNode } from 'graphql'; +import { invariant } from 'ts-invariant'; export { gql, HttpLink }; @@ -79,7 +80,7 @@ export default class DefaultClient extends ApolloClient { ); if (diff.length > 0) { - console.warn( + invariant.warn( 'ApolloBoost was initialized with unsupported options: ' + `${diff.join(' ')}`, ); @@ -105,12 +106,11 @@ export default class DefaultClient extends ApolloClient { let { cache } = config; - if (cache && cacheRedirects) { - throw new Error( - 'Incompatible cache configuration. If providing `cache` then ' + - 'configure the provided instance with `cacheRedirects` instead.', - ); - } + invariant( + !cache || !cacheRedirects, + 'Incompatible cache configuration. If providing `cache` then ' + + 'configure the provided instance with `cacheRedirects` instead.', + ); if (!cache) { cache = cacheRedirects @@ -124,7 +124,7 @@ export default class DefaultClient extends ApolloClient { if (graphQLErrors) { graphQLErrors.map(({ message, locations, path }) => // tslint:disable-next-line - console.log( + invariant.warn( `[GraphQL error]: Message: ${message}, Location: ` + `${locations}, Path: ${path}`, ), @@ -132,7 +132,7 @@ export default class DefaultClient extends ApolloClient { } if (networkError) { // tslint:disable-next-line - console.log(`[Network error]: ${networkError}`); + invariant.warn(`[Network error]: ${networkError}`); } }); From 4ae19f92f771d56b68b1567c5d7a5a7cd81f03e6 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Feb 2019 13:29:56 -0500 Subject: [PATCH 059/230] Use invariant and InvariantError in apollo-utilities. --- packages/apollo-utilities/package-lock.json | 10 +++- packages/apollo-utilities/package.json | 1 + packages/apollo-utilities/src/directives.ts | 40 ++++++------- packages/apollo-utilities/src/fragments.ts | 16 +++--- packages/apollo-utilities/src/getFromAST.ts | 63 +++++++++++---------- packages/apollo-utilities/src/storeUtils.ts | 5 +- 6 files changed, 74 insertions(+), 61 deletions(-) diff --git a/packages/apollo-utilities/package-lock.json b/packages/apollo-utilities/package-lock.json index 81dbe8a0115..f9172f16919 100644 --- a/packages/apollo-utilities/package-lock.json +++ b/packages/apollo-utilities/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.1.0", + "version": "1.2.0-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -9,6 +9,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "ts-invariant": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", + "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "requires": { + "tslib": "^1.9.3" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 758df13dcd9..4bde2b81c31 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.2.1", "tslib": "^1.9.3" } } diff --git a/packages/apollo-utilities/src/directives.ts b/packages/apollo-utilities/src/directives.ts index 94e99dfa444..464ed15d453 100644 --- a/packages/apollo-utilities/src/directives.ts +++ b/packages/apollo-utilities/src/directives.ts @@ -11,6 +11,8 @@ import { import { visit } from 'graphql/language/visitor'; +import { invariant } from 'ts-invariant'; + import { argumentsObjectFromField } from './storeUtils'; export type DirectiveInfo = { @@ -53,33 +55,31 @@ export function shouldInclude( //evaluate the "if" argument and skip (i.e. return undefined) if it evaluates to true. const directiveArguments = directive.arguments || []; const directiveName = directive.name.value; - if (directiveArguments.length !== 1) { - throw new Error( - `Incorrect number of arguments for the @${directiveName} directive.`, - ); - } + + invariant( + directiveArguments.length === 1, + `Incorrect number of arguments for the @${directiveName} directive.`, + ); const ifArgument = directiveArguments[0]; - if (!ifArgument.name || ifArgument.name.value !== 'if') { - throw new Error(`Invalid argument for the @${directiveName} directive.`); - } + invariant( + ifArgument.name && ifArgument.name.value === 'if', + `Invalid argument for the @${directiveName} directive.`, + ); const ifValue = directiveArguments[0].value; let evaledValue: boolean = false; if (!ifValue || ifValue.kind !== 'BooleanValue') { // means it has to be a variable value if this is a valid @skip or @include directive - if (ifValue.kind !== 'Variable') { - throw new Error( - `Argument for the @${directiveName} directive must be a variable or a boolean value.`, - ); - } else { - evaledValue = variables[(ifValue as VariableNode).name.value]; - if (evaledValue === undefined) { - throw new Error( - `Invalid variable referenced in @${directiveName} directive.`, - ); - } - } + invariant( + ifValue.kind === 'Variable', + `Argument for the @${directiveName} directive must be a variable or a boolean value.`, + ); + evaledValue = variables[(ifValue as VariableNode).name.value]; + invariant( + evaledValue !== void 0, + `Invalid variable referenced in @${directiveName} directive.`, + ); } else { evaledValue = (ifValue as BooleanValueNode).value; } diff --git a/packages/apollo-utilities/src/fragments.ts b/packages/apollo-utilities/src/fragments.ts index 08184ae3261..088ba98ce7d 100644 --- a/packages/apollo-utilities/src/fragments.ts +++ b/packages/apollo-utilities/src/fragments.ts @@ -1,4 +1,5 @@ import { DocumentNode, FragmentDefinitionNode } from 'graphql'; +import { invariant, InvariantError } from 'ts-invariant'; /** * Returns a query document which adds a single query operation that only @@ -36,7 +37,7 @@ export function getFragmentQueryDocument( // Throw an error if we encounter an operation definition because we will // define our own operation definition later on. if (definition.kind === 'OperationDefinition') { - throw new Error( + throw new InvariantError( `Found a ${definition.operation} operation${ definition.name ? ` named '${definition.name.value}'` : '' }. ` + @@ -53,13 +54,12 @@ export function getFragmentQueryDocument( // If the user did not give us a fragment name then let us try to get a // name from a single fragment in the definition. if (typeof actualFragmentName === 'undefined') { - if (fragments.length !== 1) { - throw new Error( - `Found ${ - fragments.length - } fragments. \`fragmentName\` must be provided when there is not exactly 1 fragment.`, - ); - } + invariant( + fragments.length === 1, + `Found ${ + fragments.length + } fragments. \`fragmentName\` must be provided when there is not exactly 1 fragment.`, + ); actualFragmentName = fragments[0].name.value; } diff --git a/packages/apollo-utilities/src/getFromAST.ts b/packages/apollo-utilities/src/getFromAST.ts index 4fe53125778..febe52604d9 100644 --- a/packages/apollo-utilities/src/getFromAST.ts +++ b/packages/apollo-utilities/src/getFromAST.ts @@ -4,6 +4,9 @@ import { FragmentDefinitionNode, ValueNode, } from 'graphql'; + +import { invariant, InvariantError } from 'ts-invariant'; + import { assign } from './util/assign'; import { valueToObjectRepresentation, JsonValue } from './storeUtils'; @@ -19,25 +22,24 @@ export function getMutationDefinition( definition.operation === 'mutation', )[0] as OperationDefinitionNode; - if (!mutationDef) { - throw new Error('Must contain a mutation definition.'); - } + invariant(mutationDef, 'Must contain a mutation definition.'); return mutationDef; } // Checks the document for errors and throws an exception if there is an error. export function checkDocument(doc: DocumentNode) { - if (!doc || doc.kind !== 'Document') { - throw new Error(`Expecting a parsed GraphQL document. Perhaps you need to wrap the query \ -string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`); - } + invariant( + doc && doc.kind === 'Document', + `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \ +string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`, + ); const operations = doc.definitions .filter(d => d.kind !== 'FragmentDefinition') .map(definition => { if (definition.kind !== 'OperationDefinition') { - throw new Error( + throw new InvariantError( `Schema type definitions not allowed in queries. Found: "${ definition.kind }"`, @@ -46,11 +48,10 @@ string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`) return definition; }); - if (operations.length > 1) { - throw new Error( - `Ambiguous GraphQL document: contains ${operations.length} operations`, - ); - } + invariant( + operations.length <= 1, + `Ambiguous GraphQL document: contains ${operations.length} operations`, + ); return doc; } @@ -68,9 +69,7 @@ export function getOperationDefinitionOrDie( document: DocumentNode, ): OperationDefinitionNode { const def = getOperationDefinition(document); - if (!def) { - throw new Error(`GraphQL document is missing an operation`); - } + invariant(def, `GraphQL document is missing an operation`); return def; } @@ -97,9 +96,10 @@ export function getFragmentDefinitions( export function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode { const queryDef = getOperationDefinition(doc) as OperationDefinitionNode; - if (!queryDef || queryDef.operation !== 'query') { - throw new Error('Must contain a query definition.'); - } + invariant( + queryDef && queryDef.operation === 'query', + 'Must contain a query definition.', + ); return queryDef; } @@ -107,20 +107,23 @@ export function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode { export function getFragmentDefinition( doc: DocumentNode, ): FragmentDefinitionNode { - if (doc.kind !== 'Document') { - throw new Error(`Expecting a parsed GraphQL document. Perhaps you need to wrap the query \ -string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`); - } + invariant( + doc.kind === 'Document', + `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \ +string in a "gql" tag? http://docs.apollostack.com/apollo-client/core.html#gql`, + ); - if (doc.definitions.length > 1) { - throw new Error('Fragment must have exactly one definition.'); - } + invariant( + doc.definitions.length <= 1, + 'Fragment must have exactly one definition.', + ); const fragmentDef = doc.definitions[0] as FragmentDefinitionNode; - if (fragmentDef.kind !== 'FragmentDefinition') { - throw new Error('Must be a fragment definition.'); - } + invariant( + fragmentDef.kind === 'FragmentDefinition', + 'Must be a fragment definition.', + ); return fragmentDef as FragmentDefinitionNode; } @@ -159,7 +162,7 @@ export function getMainDefinition( return fragmentDefinition; } - throw new Error( + throw new InvariantError( 'Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.', ); } diff --git a/packages/apollo-utilities/src/storeUtils.ts b/packages/apollo-utilities/src/storeUtils.ts index 31e81c97665..2bd1e53a60f 100644 --- a/packages/apollo-utilities/src/storeUtils.ts +++ b/packages/apollo-utilities/src/storeUtils.ts @@ -17,6 +17,7 @@ import { } from 'graphql'; import stringify from 'fast-json-stable-stringify'; +import { InvariantError } from 'ts-invariant'; export interface IdValue { type: 'id'; @@ -127,7 +128,7 @@ export function valueToObjectRepresentation( } else if (isNullValue(value)) { argObj[name.value] = null; } else { - throw new Error( + throw new InvariantError( `The inline argument "${name.value}" of kind "${(value as any).kind}"` + 'is not supported. Use variables instead of inline arguments to ' + 'overcome this limitation.', @@ -303,7 +304,7 @@ export function isJsonValue(jsonObject: StoreValue): jsonObject is JsonValue { } function defaultValueFromVariable(node: VariableNode) { - throw new Error(`Variable nodes are not supported by valueFromNode`); + throw new InvariantError(`Variable nodes are not supported by valueFromNode`); } export type VariableValue = (node: VariableNode) => any; From ad0fffb826f51e8b83b17ce744f4a445294c6df1 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Feb 2019 13:35:44 -0500 Subject: [PATCH 060/230] Lower bundle size limits to reflect recent improvements. --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 27da4b34bf7..8d18fb539f7 100644 --- a/package.json +++ b/package.json @@ -24,22 +24,22 @@ { "name": "apollo-cache", "path": "./packages/apollo-cache/lib/bundle.cjs.min.js", - "maxSize": "900 B" + "maxSize": "825 B" }, { "name": "apollo-cache-inmemory", "path": "./packages/apollo-cache-inmemory/lib/bundle.cjs.min.js", - "maxSize": "6.2 kB" + "maxSize": "4.9 kB" }, { "name": "apollo-client", "path": "./packages/apollo-client/lib/bundle.cjs.min.js", - "maxSize": "13 kB" + "maxSize": "10.6 kB" }, { "name": "apollo-utilities", "path": "./packages/apollo-utilities/lib/bundle.cjs.min.js", - "maxSize": "4.75 kB" + "maxSize": "4.15 kB" } ], "lint-staged": { From ada6057dc4a30ec07b7e8ef2f68e9372e16e1e12 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 7 Feb 2019 14:22:24 -0500 Subject: [PATCH 061/230] chore: Publish - apollo-boost@0.3.0-beta.1 - apollo-cache-inmemory@1.5.0-beta.1 - apollo-cache@1.2.0-beta.1 - apollo-client@2.5.0-beta.1 - apollo-utilities@1.2.0-beta.1 - graphql-anywhere@4.2.0-beta.1 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index fbd8b94f6b6..e164db87cbe 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-beta.0", + "version": "0.3.0-beta.1", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index dec360eb42e..8235940d8a7 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-beta.0", + "version": "1.5.0-beta.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 960be6efdf5..c3596dc0ba3 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-beta.0", + "version": "1.2.0-beta.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 057dfcbdcd9..b1b52357546 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-beta.0", + "version": "2.5.0-beta.1", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 4bde2b81c31..7c3c8d59ee6 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0-beta.0", + "version": "1.2.0-beta.1", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index fb948d69073..0d6b1a71661 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-beta.0", + "version": "4.2.0-beta.1", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From 0b2be41212a5fc362727b7912fb7d736eab61e01 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 12 Feb 2019 22:06:53 -0500 Subject: [PATCH 062/230] First round of updates from peer review --- docs/source/essentials/local-state.md | 461 ++++++++++++++------------ 1 file changed, 245 insertions(+), 216 deletions(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 117d1dc02da..97e0ccfb076 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -13,116 +13,9 @@ Please note that this documentation is intended to be used to familiarize yourse > ⚠️ If you're interested in integrating local state handling capabilities with Apollo Client < 2.5, please refer to our (now deprecated) [`apollo-link-state`](https://github.com/apollographql/apollo-link-state) project. As of Apollo Client 2.5, local state handling is baked into the core, which means it is no longer necessary to use `apollo-link-state`. For help migrating from `apollo-link-state` to Apollo Client 2.5, please refer to the [Migrating from `apollo-link-state`](#migrating) section. -

API

- -Apollo Client local state handling is baked in, so you don't have to install anything extra. Local state management can be configured during `ApolloClient` instantiation (via the `ApolloClient` constructor) or by using the `ApolloClient` local state API. Data in the cache can be managed through the `ApolloCache` API. - -

ApolloClient

- -

Constructor

- -```js -import { ApolloClient } from 'apollo-client'; -import { InMemoryCache } from 'apollo-cache-inmemory'; - -const client = new ApolloClient({ - cache: new InMemoryCache(), - resolvers: { ... }, - typeDefs: { ... }, -}); -``` - -
-
`resolvers?`: Resolvers | Resolvers[]
-
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache.
-
`typeDefs?`: string | string[] | DocumentNode | DocumentNode[];
-
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
-
- -None of these options are required. If you don't specify anything, you will still be able to use the `@client` directive to query the Apollo Client cache. - -

Methods

- -```js -import { ApolloClient } from 'apollo-client'; -import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink } from 'apollo-link'; - -const client = new ApolloClient({ - cache: new InMemoryCache(), - link: ApolloLink.empty(), -}); - -client.setResolvers({ ... }); -``` - -
-
`addResolvers(resolvers: Resolvers | Resolvers[])`
-
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `addResolvers` are added to the internal resolver function map, meaning any existing resolvers (that aren't overwritten) are preserved.
-
`setResolvers(resolvers: Resolvers | Resolvers[])`:
-
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `setResolvers` overwrite all existing resolvers (a pre-existing resolver map is wiped out, before the new resolvers are added).
-
`getResolvers`
-
Get the currently defined resolver map.
-
`setTypeDefs(typeDefs: string | string[] | DocumentNode | DocumentNode[])`
-
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language), or as a GraphQL AST. This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
-
`getTypeDefs`
-
Returns a string (SDL) or GraphQL AST representation of your client-side schema (if previously set via the `ApolloClient` constructor or `setTypeDefs`).
-
`setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher)`
-
Set a custom `FragmentMatcher` to be used when resolving local state queries involving [fragments on unions or interfaces](/docs/react/advanced/fragments.html#fragment-matcher).
-
- -**Typescript interfaces/types:** - -```ts -interface Resolvers { - [key: string]: { - [field: string]: ( - rootValue?: any, - args?: any, - context?: any, - info?: any, - ) => any; - }; -} - -type FragmentMatcher = ( - rootValue: any, - typeCondition: string, - context: any, -) => boolean; -``` - -

ApolloCache

- -

Methods

- -```js -import { InMemoryCache } from 'apollo-cache-inmemory'; - -cache.writeData({ - data: { - isLoggedIn: !!localStorage.getItem('token'), - cartItems: [], - }, -}); -``` - -
-
`writeData({ id, data })`
-
Write data directly to the cache without having to pass in a query. Great for prepping the cache with initial data.
-
`writeQuery({ query, variables, data })`
-
Similar to `writeData` (writes data to the cache) but uses the specified query to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the query.
-
`readQuery({ query, variables })`
-
Read data from the cache for the specified query.
-
`writeFragment({ id, fragment, fragmentName, variables, data })`
-
Similar to `writeData` (writes data to the cache) but uses the specified fragment to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the fragment.
-
`readFragment({ id, fragment, fragmentName, variables })`
-
Read data from the cache for the specified fragment.
-
-

Updating local state

-There are two main ways to perform local state mutations. The first way is to directly write to the cache by calling `cache.writeData` within an `ApolloConsumer` or through a `Query` component. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is by creating a `Mutation` component with a GraphQL mutation that calls a local client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean. You can think of direct writes like calling React's `setState`, whereas local resolvers offer a bit more structure like Redux. +There are two main ways to perform local state mutations. The first way is to directly write to the cache by calling `cache.writeData`. Direct writes are great for one-off mutations that don't depend on the data that's currently in the cache, such as writing a single value. The second way is by creating a `Mutation` component with a GraphQL mutation that calls a local client-side resolver. We recommend using resolvers if your mutation depends on existing values in the cache, such as adding an item to a list or toggling a boolean.

Direct writes

@@ -166,7 +59,6 @@ const GET_VISIBILITY_FILTER = gql` } `; -// Remember to set an initial value for visibilityFilter using an initializer. const FilterLink = ({ filter, children }) => ( {({ data, client }) => ( @@ -183,11 +75,11 @@ const FilterLink = ({ filter, children }) => ( You'll notice in our query that we have a `@client` directive next to our `visibilityFilter` field. This tells Apollo Client to fetch the field data locally (either from the cache or using a local resolver), instead of sending it to our GraphQL server. Once you call `client.writeData`, the query result on the render prop function will automatically update. All cache writes and reads are synchronous, so you don't have to worry about loading state. -

Local Resolvers

+

Local resolvers

If you'd like to implement your local state update as a GraphQL mutation, then you'll need to specify a function in your local resolver map. The resolver map is an object with resolver functions for each GraphQL object type. To visualize how this all lines up, it's useful to think of a GraphQL query or mutation as a tree of function calls for each field. These function calls resolve to data or another function call. So when a GraphQL query is run through Apollo Client, it looks for a way to essentially run functions for each field in the query. When it finds an `@client` directive on a field, it turns to its internal resolver map looking for a function it can run for that field. -To help make local resolvers more flexible, the signature of a resolver function is the exact same as resolver functions on the server built with [`graphql-tools`](/docs/graphql-tools/resolvers.html#Resolver-function-signature). Let's recap the four parameters of a resolver function: +To help make local resolvers more flexible, the signature of a resolver function is the exact same as resolver functions on the server built with [Apollo Server](docs/apollo-server/essentials/data.html). Let's recap the four parameters of a resolver function: ```js fieldName: (obj, args, context, info) => result; @@ -195,7 +87,10 @@ fieldName: (obj, args, context, info) => result; 1. `obj`: The object containing the result returned from the resolver on the parent field or the `ROOT_QUERY` object in the case of a top-level query or mutation. 2. `args`: An object containing all of the arguments passed into the field. For example, if you called a mutation with `updateNetworkStatus(isConnected: true)`, the `args` object would be `{ isConnected: true }`. -3. `context`: The context object, which is shared between your React components and your Apollo Client network stack. The most important thing to note here is that we've added the Apollo cache to the context for you, so you can manipulate the cache with `readQuery`, `writeQuery`, `readFragment`, `writeFragment`, and `writeData`. You can learn more about these methods in [Managing the cache](#managing-the-cache). We've also added the current Apollo Client instance to the `context` under a `client` property, in-case you're interested in calling into other parts of the Apollo Client API from a resolver. +3. `context`: An object of contextual information shared between your React components and your Apollo Client network stack. In addition to any custom context properties that may be present, local resolvers always receive the following: + - `context.client`: The Apollo Client instance. + - `context.cache`: The Apollo Cache instance, which can be used to manipulate the cache with `context.cache.readQuery`, `.writeQuery`, `.readFragment`, `.writeFragment`, and `.writeData`. You can learn more about these methods in [Managing the cache](#managing-the-cache). + - `context.getCacheKey`: Get a key from the cache using a `__typename` and `id`. 4. `info`: Information about the execution state of the query. You will probably never have to use this one. Let's take a look at an example of a resolver where we toggle a todo's completed status: @@ -205,7 +100,7 @@ import { ApolloClient } from 'apollo-client'; import { InMemoryCache } from 'apollo-cache-inmemory'; const client = new ApolloClient({ - cache: new InMemeoryCache(), + cache: new InMemoryCache(), resolvers: { Mutation: { toggleTodo: (_root, variables, { cache, getCacheKey }) => { @@ -297,7 +192,7 @@ const TodoList = () => ( Here we create our GraphQL query and add `@client` directives to `todos` and `visibilityFilter`. We then pass the query to our `Query` component. The `@client` directives here let the `Query` component know that `todos` and `visibilityFilter` should be pulled from the Apollo Client cache or resolved using pre-defined local resolvers. The following sections help explain how both options work in more detail. -> ⚠️ Since the above query runs as soon as the component is mounted, what do we do if there are no todos in the cache or there aren't any local resolvers defined to help calculate `todos`? We need to write an initial state to the cache before the query is run to prevent it from erroring out. Refer to the [Initializing the cache](#cache-initialization) section above for more information. +> ⚠️ Since the above query runs as soon as the component is mounted, what do we do if there are no todos in the cache or there aren't any local resolvers defined to help calculate `todos`? We need to write an initial state to the cache before the query is run to prevent it from erroring out. Refer to the [Initializing the cache](#cache-initialization) section below for more information.

Initializing the cache

@@ -327,6 +222,30 @@ cache.writeData({ Sometimes you may need to [reset the store](/docs/react/features/cache-updates.html#reset-store) in your application, when a user logs out for example. If you call `client.resetStore` anywhere in your application, you will likely want to initialize your cache again. You can do this using the `client.onResetStore` method to register a callback that will call `cache.writeData` again. +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const cache = new InMemoryCache(); +const client = new ApolloClient({ + cache, + resolvers: { /* ... */ }, +}); + +const data = { + todos: [], + visibilityFilter: 'SHOW_ALL', + networkStatus: { + __typename: 'NetworkStatus', + isConnected: false, + }, +}; + +cache.writeData({ data }); + +client.onResetStore(() => cache.writeData({ data })); +``` +

Local data query flow

When a query containing `@client` directives is executed, Apollo Client runs through a few sequential steps to try to find a result for the `@client` field. Let's use the following query to walk through the local data look up flow: @@ -414,23 +333,108 @@ Here when the `GET_LAUNCH_DETAILS` query is executed, Apollo Client looks for a Setting resolvers through `ApolloClient`'s constructor `resolvers` parameter, or through its `setResolvers` / `addResolvers` methods, adds resolvers to Apollo Client's internal resolver map (refer to the [Local resolvers](#local-resolvers) section for more details concerning the resolver map). In the above example we added a `isInCart` resolver, for the `Launch` GraphQL object type, to the resolver map. Let's look at the `isInCart` resolver function more closely: ```js -isInCart: (launch, _args, { cache }) => { - const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); - return cartItems.includes(launch.id); -}, + resolvers: { + Launch: { + isInCart: (launch, _args, { cache }) => { + const { cartItems } = cache.readQuery({ query: GET_CART_ITEMS }); + return cartItems.includes(launch.id); + }, + }, + }, ``` `launch` holds the data returned from the server for the rest of the query, which means in this case we can use `launch` to get the current launch `id`. We aren't using any arguments in this resolver, so we can skip the second resolver parameter. From the `context` however (the third parameter), we're using the `cache` reference, to work directly with the cache ourselves. So in this resolver, we're making a call directly to the cache to get all cart items, checking to see if any of those loaded cart items matches the parent `launch.id`, and returning `true` / `false` accordingly. The returned boolean is then incorporated back into the result of running the original query. Just like resolvers on the server, local resolvers are extremely flexible. They can be used to perform any kind of local computation you want, before returning a result for the specified field. You can manually query (or write to) the cache in different ways, call other helper utilities or libraries to prep/validate/clean data, track statistics, call into other data stores to prep a result, etc. +

Integrating `@client` into remote queries

+ +While Apollo Client’s local state handling features can be used to work with local state exclusively, most Apollo based applications are built to work with remote data sources. To address this, Apollo Client supports mixing `@client` based local resolvers with remote queries, as well as using `@client` based fields as arguments to remote queries, in the same request. + +The `@client` directive can be used on any GraphQL selection set or field, to identify that the result of that field should be loaded locally with the help of a local resolver: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const MEMBER_DETAILS = gql` + query Member { + member { + name + role + isLoggedIn @client + } + } +`; + +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache: new InMemoryCache(), + resolvers: { + Member: { + isLoggedIn() { + return someInternalLoginVerificationFunction(); + } + } + }, +}); + +// ... run the query using client.query, the component, etc. +``` + +When the above `MEMBER_DETAILS` query is fired by Apollo Client (assuming we're talking to a network based GraphQL API), the `@client` `isLoggedIn` field is first stripped from the document, and the remaining query is sent over the network to the GraphQL API. After the query has been handled by the remote resolvers and the result is passed back to Apollo Client from the API, the `@client` parts of the original query are then run against any defined local resolvers, their results are merged with the network results, and the final resulting data is returned as the response to the original operation. So in the above example, `isLoggedIn` is stripped before the rest of the query is sent and handled by the network API, then when the results come back `isLoggedIn` is calculated by running the `isLoggedIn()` function from the resolver map. Local and network results are merged together, and the final response is made available to the application. + +The `@client` directive can be used with entire selection sets as well: + +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; +import gql from 'graphql-tag'; + +const MEMBER_DETAILS = gql` + query Member { + member { + name + role + session @client { + isLoggedIn + connectionCount + errors + } + } + } +`; + +const client = new ApolloClient({ + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + cache: new InMemoryCache(), + resolvers: { + Session: { + session() { + return { + __typename: 'Session', + isLoggedIn: someInternalLoginVerificationFunction(), + connectionCount: calculateOpenConnections(), + errors: sessionError(), + }; + } + } + }, +}); +``` + +Apollo Client supports the merging of local `@client` results and remote results for Queries, Mutations and Subscriptions. +

Async local resolvers

-Apollo Client supports asynchronous local resolver functions. These functions can either be `async` functions or ordinary functions that return a Promise. This can be useful for performing side effects like accessing a device API. +Apollo Client supports asynchronous local resolver functions. These functions can either be `async` functions or ordinary functions that return a `Promise`. Asynchronous resolvers are useful when they need to return data from an asynchronous API. > ⚠️ If you would like to hit a REST endpoint from your resolver, [we recommend checking out `apollo-link-rest`](https://github.com/apollographql/apollo-link-rest) instead, which is a more complete solution for using REST endpoints with Apollo Client. -For React Native and most browser APIs, you should set up a listener in a component lifecycle method and pass in your mutation trigger function as the callback instead of using an async resolver. However, there are some cases where it's beneficial to perform a side effect within a resolver: +For React Native and most browser APIs, you should set up a listener in a component lifecycle method and pass in your mutation trigger function as the callback instead of using an async resolver. However, an `async` resolver function is often the most convenient way to consume asynchronous device APIs: ```js import { ApolloClient } from 'apollo-client'; @@ -441,7 +445,7 @@ const client = new ApolloClient({ cache: new InMemoryCache(), resolvers: { Query: { - cameraRoll: async (_, { assetType }) => { + async cameraRoll(_, { assetType }) { try { const media = await CameraRoll.getPhotos({ first: 20, @@ -463,7 +467,7 @@ const client = new ApolloClient({ }); ``` -[`CameraRoll.getPhotos()`](https://facebook.github.io/react-native/docs/cameraroll.html#getphotos) returns a Promise resolving to an object with a `edges` property, which is an array of camera node objects, and a `page_info` property, which is an object with pagination information. This is a great use case for GraphQL, since we can filter down the return value to only the data that our components consume. +[`CameraRoll.getPhotos()`](https://facebook.github.io/react-native/docs/cameraroll.html#getphotos) returns a `Promise` resolving to an object with a `edges` property, which is an array of camera node objects, and a `page_info` property, which is an object with pagination information. This is a great use case for GraphQL, since we can filter down the return value to only the data that our components consume. ```js import gql from 'graphql-tag'; @@ -490,15 +494,15 @@ const GET_PHOTOS = gql`

Handling `@client` fields with the cache

-As outlined in [Handling `@client` fields with resolvers](#client-fields-resolvers), `@client` fields can be resolved with the help of local resolver functions. While local resolvers can be super helpful, it's important to note that they are not always required when using an `@client` directive. Fields marked with `@client` can still be resolved locally, by pulling matching values out of the cache directly. Let's look at an example of this: +As outlined in [Handling `@client` fields with resolvers](#client-fields-resolvers), `@client` fields can be resolved with the help of local resolver functions. However, it's important to note that local resolvers are not always required when using an `@client` directive. Fields marked with `@client` can still be resolved locally, by pulling matching values out of the cache directly. For example: ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import { ApolloClient } from 'apollo-client'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink } from 'apollo-link'; -import {Query, ApolloProvider} from 'react-apollo'; +import { HttpLink } from 'apollo-link-http'; +import { Query, ApolloProvider } from 'react-apollo'; import gql from 'graphql-tag'; import Pages from './pages'; @@ -507,7 +511,7 @@ import Login from './pages/login'; const cache = new InMemoryCache(); const client = new ApolloClient({ cache, - link: ApolloLink.empty(), + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), }); cache.writeData({ @@ -652,89 +656,6 @@ The `isLoggedIn` resolver above is checking to see if an authentication token ex While `@client(always: true)` ensures that a local resolver is always fired, it's important to note that if a query is using a `fetchPolicy` that leverages the cache first (`cache-first`, `cache-and-network`, `cache-only`), the query is still attempted to be resolved from the cache first, before the local resolver is fired. This happens because `@client(always: true)` use could be mixed with normal `@client` use in the same query, which means we want part of the query to adhere to the defined `fetchPolicy`. The benefit of this is that anything that can be loaded from the cache first is made available to your `@client(always: true)` resolver function, as its [first parameter](#local-resolvers). So even though you've used `@client(always: true)` to identify that you want to always run a specific resolver, within that resolver you can look at the loaded cache values for the query, and decide if you want to proceed with running the resolver. -

Combining local and remote data

- -While Apollo Client's local state handling features can be used to work with local state exclusively, most Apollo based applications are built to work with remote data sources. To address this, Apollo Client supports mixing `@client` based local resolvers with remote queries, as well as using `@client` based fields as arguments to remote queries, in the same request. These features are outlined below. - -

Integrating `@client` into remote queries

- -The `@client` directive can be used on any GraphQL selection set or field, to identify that the result of that field should be loaded locally with the help of a local resolver. Apollo Client supports mixing `@client` directive based fields with GraphQL documents that are intended to handled by remote resolvers: - -```js -import { ApolloClient } from 'apollo-client'; -import { InMemoryCache } from 'apollo-cache-inmemory'; -import { HttpLink } from 'apollo-link-http'; -import gql from 'graphql-tag'; - -const MEMBER_DETAILS = gql` - query Member { - member { - name - role - isLoggedIn @client - } - } -`; - -const client = new ApolloClient({ - link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), - cache: new InMemoryCache(), - resolvers: { - Member: { - isLoggedIn() { - return someInternalLoginVerificationFunction(); - } - } - }, -}); - -// ... run the query using client.query, the component, etc. -``` - -When the above `MEMBER_DETAILS` query is fired by Apollo Client (assuming we're talking to a network based GraphQL API), the `@client` `isLoggedIn` field is first stripped from the document, and the remaining query is sent over the network to the GraphQL API. After the query has been handled by the remote resolvers and the result is passed back to Apollo Client from the API, the `@client` parts of the original query are then run against any defined local resolvers, their results are merged with the network results, and the final resulting data is returned as the response to the original operation. So in the above example, `isLoggedIn` is stripped before the rest of the query is sent and handled by the network API, then when the results come back `isLoggedIn` is calculated by running the `isLoggedIn()` function from the resolver map. Local and network results are merged together, and the final response is made available to the application. - -The `@client` directive can be used with entire selection sets as well: - -```js -import { ApolloClient } from 'apollo-client'; -import { InMemoryCache } from 'apollo-cache-inmemory'; -import { HttpLink } from 'apollo-link-http'; -import gql from 'graphql-tag'; - -const MEMBER_DETAILS = gql` - query Member { - member { - name - role - session @client { - isLoggedIn - connectionCount - errors - } - } - } -`; - -const client = new ApolloClient({ - link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), - cache: new InMemoryCache(), - resolvers: { - Session: { - session() { - return { - __typename: 'Session', - isLoggedIn: someInternalLoginVerificationFunction(), - connectionCount: calculateOpenConnections(), - errors: sessionError(), - }; - } - } - }, -}); -``` - -Apollo Client supports the merging of local `@client` results and remote results for Queries, Mutations and Subscriptions. -

Using `@client` fields as variables

Apollo Client provides a way to use an `@client` field result as a variable for a selection set or field, in the same operation. So instead of running an `@client` based query first, getting the local result, then running a second query using the loaded local result as a variable, everything can be handled in one request. This is achieved by combining the `@client` directive with the `@export(as: "variableName")` directive: @@ -937,7 +858,7 @@ const client = new ApolloClient({ const previous = cache.readQuery({ query }); const newTodo = { id: nextTodoId++, text, completed: false, __typename: 'TodoItem' }; const data = { - todos: previous.todos.concat([newTodo]), + todos: [...previous.todos, newTodo], }; // you can also do cache.writeData({ data }) here if you prefer @@ -998,7 +919,7 @@ The following demonstrates how to configure a client-side schema through the `Ap ```js import { ApolloClient } from 'apollo-client'; import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink } from 'apollo-link'; +import { HttpLink } from 'apollo-link-http'; import gql from 'graphql-tag'; const typeDefs = gql` @@ -1018,7 +939,7 @@ const typeDefs = gql` const client = new ApolloClient({ cache: new InMemoryCache(), - link: ApolloLink.empty(), + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), typeDefs, }); ``` @@ -1031,7 +952,7 @@ If you open up Apollo Client Devtools and click on the `GraphiQL` tab, you'll be The [`apollo-link-state`](https://github.com/apollographql/apollo-link-state) project was the first to bring local state handling into the Apollo ecosystem. Handling local resolvers through the addition of an `ApolloLink` was a great starting point, and proved that `@client` based queries make sense, and work really well for local state management. -While `apollo-link-state` works well, and it's nice to be able to modularly include local state handling when required, the use of an `ApolloLink` introduces a few hard to work around limitations. Local state handling in a link is restricted to only being able to leverage the API elements available within the link. We see local state management as an important part of the Apollo ecosystem, and as Apollo Client progresses, we want to make sure the handling of local resolvers are integrated as tightly as possible into core. This opens up new possibilities (like `@export` handling) and will tie nicely into the future planned adjustments to cache data retention, invalidation, garbage collection, etc. +While `apollo-link-state` achieved some of the goals of local state handling, the information available when using any `ApolloLink` is limited by the modularity of the link system. We consider local state management a core part of the Apollo ecosystem, and as Apollo Client progresses, we want to make sure local resolvers are integrated as tightly as possible into core. This integration opens up new possibilities (like `@export` handling) and ties nicely into the future planned adjustments to cache data retention, invalidation, garbage collection, and other planned features that impact both local and remote data. Updating your application to use Apollo Client's local state management features, instead of `apollo-link-state`, is fairly straightforward. The necessary steps are outlined below. @@ -1057,7 +978,8 @@ Updating your application to use Apollo Client's local state management features resolvers: { ... }, }); ``` - It's important to note here that `defaults` are no longer supported. To prep the cache, use [`cache.writeData`](#write-data) directly instead. So + +3. `defaults` are no longer supported. To prep the cache, use [`cache.writeData`](#write-data) directly instead. So ```js const cache = new InMemoryCache(); @@ -1090,9 +1012,9 @@ Updating your application to use Apollo Client's local state management features }); ``` -3. If you're using Apollo Boost, you shouldn't have to change anything. Apollo Boost has been updated to use Apollo Client's integrated local state handling, which means it is no longer using `apollo-link-state`. Behind the scenes, the Apollo Boost `clientState` constructor parameter now feeds the necessary local state initialization directly into Apollo Client. +4. If you're using Apollo Boost, you shouldn't have to change anything. Apollo Boost has been updated to use Apollo Client's integrated local state handling, which means it is no longer using `apollo-link-state`. Behind the scenes, the Apollo Boost `clientState` constructor parameter now feeds the necessary local state initialization directly into Apollo Client. -4. Test thoroughly! 🙂 +5. Test thoroughly! 🙂

Next steps

@@ -1103,3 +1025,110 @@ Managing your local data with Apollo Client can help simplify your state managem - Interested in suggesting or working on future changes to help make Apollo Client's local state management even better? We'd love the help! [Open a new feature request](https://github.com/apollographql/apollo-feature-requests) to kick start your feature discussion. - Found a bug? Impossible! 🙈 Open a new issue in the [Apollo Client repo](https://github.com/apollographql/apollo-client), ideally with a small runnable reproduction, and someone from the community or Apollo team will help get it fixed. +

API

+ +Apollo Client local state handling is baked in, so you don't have to install anything extra. Local state management can be configured during `ApolloClient` instantiation (via the `ApolloClient` constructor) or by using the `ApolloClient` local state API. Data in the cache can be managed through the `ApolloCache` API. + +

ApolloClient

+ +

Constructor

+ +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + resolvers: { ... }, + typeDefs: { ... }, +}); +``` + +
+
`resolvers?`: Resolvers | Resolvers[]
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache.
+
`typeDefs?`: string | string[] | DocumentNode | DocumentNode[];
+
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language). This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
+
+ +None of these options are required. If you don't specify anything, you will still be able to use the `@client` directive to query the Apollo Client cache. + +

Methods

+ +```js +import { ApolloClient } from 'apollo-client'; +import { InMemoryCache } from 'apollo-cache-inmemory'; +import { HttpLink } from 'apollo-link-http'; + +const client = new ApolloClient({ + cache: new InMemoryCache(), + link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), +}); + +client.setResolvers({ ... }); +``` + +
+
`addResolvers(resolvers: Resolvers | Resolvers[])`
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `addResolvers` are added to the internal resolver function map, meaning any existing resolvers (that aren't overwritten) are preserved.
+
`setResolvers(resolvers: Resolvers | Resolvers[])`:
+
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `setResolvers` overwrite all existing resolvers (a pre-existing resolver map is wiped out, before the new resolvers are added).
+
`getResolvers`
+
Get the currently defined resolver map.
+
`setTypeDefs(typeDefs: string | string[] | DocumentNode | DocumentNode[])`
+
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language), or as a GraphQL AST. This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
+
`getTypeDefs`
+
Returns a string (SDL) or GraphQL AST representation of your client-side schema (if previously set via the `ApolloClient` constructor or `setTypeDefs`).
+
`setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher)`
+
Set a custom `FragmentMatcher` to be used when resolving local state queries involving [fragments on unions or interfaces](/docs/react/advanced/fragments.html#fragment-matcher).
+
+ +**Typescript interfaces/types:** + +```ts +interface Resolvers { + [key: string]: { + [field: string]: ( + rootValue?: any, + args?: any, + context?: any, + info?: any, + ) => any; + }; +} + +type FragmentMatcher = ( + rootValue: any, + typeCondition: string, + context: any, +) => boolean; +``` + +

ApolloCache

+ +

Methods

+ +```js +import { InMemoryCache } from 'apollo-cache-inmemory'; + +const cache = new InMemoryCache(); +cache.writeData({ + data: { + isLoggedIn: !!localStorage.getItem('token'), + cartItems: [], + }, +}); +``` + +
+
`writeData({ id, data })`
+
Write data directly to the root of the cache without having to pass in a query. Great for prepping the cache with initial data. If you would like to write data to an existing entry in the cache, pass in the entry's cache key to `id`.
+
`writeQuery({ query, variables, data })`
+
Similar to `writeData` (writes data to the root of the cache) but uses the specified query to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the query.
+
`readQuery({ query, variables })`
+
Read data from the cache for the specified query.
+
`writeFragment({ id, fragment, fragmentName, variables, data })`
+
Similar to `writeData` (writes data to an existing entry in the cache) but uses the specified fragment to validate that the shape of the data you’re writing to the cache is the same as the shape of the data required by the fragment.
+
`readFragment({ id, fragment, fragmentName, variables })`
+
Read data from the cache for the specified fragment.
+
From 6f65734b764767484492cf33438cad89875b8e67 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Feb 2019 06:25:48 +0000 Subject: [PATCH 063/230] chore(deps): update dependency @types/graphql to v14.0.7 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 647beca5447..fb972628365 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1668,9 +1668,9 @@ "dev": true }, "@types/graphql": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.0.5.tgz", - "integrity": "sha512-bwGYLE0SRy5ZraC91dqI2bxbspfm10kyJ2Yjuvk4OjdGznh7fkoWW+xXZHfFydJaqu9syZi099cpiZw3GlPDiA==", + "version": "14.0.7", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.0.7.tgz", + "integrity": "sha512-BoLDjdvLQsXPZLJux3lEZANwGr3Xag56Ngy0U3y8uoRSDdeLcn43H3oBcgZlnd++iOQElBpaRVDHPzEDekyvXQ==", "dev": true }, "@types/isomorphic-fetch": { diff --git a/package.json b/package.json index 7dbfbd8eac5..ff35004b188 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "devDependencies": { "@octokit/rest": "16.15.0", "@types/benchmark": "1.0.31", - "@types/graphql": "14.0.5", + "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.34", "@types/jest": "23.3.14", "@types/lodash": "4.14.120", From a16a0bd7f553dc6dc1fc4ffe2a48ccb197751acc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Feb 2019 08:27:43 +0000 Subject: [PATCH 064/230] chore(deps): update dependency @types/isomorphic-fetch to v0.0.35 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb972628365..1f2d3e47276 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1674,9 +1674,9 @@ "dev": true }, "@types/isomorphic-fetch": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.34.tgz", - "integrity": "sha1-PDSD5gbAQTeEOOlRRk8A5OYHBtY=", + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz", + "integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==", "dev": true }, "@types/jest": { diff --git a/package.json b/package.json index ff35004b188..f6c36b7bac2 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@octokit/rest": "16.15.0", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", - "@types/isomorphic-fetch": "0.0.34", + "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.120", "@types/node": "10.12.24", From e216fb68b9c191edfb4610597ebe9555fd7643ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Feb 2019 09:29:57 +0000 Subject: [PATCH 065/230] chore(deps): update dependency @types/lodash to v4.14.121 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1f2d3e47276..e5709e4b822 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1686,9 +1686,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.120", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.120.tgz", - "integrity": "sha512-jQ21kQ120mo+IrDs1nFNVm/AsdFxIx2+vZ347DbogHJPd/JzKNMOqU6HCYin1W6v8l5R9XSO2/e9cxmn7HAnVw==", + "version": "4.14.121", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.121.tgz", + "integrity": "sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==", "dev": true }, "@types/node": { diff --git a/package.json b/package.json index f6c36b7bac2..bb8204abe9f 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", - "@types/lodash": "4.14.120", + "@types/lodash": "4.14.121", "@types/node": "10.12.24", "@types/react": "16.8.2", "@types/react-dom": "16.8.0", From cf8f0f87966e184d558bc4e64214c526af7ce410 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Feb 2019 10:37:08 +0000 Subject: [PATCH 066/230] chore(deps): update dependency @types/node to v10.12.26 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5709e4b822..7417d81a4ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1692,9 +1692,9 @@ "dev": true }, "@types/node": { - "version": "10.12.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.24.tgz", - "integrity": "sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ==", + "version": "10.12.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", + "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==", "dev": true }, "@types/prop-types": { diff --git a/package.json b/package.json index bb8204abe9f..f998620d0b4 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.121", - "@types/node": "10.12.24", + "@types/node": "10.12.26", "@types/react": "16.8.2", "@types/react-dom": "16.8.0", "benchmark": "2.1.4", From ed5f7114810a439e9e65346f5b5b04d19515b095 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Feb 2019 11:37:35 +0000 Subject: [PATCH 067/230] chore(deps): update dependency codecov to v3.2.0 --- package-lock.json | 19 +++++++++++++++---- package.json | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7417d81a4ad..43ee4221934 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3700,15 +3700,15 @@ "dev": true }, "codecov": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", - "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", + "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", "js-yaml": "^3.12.0", - "request": "^2.87.0", + "teeny-request": "^3.7.0", "urlgrey": "^0.4.4" } }, @@ -13445,6 +13445,17 @@ "xtend": "^4.0.0" } }, + "teeny-request": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", + "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1", + "node-fetch": "^2.2.0", + "uuid": "^3.3.2" + } + }, "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", diff --git a/package.json b/package.json index f998620d0b4..61cd4cb0c7d 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "benchmark": "2.1.4", "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", - "codecov": "3.1.0", + "codecov": "3.2.0", "danger": "7.0.10", "fetch-mock": "7.3.0", "flow-bin": "0.92.1", From a27d9b793de76274a1792119fc9d8c08876b6d2f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Feb 2019 13:25:38 +0000 Subject: [PATCH 068/230] chore(deps): update dependency danger to v7.0.12 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43ee4221934..739a85cb01c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4131,9 +4131,9 @@ } }, "danger": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.10.tgz", - "integrity": "sha512-yAdEHaPAoXJLVW8xSHRd/vXy+jf8Kc6HlwROCA2G4N2YIV55lrWrWYrq9mhB3hu19erDWaWDM5bN7kpt4PFNBQ==", + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.12.tgz", + "integrity": "sha512-pew8vsBs2bitXt5upLuvfEAqvVuvzLoo/BjX7ysGI3yXQ8X7vrESo1/gGRvkA4uaDEoDq7LaBR4xhxfqxk9fog==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", diff --git a/package.json b/package.json index 61cd4cb0c7d..d00c8df340d 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.10", + "danger": "7.0.12", "fetch-mock": "7.3.0", "flow-bin": "0.92.1", "graphql": "14.1.1", From 50a26164da650269ed9d488595a7f284460c4a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danilo=20B=C3=BCrger?= Date: Sat, 16 Feb 2019 02:59:55 +0100 Subject: [PATCH 069/230] Only return newData when querying current results for no-cache or network-only queries (#4352) * Only return newData when querying current results for no-cache or network-only queries * Changelog update * Max bundlesize increase --- CHANGELOG.md | 7 +++++++ package.json | 2 +- packages/apollo-client/src/core/QueryManager.ts | 6 ++++-- .../apollo-client/src/core/__tests__/ObservableQuery.ts | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 172625cff2e..4aec8ed223a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Apollo Client (vNext) +## Apollo Client (vNext) + +- Fixes an issue where the `QueryManager` was accidentally returning cached + data for `network-only` queries.
+ [@danilobuerger](https://github.com/danilobuerger) in [#4352](https://github.com/apollographql/apollo-client/pull/4352) + + ## Apollo Client (2.4.13) ### Apollo Client (2.4.13) diff --git a/package.json b/package.json index d00c8df340d..9517e8196a5 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ { "name": "apollo-client", "path": "./packages/apollo-client/lib/bundle.min.js", - "maxSize": "9.4 kB" + "maxSize": "9.5 kB" }, { "name": "apollo-utilities", diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 713c7ad312e..2cc7fa4a4b2 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -556,7 +556,7 @@ export class QueryManager { // `no-cache` since `getCurrentQueryResult` attemps to pull from // `newData` first, following by trying the cache (which won't // find a hit for `no-cache`). - if (fetchPolicy !== 'no-cache') { + if (fetchPolicy !== 'no-cache' && fetchPolicy !== 'network-only') { this.setQuery(queryId, () => ({ newData: null })); } @@ -982,12 +982,14 @@ export class QueryManager { data: T | undefined; partial: boolean; } { - const { variables, query } = observableQuery.options; + const { variables, query, fetchPolicy } = observableQuery.options; const lastResult = observableQuery.getLastResult(); const { newData } = this.getQuery(observableQuery.queryId); // XXX test this if (newData && newData.complete) { return { data: newData.result, partial: false }; + } else if (fetchPolicy === 'no-cache' || fetchPolicy === 'network-only') { + return { data: undefined, partial: false }; } else { try { // the query is brand new, so we read from the store to see if anything is there diff --git a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts index 3408bee3da9..f21d93fcb8b 100644 --- a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts +++ b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts @@ -1580,7 +1580,7 @@ describe('ObservableQuery', () => { fetchPolicy: 'network-only', }); expect(stripSymbols(observable.getCurrentResult())).toEqual({ - data: dataOne, + data: undefined, loading: true, networkStatus: 1, partial: false, From 2305d30cf7fca144f4c5dddbb872cd1fa11eec50 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Feb 2019 06:23:41 +0000 Subject: [PATCH 070/230] chore(deps): update dependency @types/react to v16.8.3 --- package-lock.json | 32 ++++++++++++++++++++++---------- package.json | 4 ++-- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 739a85cb01c..2b4b04c32f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1698,15 +1698,15 @@ "dev": true }, "@types/prop-types": { - "version": "15.5.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", - "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==", + "version": "15.5.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.9.tgz", + "integrity": "sha512-Nha5b+jmBI271jdTMwrHiNXM+DvThjHOfyZtMX9kj/c/LUj2xiLHsG/1L3tJ8DjAoQN48cHwUwtqBotjyXaSdQ==", "dev": true }, "@types/react": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.2.tgz", - "integrity": "sha512-6mcKsqlqkN9xADrwiUz2gm9Wg4iGnlVGciwBRYFQSMWG6MQjhOZ/AVnxn+6v8nslFgfYTV8fNdE6XwKu6va5PA==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.3.tgz", + "integrity": "sha512-PjPocAxL9SNLjYMP4dfOShW/rj9FDBJGu3JFRt0zEYf77xfihB6fq8zfDpMrV6s82KnAi7F1OEe5OsQX25Ybdw==", "dev": true, "requires": { "@types/prop-types": "*", @@ -11745,15 +11745,27 @@ } }, "react": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.1.tgz", - "integrity": "sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.2.tgz", + "integrity": "sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.1" + "scheduler": "^0.13.2" + }, + "dependencies": { + "scheduler": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", + "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } } }, "react-dom": { diff --git a/package.json b/package.json index 9517e8196a5..3e71831f3a2 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.121", "@types/node": "10.12.26", - "@types/react": "16.8.2", + "@types/react": "16.8.3", "@types/react-dom": "16.8.0", "benchmark": "2.1.4", "bundlesize": "0.17.1", @@ -103,7 +103,7 @@ "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", - "react": "16.8.1", + "react": "16.8.2", "react-dom": "16.8.1", "rollup": "1.1.2", "rollup-plugin-local-resolve": "1.0.7", From 918c2748033bdd3d4f370f452b700e03a732271f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Feb 2019 09:31:39 +0000 Subject: [PATCH 071/230] chore(deps): update dependency flow-bin to v0.93.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2b4b04c32f7..549074477b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5652,9 +5652,9 @@ } }, "flow-bin": { - "version": "0.92.1", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.92.1.tgz", - "integrity": "sha512-F5kC5oQOR2FXROAeybJHFqgZP+moKV9fa/53QK4Q4WayTQHdA0KSl48KD1gP0A9mioRLiKUegTva/7I15cX3Iw==", + "version": "0.93.0", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.93.0.tgz", + "integrity": "sha512-p8yq4ocOlpyJgOEBEj0v0GzCP25c9WP0ilFQ8hXSbrTR7RPKuR+Whr+OitlVyp8ocdX0j1MrIwQ8x28dacy1pg==", "dev": true }, "flush-write-stream": { diff --git a/package.json b/package.json index 3e71831f3a2..3ccb25d41e6 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "codecov": "3.2.0", "danger": "7.0.12", "fetch-mock": "7.3.0", - "flow-bin": "0.92.1", + "flow-bin": "0.93.0", "graphql": "14.1.1", "graphql-tag": "2.10.1", "isomorphic-fetch": "2.2.1", From d4b158490485ae489229eaa7d21d091b4c433693 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Feb 2019 10:29:07 +0000 Subject: [PATCH 072/230] chore(deps): update dependency lerna to v3.13.0 --- package-lock.json | 693 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 361 insertions(+), 334 deletions(-) diff --git a/package-lock.json b/package-lock.json index 549074477b7..12349560229 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,16 +129,16 @@ } }, "@lerna/add": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.11.0.tgz", - "integrity": "sha512-A2u889e+GeZzL28jCpcN53iHq2cPWVnuy5tv5nvG/MIg0PxoAQOUvphexKsIbqzVd9Damdmv5W0u9kS8y8TTow==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.0.tgz", + "integrity": "sha512-5srUGfZHjqa5BW3JODHpzbH1ayweGqqrxH8qOzf/E/giNfzigdfyCSkbGh/iiLTXGu7BBE+3/OFfycoqYbalgg==", "dev": true, "requires": { - "@lerna/bootstrap": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.11.0", + "@lerna/bootstrap": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/npm-conf": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "npm-package-arg": "^6.1.0", "p-map": "^1.2.0", @@ -155,35 +155,35 @@ } }, "@lerna/batch-packages": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.11.0.tgz", - "integrity": "sha512-ETO3prVqDZs/cpZo00ij61JEZ8/ADJx1OG/d/KtTdHlyRfQsb09Xzf0w+boimqa8fIqhpM3o5FV9GKd6GQ3iFQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.13.0.tgz", + "integrity": "sha512-TgLBTZ7ZlqilGnzJ3xh1KdAHcySfHytgNRTdG9YomfriTU6kVfp1HrXxKJYVGs7ClPUNt2CTFEOkw0tMBronjw==", "dev": true, "requires": { - "@lerna/package-graph": "3.11.0", - "@lerna/validation-error": "3.11.0", + "@lerna/package-graph": "3.13.0", + "@lerna/validation-error": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/bootstrap": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.11.0.tgz", - "integrity": "sha512-MqwviGJTy86joqSX2A3fmu2wXLBXc23tHJp5Xu4bVhynPegDnRrA3d9UI80UM3JcuYIQsxT4t2q2LNsZ4VdZKQ==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/has-npm-version": "3.10.0", - "@lerna/npm-install": "3.11.0", - "@lerna/package-graph": "3.11.0", - "@lerna/pulse-till-done": "3.11.0", - "@lerna/rimraf-dir": "3.11.0", - "@lerna/run-lifecycle": "3.11.0", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/symlink-binary": "3.11.0", - "@lerna/symlink-dependencies": "3.11.0", - "@lerna/validation-error": "3.11.0", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.13.0.tgz", + "integrity": "sha512-wdwBzvwEdzGERwpiY6Zu/T+tntCfXeXrL9cQIxP+K2M07jL5M00ZRdDoFcP90sGn568AjhvRhD2ExA5wPECSgA==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/has-npm-version": "3.13.0", + "@lerna/npm-install": "3.13.0", + "@lerna/package-graph": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/symlink-binary": "3.13.0", + "@lerna/symlink-dependencies": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "get-port": "^3.2.0", "multimatch": "^2.1.0", @@ -206,32 +206,32 @@ } }, "@lerna/changed": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.11.1.tgz", - "integrity": "sha512-A21h3DvMjDwhksmCmTQ1+3KPHg7gHVHFs3zC5lR9W+whYlm0JI2Yp70vYnqMv2hPAcJx+2tlCrqJkzCFkNQdqg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.0.tgz", + "integrity": "sha512-BNUVfEzhrY+XEQJI0fFxEAN7JrguXMGNX5rqQ2KWyGQB4fZ1mv4FStJRjK0K/gcCvdHnuR65uexc/acxBnBi9w==", "dev": true, "requires": { - "@lerna/collect-updates": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/listable": "3.11.0", - "@lerna/output": "3.11.0", - "@lerna/version": "3.11.1" + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/listable": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/version": "3.13.0" } }, "@lerna/check-working-tree": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.11.0.tgz", - "integrity": "sha512-uWKKmX4BKdK57MyX3rGNHNz4JmFP3tHnaIDDVeuSlgK5KwncPFyRXi3E9H0eiq6DUvDDLtztNOfWeGP2IY656Q==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.13.0.tgz", + "integrity": "sha512-dsdO15NXX5To+Q53SYeCrBEpiqv4m5VkaPZxbGQZNwoRen1MloXuqxSymJANQn+ZLEqarv5V56gydebeROPH5A==", "dev": true, "requires": { - "@lerna/describe-ref": "3.11.0", - "@lerna/validation-error": "3.11.0" + "@lerna/describe-ref": "3.13.0", + "@lerna/validation-error": "3.13.0" } }, "@lerna/child-process": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.3.0.tgz", - "integrity": "sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.13.0.tgz", + "integrity": "sha512-0iDS8y2jiEucD4fJHEzKoc8aQJgm7s+hG+0RmDNtfT0MM3n17pZnf5JOMtS1FJp+SEXOjMKQndyyaDIPFsnp6A==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -321,28 +321,28 @@ } }, "@lerna/clean": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.11.0.tgz", - "integrity": "sha512-sHyMYv56MIVMH79+5vcxHVdgmd8BcsihI+RL2byW+PeoNlyDeGMjTRmnzLmbSD7dkinHGoa5cghlXy9GGIqpRw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.13.0.tgz", + "integrity": "sha512-eFkqVsOmybUIjak2NyGfk78Mo8rNyNiSDFh2+HGpias3PBdEbkGYtFi/JMBi9FvqCsBSiVnHCTUcnZdLzMz69w==", "dev": true, "requires": { - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/prompt": "3.11.0", - "@lerna/pulse-till-done": "3.11.0", - "@lerna/rimraf-dir": "3.11.0", + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.13.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0" } }, "@lerna/cli": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.11.0.tgz", - "integrity": "sha512-dn2m2PgUxcb2NyTvwfYOFZf8yN5CMf1uKxht3ajQYdDjRgFi5pUQt/DmdguOZ3CMJkENa0i3yPOmrxGPXLD2aw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.13.0.tgz", + "integrity": "sha512-HgFGlyCZbYaYrjOr3w/EsY18PdvtsTmDfpUQe8HwDjXlPeCCUgliZjXLOVBxSjiOvPeOSwvopwIHKWQmYbwywg==", "dev": true, "requires": { - "@lerna/global-options": "3.10.6", + "@lerna/global-options": "3.13.0", "dedent": "^0.7.0", "npmlog": "^4.1.2", "yargs": "^12.0.1" @@ -551,29 +551,29 @@ } }, "@lerna/collect-updates": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.11.0.tgz", - "integrity": "sha512-O0Y18OC2P6j9/RFq+u5Kdq7YxsDd+up3ZRoW6+i0XHWktqxXA9P4JBQppkpYtJVK2yH8QyOzuVLQgtL0xtHdYA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.13.0.tgz", + "integrity": "sha512-uR3u6uTzrS1p46tHQ/mlHog/nRJGBqskTHYYJbgirujxm6FqNh7Do+I1Q/7zSee407G4lzsNxZdm8IL927HemQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/describe-ref": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/describe-ref": "3.13.0", "minimatch": "^3.0.4", "npmlog": "^4.1.2", "slash": "^1.0.0" } }, "@lerna/command": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.11.0.tgz", - "integrity": "sha512-N+Z5kauVHSb2VhSIfQexG2VlCAAQ9xYKwVTxYh0JFOFUnZ/QPcoqx4VjynDXASFXXDgcXs4FLaGsJxq83Mf5Zg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.13.0.tgz", + "integrity": "sha512-34Igk99KKeDt1ilzHooVUamMegArFz8AH9BuJivIKBps1E2A5xkwRd0mJFdPENzLxOqBJlt+cnL7LyvaIM6tRQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/package-graph": "3.11.0", - "@lerna/project": "3.11.0", - "@lerna/validation-error": "3.11.0", - "@lerna/write-log-file": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/package-graph": "3.13.0", + "@lerna/project": "3.13.0", + "@lerna/validation-error": "3.13.0", + "@lerna/write-log-file": "3.13.0", "dedent": "^0.7.0", "execa": "^1.0.0", "is-ci": "^1.0.10", @@ -637,14 +637,14 @@ } }, "@lerna/conventional-commits": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.11.0.tgz", - "integrity": "sha512-ix1Ki5NiZdk2eMlCWNgLchWPKQTgkJdLeNjneep6OCF3ydSINizReGbFvCftRivun641cOHWswgWMsIxbqhMQw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.13.0.tgz", + "integrity": "sha512-BeAgcNXuocmLhPxnmKU2Vy8YkPd/Uo+vu2i/p3JGsUldzrPC8iF3IDxH7fuXpEFN2Nfogu7KHachd4tchtOppA==", "dev": true, "requires": { - "@lerna/validation-error": "3.11.0", - "conventional-changelog-angular": "^5.0.2", - "conventional-changelog-core": "^3.1.5", + "@lerna/validation-error": "3.13.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-core": "^3.1.6", "conventional-recommended-bump": "^4.0.4", "fs-extra": "^7.0.0", "get-stream": "^4.0.0", @@ -693,15 +693,15 @@ } }, "@lerna/create": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.11.0.tgz", - "integrity": "sha512-1izS82QML+H/itwEu1GPrcoXyugFaP9z9r6KuIQRQq8RtmNCGEmK85aiOw6mukyRcRziq2akALgFDyrundznPQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.13.0.tgz", + "integrity": "sha512-0Vrl6Z1NEQFKd1uzWBFWii59OmMNKSNXxgKYoh3Ulu/ekMh90BgnLJ0a8tE34KK4lG5mVTQDlowKFEF+jZfYOA==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.11.0", - "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/npm-conf": "3.13.0", + "@lerna/validation-error": "3.13.0", "camelcase": "^5.0.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", @@ -755,9 +755,9 @@ } }, "@lerna/create-symlink": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.11.0.tgz", - "integrity": "sha512-UDR32uos8FIEc1keMKxXj5goZAHpCbpUd4u/btHXymUL9WqIym3cgz2iMr3ZNdZtjdMyUoHup5Dp0zjSgKCaEA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.13.0.tgz", + "integrity": "sha512-PTvg3jAAJSAtLFoZDsuTMv1wTOC3XYIdtg54k7uxIHsP8Ztpt+vlilY/Cni0THAqEMHvfiToel76Xdta4TU21Q==", "dev": true, "requires": { "cmd-shim": "^2.0.2", @@ -779,76 +779,76 @@ } }, "@lerna/describe-ref": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.11.0.tgz", - "integrity": "sha512-lX/NVMqeODg4q/igN06L/KjtVUpW1oawh6IgOINy2oqm4RUR+1yDpsdVu3JyZZ4nHB572mJfbW56dl8qoxEVvQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.13.0.tgz", + "integrity": "sha512-UJefF5mLxLae9I2Sbz5RLYGbqbikRuMqdgTam0MS5OhXnyuuKYBUpwBshCURNb1dPBXTQhSwc7+oUhORx8ojCg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", + "@lerna/child-process": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/diff": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.11.0.tgz", - "integrity": "sha512-r3WASQix31ApA0tlkZejXhS8Z3SEg6Jw9YnKDt9V6wLjEUXGLauUDMrgx1YWu3cs9KB8/hqheRyRI7XAXGJS1w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.13.0.tgz", + "integrity": "sha512-fyHRzRBiqXj03YbGY5/ume1N0v0wrWVB7XPHPaQs/e/eCgMpcmoQGQoW5r97R+xaEoy3boByr/ham4XHZv02ZQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.11.0", - "@lerna/validation-error": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/validation-error": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.11.0.tgz", - "integrity": "sha512-oIkI+Hj74kpsnHhw0qJj12H4XMPSlDbBsshLWY+f3BiwKhn6wkXoQZ1FC8/OVNHM67GtSRv4bkcOaM4ucHm9Hw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.13.0.tgz", + "integrity": "sha512-Dc8jr1jL6YrfbI1sUZ3+px00HwcZLKykl7AC8A+vvCzYLa4MeK3UJ7CPg4kvBN1mX7yhGrSDSfxG0bJriHU5nA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.11.0", - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.11.0" + "@lerna/batch-packages": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/validation-error": "3.13.0" } }, "@lerna/filter-options": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.11.0.tgz", - "integrity": "sha512-z0krgC/YBqz7i6MGHBsPLvsQ++XEpPdGnIkSpcN0Cjp5J67K9vb5gJ2hWp1c1bitNh3xiwZ69voGqN+DYk1mUg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.13.0.tgz", + "integrity": "sha512-SRp7DCo9zrf+7NkQxZMkeyO1GRN6GICoB9UcBAbXhLbWisT37Cx5/6+jh49gYB63d/0/WYHSEPMlheUrpv1Srw==", "dev": true, "requires": { - "@lerna/collect-updates": "3.11.0", - "@lerna/filter-packages": "3.11.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/filter-packages": "3.13.0", "dedent": "^0.7.0" } }, "@lerna/filter-packages": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.11.0.tgz", - "integrity": "sha512-bnukkW1M0uMKWqM/m/IHou2PKRyk4fDAksAj3diHc1UVQkH2j8hXOfLl9+CgHA/cnTrf6/LARg8hKujqduqHyA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.13.0.tgz", + "integrity": "sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ==", "dev": true, "requires": { - "@lerna/validation-error": "3.11.0", + "@lerna/validation-error": "3.13.0", "multimatch": "^2.1.0", "npmlog": "^4.1.2" } }, "@lerna/get-npm-exec-opts": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.11.0.tgz", - "integrity": "sha512-EDxsbuq2AbB3LWwH/4SOcn4gWOnoIYrSHfITWo7xz/SbEKeHtiva99l424ZRWUJqLPGIpQiMTlmOET2ZEI8WZg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz", + "integrity": "sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==", "dev": true, "requires": { "npmlog": "^4.1.2" } }, "@lerna/get-packed": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.7.0.tgz", - "integrity": "sha512-yuFtjsUZIHjeIvIYQ/QuytC+FQcHwo3peB+yGBST2uWCLUCR5rx6knoQcPzbxdFDCuUb5IFccFGd3B1fHFg3RQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.13.0.tgz", + "integrity": "sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg==", "dev": true, "requires": { "fs-extra": "^7.0.0", @@ -891,12 +891,12 @@ } }, "@lerna/github-client": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.11.0.tgz", - "integrity": "sha512-yPMBhzShuth3uJo0kKu84RvgjSZgOYNT8fKfhZmzTeVGuPbYBKlK+UQ6jjpb6E9WW2BVdiUCrFhqIsbK5Lqe7A==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.13.0.tgz", + "integrity": "sha512-4/003z1g7shg21nl06ku5/yqYbQfNsQkeWuWEd+mjiTtGH6OhzJ8XcmBOq6mhZrfDAlA4OLeXypd1QIK1Y7arA==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", + "@lerna/child-process": "3.13.0", "@octokit/plugin-enterprise-rest": "^2.1.0", "@octokit/rest": "^16.15.0", "git-url-parse": "^11.1.2", @@ -904,18 +904,18 @@ } }, "@lerna/global-options": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.10.6.tgz", - "integrity": "sha512-k5Xkq1M/uREFC2R9uwN5gcvIgjj4iOXo0YyeEXCMWBiW3j2GL9xN4d1MmAIcrYlAzVYh6kLlWaFWl/rNIneHIw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz", + "integrity": "sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==", "dev": true }, "@lerna/has-npm-version": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.10.0.tgz", - "integrity": "sha512-N4RRYxGeivuaKgPDzrhkQOQs1Sg4tOnxnEe3akfqu1wDA4Ng5V6Y2uW3DbkAjFL3aNJhWF5Vbf7sBsGtfgDQ8w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.13.0.tgz", + "integrity": "sha512-Oqu7DGLnrMENPm+bPFGOHnqxK8lCnuYr6bk3g/CoNn8/U0qgFvHcq6Iv8/Z04TsvleX+3/RgauSD2kMfRmbypg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", + "@lerna/child-process": "3.13.0", "semver": "^5.5.0" }, "dependencies": { @@ -928,16 +928,16 @@ } }, "@lerna/import": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.11.0.tgz", - "integrity": "sha512-WgF0We+4k/MrC1vetT8pt3/SSJPMvXhyPYmL2W9rcvch3zV0IgLyso4tEs8gNbwZorDVEG1KcM+x8TG4v1nV5Q==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.13.0.tgz", + "integrity": "sha512-uQ+hoYEC6/B8VqQ9tecA1PVCFiqwN+DCrdIBY/KX3Z5vip94Pc8H/u+Q2dfBymkT6iXnvmPR/6hsMkpMOjBQDg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.11.0", - "@lerna/prompt": "3.11.0", - "@lerna/pulse-till-done": "3.11.0", - "@lerna/validation-error": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", "p-map-series": "^1.0.0" @@ -957,13 +957,13 @@ } }, "@lerna/init": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.11.0.tgz", - "integrity": "sha512-JZC5jpCVJgK34grye52kGWjrYCyh4LB8c0WBLaS8MOUt6rxTtPqubwvCDKPOF2H0Se6awsgEfX4wWNuqiQVpRQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.13.0.tgz", + "integrity": "sha512-4MBaNaitr9rfzwHK4d0Y19WIzqL5RTk719tIlVtw+IRE2qF9/ioovNIZuoeISyi84mTKehsFtPsHoxFIulZUhQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.0", "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" @@ -983,37 +983,37 @@ } }, "@lerna/link": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.11.0.tgz", - "integrity": "sha512-QN+kxRWb6P9jrKpE2t6K9sGnFpqy1KOEjf68NpGhmp+J9Yt6Kvz9kG43CWoqg4Zyqqgqgn3NVV2Z7zSDNhdH0g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.13.0.tgz", + "integrity": "sha512-0PAZM1kVCmtJfiQUzy6TT1aemIg9pxejGxFBYMB+IAxR5rcgLlZago1R52/8HyNGa07bLv0B6CkRgrdQ/9bzCg==", "dev": true, "requires": { - "@lerna/command": "3.11.0", - "@lerna/package-graph": "3.11.0", - "@lerna/symlink-dependencies": "3.11.0", + "@lerna/command": "3.13.0", + "@lerna/package-graph": "3.13.0", + "@lerna/symlink-dependencies": "3.13.0", "p-map": "^1.2.0", "slash": "^1.0.0" } }, "@lerna/list": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.11.0.tgz", - "integrity": "sha512-hBAwZzEzF1LQOOB2/5vQkal/nSriuJbLY39BitIGkUxifsmu7JK0k3LYrwe1sxXv5SMf2HDaTLr+Z23mUslhaQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.13.0.tgz", + "integrity": "sha512-nKSqGs4ZJe7zB6SJmBEb7AfGLzqDOwJwbucC3XVgkjrXlrX4AW4+qnPiGpEdz8OFmzstkghQrWUUJvsEpNVTjw==", "dev": true, "requires": { - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/listable": "3.11.0", - "@lerna/output": "3.11.0" + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/listable": "3.13.0", + "@lerna/output": "3.13.0" } }, "@lerna/listable": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.11.0.tgz", - "integrity": "sha512-nCrtGSS3YiAlh5dU5mmTAU9aLRlmIUn2FnahqsksN2uQ5O4o+614tneDuO298/eWLZo00eGw69EFngaQEl8quw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.13.0.tgz", + "integrity": "sha512-liYJ/WBUYP4N4MnSVZuLUgfa/jy3BZ02/1Om7xUY09xGVSuNVNEeB8uZUMSC+nHqFHIsMPZ8QK9HnmZb1E/eTA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.11.0", + "@lerna/batch-packages": "3.13.0", "chalk": "^2.3.1", "columnify": "^1.5.4" }, @@ -1047,9 +1047,9 @@ } }, "@lerna/log-packed": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.11.0.tgz", - "integrity": "sha512-TH//81TzSTMuNzJIQE7zqu+ymI5rH25jdEdmbYEWmaJ+T42GMQXKxP8cj2m+fWRaDML8ta0uzBOm5PKHdgoFYQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.13.0.tgz", + "integrity": "sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg==", "dev": true, "requires": { "byte-size": "^4.0.3", @@ -1059,9 +1059,9 @@ } }, "@lerna/npm-conf": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.7.0.tgz", - "integrity": "sha512-+WSMDfPKcKzMfqq283ydz9RRpOU6p9wfx0wy4hVSUY/6YUpsyuk8SShjcRtY8zTM5AOrxvFBuuV90H4YpZ5+Ng==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.13.0.tgz", + "integrity": "sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g==", "dev": true, "requires": { "config-chain": "^1.1.11", @@ -1069,9 +1069,9 @@ } }, "@lerna/npm-dist-tag": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.11.0.tgz", - "integrity": "sha512-WqZcyDb+wiqAKRFcYEK6R8AQfspyro85zGGHyjYw6ZPNgJX3qhwtQ+MidDmOesi2p5/0GfeVSWega+W7fPzVpg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.13.0.tgz", + "integrity": "sha512-mcuhw34JhSRFrbPn0vedbvgBTvveG52bR2lVE3M3tfE8gmR/cKS/EJFO4AUhfRKGCTFn9rjaSEzlFGYV87pemQ==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", @@ -1081,13 +1081,13 @@ } }, "@lerna/npm-install": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.11.0.tgz", - "integrity": "sha512-iNKEgFvFHMmBqn9AnFye2rv7CdUBlYciwWSTNtpfVqtOnoL/lg+4A774oL4PDoxTCGmougztyxMkqLVSBYXTpw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.13.0.tgz", + "integrity": "sha512-qNyfts//isYQxore6fsPorNYJmPVKZ6tOThSH97tP0aV91zGMtrYRqlAoUnDwDdAjHPYEM16hNujg2wRmsqqIw==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/get-npm-exec-opts": "3.13.0", "fs-extra": "^7.0.0", "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", @@ -1109,12 +1109,12 @@ } }, "@lerna/npm-publish": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.11.0.tgz", - "integrity": "sha512-wgbb55gUXRlP8uTe60oW6c06ZhquaJu9xbi2vWNpb5Fmjh/KbZ2iNm9Kj2ciZlvb8D+k4Oc3qV7slBGxyMm8wg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.13.0.tgz", + "integrity": "sha512-y4WO0XTaf9gNRkI7as6P2ItVDOxmYHwYto357fjybcnfXgMqEA94c3GJ++jU41j0A9vnmYC6/XxpTd9sVmH9tA==", "dev": true, "requires": { - "@lerna/run-lifecycle": "3.11.0", + "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpmpublish": "^1.1.1", @@ -1137,34 +1137,34 @@ } }, "@lerna/npm-run-script": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.11.0.tgz", - "integrity": "sha512-cLnTMrRQlK/N5bCr6joOFMBfRyW2EbMdk3imtjHk0LwZxsvQx3naAPUB/2RgNfC8fGf/yHF/0bmBrpb5sa2IlA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.13.0.tgz", + "integrity": "sha512-hiL3/VeVp+NFatBjkGN8mUdX24EfZx9rQlSie0CMgtjc7iZrtd0jCguLomSCRHYjJuvqgbp+LLYo7nHVykfkaQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.11.0", + "@lerna/child-process": "3.13.0", + "@lerna/get-npm-exec-opts": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/output": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.11.0.tgz", - "integrity": "sha512-xHYGcEaZZ4cR0Jw368QgUgFvV27a6ZO5360BMNGNsjCjuY0aOPQC5+lBhgfydJtJteKjDna853PSjBK3uMhEjw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz", + "integrity": "sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==", "dev": true, "requires": { "npmlog": "^4.1.2" } }, "@lerna/pack-directory": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.11.0.tgz", - "integrity": "sha512-bgA3TxZx5AyZeqUadSPspktdecW7nIpg/ODq0o0gKFr7j+DC9Fqu8vQa2xmFSKsXDtOYkCV0jox6Ox9XSFSM3A==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.13.0.tgz", + "integrity": "sha512-p5lhLPvpRptms08uSTlDpz8R2/s8Z2Vi0Hc8+yIAP74YD8gh/U9Diku9EGkkgkLfV+P0WhnEO8/Gq/qzNVbntA==", "dev": true, "requires": { - "@lerna/get-packed": "3.7.0", - "@lerna/package": "3.11.0", - "@lerna/run-lifecycle": "3.11.0", + "@lerna/get-packed": "3.13.0", + "@lerna/package": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", "npm-packlist": "^1.1.12", "npmlog": "^4.1.2", @@ -1196,9 +1196,9 @@ } }, "@lerna/package": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.11.0.tgz", - "integrity": "sha512-hMzBhFEubhg+Tis5C8skwIfgOk+GTl0qudvzfPU9gQqLV8u4/Hs6mka6N0rKgbUb4VFVc5MJVe1eZ6Rv+kJAWw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.13.0.tgz", + "integrity": "sha512-kSKO0RJQy093BufCQnkhf1jB4kZnBvL7kK5Ewolhk5gwejN+Jofjd8DGRVUDUJfQ0CkW1o6GbUeZvs8w8VIZDg==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -1207,12 +1207,12 @@ } }, "@lerna/package-graph": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.11.0.tgz", - "integrity": "sha512-ICYiOZvCfcmeH1qfzOkFYh0t0QA56OddQfI3ydxCiWi5G+UupJXnCIWSTh3edTAtw/kyxhCOWny/PJsG4CQfjA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.13.0.tgz", + "integrity": "sha512-3mRF1zuqFE1HEFmMMAIggXy+f+9cvHhW/jzaPEVyrPNLKsyfJQtpTNzeI04nfRvbAh+Gd2aNksvaW/w3xGJnnw==", "dev": true, "requires": { - "@lerna/validation-error": "3.11.0", + "@lerna/validation-error": "3.13.0", "npm-package-arg": "^6.1.0", "semver": "^5.5.0" }, @@ -1226,13 +1226,13 @@ } }, "@lerna/project": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.11.0.tgz", - "integrity": "sha512-j3DGds+q/q2YNpoBImaEsMpkWgu5gP0IGKz1o1Ju39NZKrTPza+ARIzEByL4Jqu87tcoOj7RbZzhhrBP8JBbTg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.13.0.tgz", + "integrity": "sha512-hxRvln8Dks3T4PBALC9H3Kw6kTne70XShfqSs4oJkMqFyDj4mb5VCUN6taCDXyF8fu75d02ETdTFZhhBgm1x6w==", "dev": true, "requires": { - "@lerna/package": "3.11.0", - "@lerna/validation-error": "3.11.0", + "@lerna/package": "3.13.0", + "@lerna/validation-error": "3.13.0", "cosmiconfig": "^5.0.2", "dedent": "^0.7.0", "dot-prop": "^4.2.0", @@ -1279,9 +1279,9 @@ } }, "@lerna/prompt": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.11.0.tgz", - "integrity": "sha512-SB/wvyDPQASze9txd+8/t24p6GiJuhhL30zxuRwvVwER5lIJR7kaXy1KhQ7kUAKPlNTVfCBm3GXReIMl4jhGhw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.13.0.tgz", + "integrity": "sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA==", "dev": true, "requires": { "inquirer": "^6.2.0", @@ -1289,29 +1289,29 @@ } }, "@lerna/publish": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.11.1.tgz", - "integrity": "sha512-UOvmSivuqzWoiTqoYWk+liPDZvC6O7NrT8DwoG2peRvjIPs5RKYMubwXPOrBBVVE+yX/vR6V1Y3o6vf3av52dg==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.11.0", - "@lerna/check-working-tree": "3.11.0", - "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/describe-ref": "3.11.0", - "@lerna/log-packed": "3.11.0", - "@lerna/npm-conf": "3.7.0", - "@lerna/npm-dist-tag": "3.11.0", - "@lerna/npm-publish": "3.11.0", - "@lerna/output": "3.11.0", - "@lerna/pack-directory": "3.11.0", - "@lerna/prompt": "3.11.0", - "@lerna/pulse-till-done": "3.11.0", - "@lerna/run-lifecycle": "3.11.0", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.11.0", - "@lerna/version": "3.11.1", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.0.tgz", + "integrity": "sha512-WuO7LWWQ+8F+ig48RtUxWrVdOfpqDBOv6fXz0/2heQf/rJQoJDTzJZ0rk5ymaGCFz1Av2CbP0zoP7PAQQ2BeKg==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/check-working-tree": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/describe-ref": "3.13.0", + "@lerna/log-packed": "3.13.0", + "@lerna/npm-conf": "3.13.0", + "@lerna/npm-dist-tag": "3.13.0", + "@lerna/npm-publish": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/pack-directory": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/validation-error": "3.13.0", + "@lerna/version": "3.13.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpmaccess": "^3.0.1", @@ -1346,18 +1346,18 @@ } }, "@lerna/pulse-till-done": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.11.0.tgz", - "integrity": "sha512-nMwBa6S4+VI/ketN92oj1xr8y74Fz4ul2R5jdbrRqLLEU/IMBWIqn6NRM2P+OQBoLpPZ2MdWENLJVFNN8X1Q+A==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz", + "integrity": "sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==", "dev": true, "requires": { "npmlog": "^4.1.2" } }, "@lerna/resolve-symlink": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.11.0.tgz", - "integrity": "sha512-lDer8zPXS36iL4vJdZwOk6AnuUjDXswoTWdYkl+HdAKXp7cBlS+VeGmcFIJS4R3mSSZE20h1oEDuH8h8GGORIQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz", + "integrity": "sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg==", "dev": true, "requires": { "fs-extra": "^7.0.0", @@ -1379,50 +1379,50 @@ } }, "@lerna/rimraf-dir": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.11.0.tgz", - "integrity": "sha512-roy4lKel7BMNLfFvyzK0HI251mgI9EwbpOccR2Waz0V22d0gaqLKzfVrzovat9dVHXrKNxAhJ5iKkKeT93IunQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.13.0.tgz", + "integrity": "sha512-kte+pMemulre8cmPqljxIYjCmdLByz8DgHBHXB49kz2EiPf8JJ+hJFt0PzEubEyJZ2YE2EVAx5Tv5+NfGNUQyQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", + "@lerna/child-process": "3.13.0", "npmlog": "^4.1.2", "path-exists": "^3.0.0", "rimraf": "^2.6.2" } }, "@lerna/run": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.11.0.tgz", - "integrity": "sha512-8c2yzbKJFzgO6VTOftWmB0fOLTL7G1GFAG5UTVDSk95Z2Gnjof3I/Xkvtbzq8L+DIOLpr+Tpj3fRBjZd8rONlA==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/filter-options": "3.11.0", - "@lerna/npm-run-script": "3.11.0", - "@lerna/output": "3.11.0", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/timer": "3.5.0", - "@lerna/validation-error": "3.11.0", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.13.0.tgz", + "integrity": "sha512-KSpEStp5SVzNB7+3V5WnyY4So8aEyDhBYvhm7cJr5M7xesKf/IE5KFywcI+JPYzyqnIOGXghfzBf9nBZRHlEUQ==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/filter-options": "3.13.0", + "@lerna/npm-run-script": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/timer": "3.13.0", + "@lerna/validation-error": "3.13.0", "p-map": "^1.2.0" } }, "@lerna/run-lifecycle": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.11.0.tgz", - "integrity": "sha512-3xeeVz9s3Dh2ljKqJI/Fl+gkZD9Y8JblAN62f4WNM76d/zFlgpCXDs62OpxNjEuXujA7YFix0sJ+oPKMm8mDrw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.13.0.tgz", + "integrity": "sha512-oyiaL1biZdjpmjh6X/5C4w07wNFyiwXSSHH5GQB4Ay4BPwgq9oNhCcxRoi0UVZlZ1YwzSW8sTwLgj8emkIo3Yg==", "dev": true, "requires": { - "@lerna/npm-conf": "3.7.0", + "@lerna/npm-conf": "3.13.0", "figgy-pudding": "^3.5.1", "npm-lifecycle": "^2.1.0", "npmlog": "^4.1.2" } }, "@lerna/run-parallel-batches": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz", - "integrity": "sha512-Mj1ravlXF7AkkewKd9YFq9BtVrsStNrvVLedD/b2wIVbNqcxp8lS68vehXVOzoL/VWNEDotvqCQtyDBilCodGw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz", + "integrity": "sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg==", "dev": true, "requires": { "p-map": "^1.2.0", @@ -1430,13 +1430,13 @@ } }, "@lerna/symlink-binary": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.11.0.tgz", - "integrity": "sha512-5sOED+1O8jI+ckDS6DRUKtAtbKo7lbxFIJs6sWWEu5qKzM5e21O6E2wTWimJkad8nJ1SJAuyc8DC8M8ki4kT4w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.13.0.tgz", + "integrity": "sha512-obc4Y6jxywkdaCe+DB0uTxYqP0IQ8mFWvN+k/YMbwH4G2h7M7lCBWgPy8e7xw/50+1II9tT2sxgx+jMus1sTJg==", "dev": true, "requires": { - "@lerna/create-symlink": "3.11.0", - "@lerna/package": "3.11.0", + "@lerna/create-symlink": "3.13.0", + "@lerna/package": "3.13.0", "fs-extra": "^7.0.0", "p-map": "^1.2.0" }, @@ -1455,14 +1455,14 @@ } }, "@lerna/symlink-dependencies": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.11.0.tgz", - "integrity": "sha512-XKNX8oOgcOmiKHUn7qT5GvvmKP3w5otZPOjRixUDUILWTc3P8nO5I1VNILNF6IE5ajNw6yiXOWikSxc6KuFqBQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.13.0.tgz", + "integrity": "sha512-7CyN5WYEPkbPLbqHBIQg/YiimBzb5cIGQB0E9IkLs3+racq2vmUNQZn38LOaazQacAA83seB+zWSxlI6H+eXSg==", "dev": true, "requires": { - "@lerna/create-symlink": "3.11.0", - "@lerna/resolve-symlink": "3.11.0", - "@lerna/symlink-binary": "3.11.0", + "@lerna/create-symlink": "3.13.0", + "@lerna/resolve-symlink": "3.13.0", + "@lerna/symlink-binary": "3.13.0", "fs-extra": "^7.0.0", "p-finally": "^1.0.0", "p-map": "^1.2.0", @@ -1483,37 +1483,37 @@ } }, "@lerna/timer": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.5.0.tgz", - "integrity": "sha512-TAb99hqQN6E3JBGtG9iyZNPq1/DbmqgBOeNrKtdJsGvIeX/NGLgUDWMrj2h04V4O+jpBFmSf6HIld6triKmxCA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz", + "integrity": "sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==", "dev": true }, "@lerna/validation-error": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.11.0.tgz", - "integrity": "sha512-/mS4o6QYm4OXUqfPJnW1mKudGhvhLe9uiQ9eK2cgSxkCAVq9G2Sl/KVohpnqAgeRI3nXordGxHS745CdAhg7pA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz", + "integrity": "sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==", "dev": true, "requires": { "npmlog": "^4.1.2" } }, "@lerna/version": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.11.1.tgz", - "integrity": "sha512-+lFq4D8BpchIslIz6jyUY6TZO1kuAgQ+G1LjaYwUBiP2SzXVWgPoPoq/9dnaSq38Hhhvlf7FF6i15d+q8gk1xQ==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.11.0", - "@lerna/check-working-tree": "3.11.0", - "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.11.0", - "@lerna/command": "3.11.0", - "@lerna/conventional-commits": "3.11.0", - "@lerna/github-client": "3.11.0", - "@lerna/output": "3.11.0", - "@lerna/prompt": "3.11.0", - "@lerna/run-lifecycle": "3.11.0", - "@lerna/validation-error": "3.11.0", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.0.tgz", + "integrity": "sha512-YdLC208tExVpV77pdXpokGt9MAtTE7Kt93a2jcfjqiMoAI1VmXgGA+7drgBSTVtzfjXExPgi2//hJjI5ObckXA==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/check-working-tree": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.0", + "@lerna/conventional-commits": "3.13.0", + "@lerna/github-client": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/validation-error": "3.13.0", "chalk": "^2.3.1", "dedent": "^0.7.0", "minimatch": "^3.0.4", @@ -1562,9 +1562,9 @@ } }, "@lerna/write-log-file": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.11.0.tgz", - "integrity": "sha512-skpTDMDOkQAN4lCeAoI6/rPhbNE431eD0i6Ts3kExUOrYTr0m5CIwVtMZ31Flpky0Jfh4ET6rOl5SDNMLbf4VA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz", + "integrity": "sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==", "dev": true, "requires": { "npmlog": "^4.1.2", @@ -3851,9 +3851,9 @@ "dev": true }, "conventional-changelog-angular": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", - "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz", + "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -3861,12 +3861,12 @@ } }, "conventional-changelog-core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.5.tgz", - "integrity": "sha512-iwqAotS4zk0wA4S84YY1JCUG7X3LxaRjJxuUo6GI4dZuIy243j5nOg/Ora35ExT4DOiw5dQbMMQvw2SUjh6moQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz", + "integrity": "sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.2", + "conventional-changelog-writer": "^4.0.3", "conventional-commits-parser": "^3.0.1", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", @@ -3888,15 +3888,15 @@ "dev": true }, "conventional-changelog-writer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", - "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz", + "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==", "dev": true, "requires": { "compare-func": "^1.3.1", "conventional-commits-filter": "^2.0.1", "dateformat": "^3.0.0", - "handlebars": "^4.0.2", + "handlebars": "^4.1.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.2.1", "meow": "^4.0.0", @@ -3905,11 +3905,38 @@ "through2": "^2.0.0" }, "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -8846,26 +8873,26 @@ "dev": true }, "lerna": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.11.1.tgz", - "integrity": "sha512-7an/cia9u6qVTts5PQ/adFq8QSgE7gzG1pUHhH+XKVU1seDKQ99JLu61n3/euv2qeQF+ww4WLKnFHIPa5+LJSQ==", - "dev": true, - "requires": { - "@lerna/add": "3.11.0", - "@lerna/bootstrap": "3.11.0", - "@lerna/changed": "3.11.1", - "@lerna/clean": "3.11.0", - "@lerna/cli": "3.11.0", - "@lerna/create": "3.11.0", - "@lerna/diff": "3.11.0", - "@lerna/exec": "3.11.0", - "@lerna/import": "3.11.0", - "@lerna/init": "3.11.0", - "@lerna/link": "3.11.0", - "@lerna/list": "3.11.0", - "@lerna/publish": "3.11.1", - "@lerna/run": "3.11.0", - "@lerna/version": "3.11.1", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.0.tgz", + "integrity": "sha512-MHaqqwfAdYIo0rAE0oOZRQ8eKbKyW035akLf0pz3YlWbdXKH91lxXRLj0BpbEytUz7hDbsv0FNNtXz9u5eTNFg==", + "dev": true, + "requires": { + "@lerna/add": "3.13.0", + "@lerna/bootstrap": "3.13.0", + "@lerna/changed": "3.13.0", + "@lerna/clean": "3.13.0", + "@lerna/cli": "3.13.0", + "@lerna/create": "3.13.0", + "@lerna/diff": "3.13.0", + "@lerna/exec": "3.13.0", + "@lerna/import": "3.13.0", + "@lerna/init": "3.13.0", + "@lerna/link": "3.13.0", + "@lerna/list": "3.13.0", + "@lerna/publish": "3.13.0", + "@lerna/run": "3.13.0", + "@lerna/version": "3.13.0", "import-local": "^1.0.0", "npmlog": "^4.1.2" } @@ -11812,9 +11839,9 @@ } }, "read-package-tree": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz", - "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.2.tgz", + "integrity": "sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA==", "dev": true, "requires": { "debuglog": "^1.0.1", diff --git a/package.json b/package.json index 3ccb25d41e6..cc5033bec78 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "isomorphic-fetch": "2.2.1", "jest": "23.6.0", "jest-junit": "5.2.0", - "lerna": "3.11.1", + "lerna": "3.13.0", "lint-staged": "8.1.3", "lodash": "4.17.11", "pre-commit": "1.2.2", From 893c9acc5595ccb4dd51637ab4a5007aa0f687b3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Feb 2019 11:31:37 +0000 Subject: [PATCH 073/230] chore(deps): update dependency lint-staged to v8.1.4 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12349560229..7bde78595ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9003,9 +9003,9 @@ } }, "lint-staged": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.3.tgz", - "integrity": "sha512-6TGkikL1B+6mIOuSNq2TV6oP21IhPMnV8q0cf9oYZ296ArTVNcbFh1l1pfVOHHbBIYLlziWNsQ2q45/ffmJ4AA==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.4.tgz", + "integrity": "sha512-oFbbhB/VzN8B3i/sIdb9gMfngGArI6jIfxSn+WPdQb2Ni3GJeS6T4j5VriSbQfxfMuYoQlMHOoFt+lfcWV0HfA==", "dev": true, "requires": { "@iamstarkov/listr-update-renderer": "0.4.1", @@ -9021,7 +9021,7 @@ "is-glob": "^4.0.0", "is-windows": "^1.0.2", "listr": "^0.14.2", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "log-symbols": "^2.2.0", "micromatch": "^3.1.8", "npm-which": "^3.0.1", diff --git a/package.json b/package.json index cc5033bec78..c1e0aa44624 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "jest": "23.6.0", "jest-junit": "5.2.0", "lerna": "3.13.0", - "lint-staged": "8.1.3", + "lint-staged": "8.1.4", "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", From a13183147cf0ec9916d707637fb9774928233280 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Feb 2019 12:34:21 +0000 Subject: [PATCH 074/230] chore(deps): update dependency webpack-bundle-analyzer to v3.0.4 --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7bde78595ef..9492a26e4de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14591,9 +14591,9 @@ } }, "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.4.tgz", + "integrity": "sha512-ggDUgtKuQki4vmc93Ej65GlYxeCUR/0THa7gA+iqAGC2FFAxO+r+RM9sAUa8HWdw4gJ3/NZHX/QUcVgRjdIsDg==", "dev": true, "requires": { "acorn": "^5.7.3", @@ -14617,9 +14617,9 @@ "dev": true }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -14659,9 +14659,9 @@ } }, "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "dev": true, "requires": { "async-limiter": "~1.0.0" diff --git a/package.json b/package.json index c1e0aa44624..0ad1bb4227c 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "typescript": "3.3.3", "uglify-js": "3.4.9", "webpack": "3.12.0", - "webpack-bundle-analyzer": "3.0.3" + "webpack-bundle-analyzer": "3.0.4" }, "renovate": { "extends": [ From 80748f2f504a8097a1f16e40b753500a1f3f2bcf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 Feb 2019 06:25:41 +0000 Subject: [PATCH 075/230] chore(deps): update dependency @octokit/rest to v16.16.0 --- package-lock.json | 20 ++++++++++---------- package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9492a26e4de..4c520d7415a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1588,12 +1588,12 @@ "dev": true }, "@octokit/endpoint": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.2.tgz", - "integrity": "sha512-iRx4kDYybAv9tOrHDBE6HwlgiFi8qmbZl8SHliZWtxbUFuXLZXh2yv8DxGIK9wzD9J0wLDMZneO8vNYJNUSJ9Q==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.3.tgz", + "integrity": "sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA==", "dev": true, "requires": { - "deepmerge": "3.1.0", + "deepmerge": "3.2.0", "is-plain-object": "^2.0.4", "universal-user-agent": "^2.0.1", "url-template": "^2.0.8" @@ -1618,9 +1618,9 @@ } }, "@octokit/rest": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.15.0.tgz", - "integrity": "sha512-Un+e7rgh38RtPOTe453pT/KPM/p2KZICimBmuZCd2wEo8PacDa4h6RqTPZs+f2DPazTTqdM7QU4LKlUjgiBwWw==", + "version": "16.16.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.16.0.tgz", + "integrity": "sha512-Q6L5OwQJrdJ188gLVmUHLKNXBoeCU0DynKPYW8iZQQoGNGws2hkP/CePVNlzzDgmjuv7o8dCrJgecvDcIHccTA==", "dev": true, "requires": { "@octokit/request": "2.3.0", @@ -4401,9 +4401,9 @@ "dev": true }, "deepmerge": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", - "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz", + "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==", "dev": true }, "default-require-extensions": { diff --git a/package.json b/package.json index 0ad1bb4227c..290883b3e1e 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "graphql-anywhere": "file:packages/graphql-anywhere" }, "devDependencies": { - "@octokit/rest": "16.15.0", + "@octokit/rest": "16.16.0", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", From 48e09d9453295df018d50e8bc9872e8e0085c2c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Feb 2019 08:29:44 +0000 Subject: [PATCH 076/230] chore(deps): update dependency @types/react-dom to v16.8.2 --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c520d7415a..d167752db21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1714,9 +1714,9 @@ } }, "@types/react-dom": { - "version": "16.8.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.0.tgz", - "integrity": "sha512-Jp4ufcEEjVJEB0OHq2MCZcE1u3KYUKO6WnSuiU/tZeYeiZxUoQavfa/TZeiIT+1XoN6l0lQVNM30VINZFDeolQ==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.2.tgz", + "integrity": "sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw==", "dev": true, "requires": { "@types/react": "*" @@ -11796,15 +11796,15 @@ } }, "react-dom": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.1.tgz", - "integrity": "sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.2.tgz", + "integrity": "sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.1" + "scheduler": "^0.13.2" } }, "read": { @@ -12645,9 +12645,9 @@ "dev": true }, "scheduler": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.1.tgz", - "integrity": "sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", + "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index 290883b3e1e..3d62c0788c8 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@types/lodash": "4.14.121", "@types/node": "10.12.26", "@types/react": "16.8.3", - "@types/react-dom": "16.8.0", + "@types/react-dom": "16.8.2", "benchmark": "2.1.4", "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", @@ -104,7 +104,7 @@ "pre-commit": "1.2.2", "prettier": "1.16.4", "react": "16.8.2", - "react-dom": "16.8.1", + "react-dom": "16.8.2", "rollup": "1.1.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", From 098ee6b3ce7ebebd894f36fdbaa700af9d213d55 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Feb 2019 09:31:17 +0000 Subject: [PATCH 077/230] chore(deps): update dependency rollup to v1.2.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d167752db21..5c1ca25a1f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12192,20 +12192,20 @@ } }, "rollup": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.1.2.tgz", - "integrity": "sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.2.2.tgz", + "integrity": "sha512-fsn5KJcfSuejjrv8GV7kZNciElqxyzZdUq8rA3e528JsR3ccxrWwoptyUY8GGLlgMFAQMB3dZW8nWF2I1/xrZA==", "dev": true, "requires": { "@types/estree": "0.0.39", "@types/node": "*", - "acorn": "^6.0.5" + "acorn": "^6.1.0" }, "dependencies": { "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", "dev": true } } diff --git a/package.json b/package.json index 3d62c0788c8..a023e553265 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "prettier": "1.16.4", "react": "16.8.2", "react-dom": "16.8.2", - "rollup": "1.1.2", + "rollup": "1.2.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", "rollup-plugin-sourcemaps": "0.4.2", From 0bfba30151abffc06ee0afc197776a4a6f7428b4 Mon Sep 17 00:00:00 2001 From: Raj Nigam Date: Wed, 20 Feb 2019 10:04:30 -0500 Subject: [PATCH 078/230] Revert LF fix to uncorrupt images in documentation (#4438) * undo lf fix for pngs the fix in #4232 accidentally corrupted the pngs, this reverts them it ignores one that was deleted * Add missing `text=auto` Without this, git tries to adjust the line feed for binary files as well. * Changelog update --- .gitattributes | 2 +- CHANGELOG.md | 4 ++++ .../assets/client-diagrams/1-overview.png | Bin 43489 -> 43490 bytes docs/source/assets/client-diagrams/2-map.png | Bin 52581 -> 52584 bytes .../assets/client-diagrams/3-minimize.png | Bin 59006 -> 59007 bytes .../assets/client-diagrams/4-normalize.png | Bin 48665 -> 48668 bytes docs/source/assets/client-schema.png | Bin 199265 -> 199268 bytes .../apollo-devtools-graphiql.png | Bin 663414 -> 663422 bytes .../apollo-devtools-queries.png | Bin 447848 -> 447853 bytes .../apollo-devtools-store.png | Bin 499910 -> 499915 bytes docs/source/assets/devtools/devtools.png | Bin 239821 -> 239823 bytes docs/source/assets/devtools/mutation-init.png | Bin 117709 -> 117710 bytes .../assets/devtools/mutation-result-data.png | Bin 113596 -> 113597 bytes .../assets/devtools/mutation-result.png | Bin 98881 -> 98882 bytes .../assets/devtools/query-init-data.png | Bin 105468 -> 105469 bytes docs/source/assets/devtools/query-init.png | Bin 112850 -> 112853 bytes docs/source/assets/devtools/query-result.png | Bin 163329 -> 163333 bytes docs/source/img/githunt.png | Bin 344972 -> 344977 bytes docs/source/logo/favicon.png | Bin 2919 -> 2920 bytes .../source/logo/icon-apollo-white-200x200.png | Bin 5744 -> 5745 bytes docs/source/logo/large.png | Bin 16016 -> 16017 bytes docs/source/logo/square.png | Bin 12869 -> 12871 bytes 22 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index fcadb2cf979..6313b56c578 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -* text eol=lf +* text=auto eol=lf diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aec8ed223a..549cce305de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ - Fixes an issue where the `QueryManager` was accidentally returning cached data for `network-only` queries.
[@danilobuerger](https://github.com/danilobuerger) in [#4352](https://github.com/apollographql/apollo-client/pull/4352) +- Fixed an issue in the repo `.gitattributes` that was causing binary files + to have their line endings adjusted, and cleaned up corrupted documentation + images (ref: https://github.com/apollographql/apollo-client/pull/4232).
+ [@rajington](https://github.com/rajington) in [#4438](https://github.com/apollographql/apollo-client/pull/4438) ## Apollo Client (2.4.13) diff --git a/docs/source/assets/client-diagrams/1-overview.png b/docs/source/assets/client-diagrams/1-overview.png index 1f49b2e0ab18ab291784b12513727b21fb5902c6..4a4adacb44b436f1bd88a71ae825987e976af539 100644 GIT binary patch delta 16 YcmaEOnd#AGCf3dXKX=}ZEO%D|06@?ODF6Tf delta 15 XcmaEKnd#wWCYH_sKlhEScUJ-cJF5pA diff --git a/docs/source/assets/client-diagrams/2-map.png b/docs/source/assets/client-diagrams/2-map.png index 87c2a39e53c1b8091342f5d63d3c4d38ef20ffac..d564dfe30232db24efb71634e9671bc6bce3a03e 100644 GIT binary patch delta 30 kcmaDli}}SYX4cLCKX=}ZEaLWzyql%%QzC#={q$$10HhoWTmS$7 delta 25 hcmaDci}~p+W|qzXKlhES;`W?CYH_sKlhESJ$#EN@mXx1?ABQh0D!Cs`v3p{ diff --git a/docs/source/assets/client-schema.png b/docs/source/assets/client-schema.png index ac96b600c59b8c2cb1a1d37ac1bcff8604b675b0..274897d824a7d4a9d9ecd76f0b02c72d4ab02e50 100644 GIT binary patch delta 35 tcmV+;0NnrKlnmsQ3E^KQrt}2rMQ_VD>3qJU#rV})(j|CmBPHe xDuqRL5m0PC8|!bN*!EertY20D<@%nn0x{e6zGv*m&jR_OTR66dZsAnS1^^3%A*28R delta 83 zcmV-Z0IdK1z9{y-Ca1_k>zx1c=*^r(lG<^_k9<_5Qw<_E{khh4M?w_UUeA!`*DA$9-& diff --git a/docs/source/assets/devtools/apollo-client-devtools/apollo-devtools-queries.png b/docs/source/assets/devtools/apollo-client-devtools/apollo-devtools-queries.png index c079c6128720a7d5c416db297a1f960d0a4cc024..1940b261a5e0fae593bb095d24fbcc09034938c8 100644 GIT binary patch delta 74 zcmaE{O8V_8Y1YmFKX=|nmaQy|Z*#0DzYs-~a#s delta 71 zcmaF6O8UhrX_n3aKlet~t*nf1m$iRh#t6hr+dnU3UT($2#XP<7E35qU1p!Qg+s{5^ be!O%0#@Q^qn(h0KumCaZ_WeiL)(HRrf^8sE diff --git a/docs/source/assets/devtools/apollo-client-devtools/apollo-devtools-store.png b/docs/source/assets/devtools/apollo-client-devtools/apollo-devtools-store.png index e1aed96c1dfff2052e3da6ba49e7d68699643c68..82ba0c1e3160b614c7ede0a3f7ac9353359d635a 100644 GIT binary patch delta 71 zcmX?hQ10|WIo8eqKX=|nmaQy|O@WNO+uH&e=P)z!wkw4)ZdVFrx|#}Pf8WKl{rfIv W-_=02OBxFhvjQ>Oc9%5vCMy7M@fZ{U delta 62 zcmX?oQ0~}4IhM`wzpetXWVYJooVVv0JVk;ivR!s diff --git a/docs/source/assets/devtools/mutation-init.png b/docs/source/assets/devtools/mutation-init.png index 5df2c7ae1cdcfa0741e556d330933daac546c02e..1123b4d85b2ae1269440c7138dca05b2ba50ccc5 100644 GIT binary patch delta 19 bcmX>*o&DT&cGk`SKX=|nmaQy|Cr<+aN+Jg< delta 18 acmX>%o&D@|c9zZnKlet~t*neEPXho&a0ed% diff --git a/docs/source/assets/devtools/mutation-result-data.png b/docs/source/assets/devtools/mutation-result-data.png index b8039c2e3f0a673541c42e49959e6c7c4a0e6fc4..4823a7170446226658c569f30ffd96cc22a4f202 100644 GIT binary patch delta 19 bcmdnIjkPnt&z-lCWh)D#Z4&@Qiv|_| delta 18 ZcmX@q!gjEQjiocd&%Kd#D=VXI697ON1_}TG diff --git a/docs/source/assets/devtools/query-init-data.png b/docs/source/assets/devtools/query-init-data.png index 0445717d75c0b3d2e9571c02480d5393458a3289..bc69a5a08aa43038e736091272744dd38d444d86 100644 GIT binary patch delta 19 bcmeyfo$c>-HrCDnKX=|nmaQy|KV|~}RK5qs delta 18 acmeyno$b$dHkQr+Klet~t*necW&;3Ea0j{o diff --git a/docs/source/assets/devtools/query-init.png b/docs/source/assets/devtools/query-init.png index 2a3c584899c70d405a169e96144da3c23c796e4f..35cda6bef85a4a72aa23aa8eb3df6d6b60f09256 100644 GIT binary patch delta 35 rcmccgk?rb7HrCDnKX=}ZERIHuyv?pg+g*(q`D7S*w+H(%)@K0#;`<8k delta 30 mcmccmk?qn)HkQr+KlhESjz-PyM%&$u82MzjhxswqX8{1dGz!fC diff --git a/docs/source/assets/devtools/query-result.png b/docs/source/assets/devtools/query-result.png index f422f4e6d5a8dc813f17770e565c6dbfb1a93129..267ace970a023e18136f17e11988b04cee04dc0c 100644 GIT binary patch delta 42 zcmV+_0M-A2{0W8p2?dEzPDc%~1f;G34YR1Oj|>3~gEzakH@gA9BmoV#_TK>uo@XKu Ao&W#< delta 35 tcmV+;0NnqD{0V{l2?U8yPDil?q^`57u8$0ZI=ixBA}!3!Wtb5OV+k diff --git a/docs/source/img/githunt.png b/docs/source/img/githunt.png index 24f9e847cca86991821112ce86f79c53bc2db634..7e85aa14486faafcdb829dbce8aae63afaf95e2d 100644 GIT binary patch delta 58 zcmV-A0LA}|hZT{B6$ObkMx3Gr-b7=t$w delta 13 UcmeyU^FfEDGr-S%BWsQr04MeY Date: Wed, 20 Feb 2019 14:42:09 -0500 Subject: [PATCH 079/230] Enable 2.4 and 2.5 versions of the docs The 2.4 version won't work until these changes are pushed into production, at which point the `version-2.4` branch will be referenced automatically (thanks to https://github.com/apollographql/hexo-versioned-netlify-redirects), and https://version-2-4--apollo-client-docs.netlify.com/docs/react/. --- docs/_config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index 97d69662984..b68f65cf3a5 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -4,7 +4,8 @@ propertytitle: Using GraphQL with Apollo Client subtitle: React Guide description: A guide to using the Apollo GraphQL Client with React. versions: - - '1' + - '2.5' + - '2.4' content_root: docs/source public_dir: public/docs/react From f37d1e1e7d22fc5f99e57d725c44b85f4c72a89a Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 14:17:35 -0500 Subject: [PATCH 080/230] Prep for RC publish --- package.json | 2 +- packages/apollo-client/scripts/deploy.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8c8d99b0fa4..17ab933e346 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "coverage": "jest --verbose --coverage", "coverage:upload": "codecov", "danger": "danger run --verbose --dangerfile=./config/dangerfile.ts", - "deploy": "lerna publish -m \"chore: Publish\" --npm-tag beta && cd packages/apollo-client && npm run deploy", + "deploy": "lerna publish -m \"chore: Publish\" --npm-tag next && cd packages/apollo-client && npm run deploy", "clean": "find . -name \"node_modules\" -exec rm -rf '{}' + && find . -name \"lib\" -exec rm -rf '{}' +" }, "bundlesize": [ diff --git a/packages/apollo-client/scripts/deploy.sh b/packages/apollo-client/scripts/deploy.sh index 49d778ca9af..7faafe876c7 100755 --- a/packages/apollo-client/scripts/deploy.sh +++ b/packages/apollo-client/scripts/deploy.sh @@ -61,4 +61,4 @@ node -e "\ cp ../../README.md npm/ cp ../../LICENSE npm/ -cd npm && npm publish --tag beta +cd npm && npm publish --tag next From d6b456687202ec2f0ae3ffd7f528d0ca0657f984 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 14:26:22 -0500 Subject: [PATCH 081/230] chore: Publish - apollo-boost@0.3.0-rc.0 - apollo-cache-inmemory@1.5.0-rc.0 - apollo-cache@1.2.0-rc.0 - apollo-client@2.5.0-rc.0 - graphql-anywhere@4.2.0-rc.0 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index e164db87cbe..db12cf6e7b1 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-beta.1", + "version": "0.3.0-rc.0", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 8235940d8a7..bcaa0e32539 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-beta.1", + "version": "1.5.0-rc.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index c3596dc0ba3..8bc5151c679 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-beta.1", + "version": "1.2.0-rc.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index b1b52357546..eace566ad8b 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-beta.1", + "version": "2.5.0-rc.0", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 0d6b1a71661..abde5f30273 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-beta.1", + "version": "4.2.0-rc.0", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From 15085543dab6a6ad069c37492f2811a30c81612a Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 15:16:53 -0500 Subject: [PATCH 082/230] Force lerna to publish apollo-utilities --- packages/apollo-utilities/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 7c3c8d59ee6..9cd9522f2f6 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -44,3 +44,4 @@ "tslib": "^1.9.3" } } + From 559a94807cc9a2ae28ecc51ca412857b63f726b6 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 15:18:41 -0500 Subject: [PATCH 083/230] chore: Publish - apollo-boost@0.3.0-rc.1 - apollo-cache-inmemory@1.5.0-rc.1 - apollo-cache@1.2.0-rc.1 - apollo-client@2.5.0-rc.1 - apollo-utilities@1.2.0-rc.1 - graphql-anywhere@4.2.0-rc.1 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 3 +-- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index db12cf6e7b1..e4b0fcc4445 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-rc.0", + "version": "0.3.0-rc.1", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index bcaa0e32539..fb4150635a9 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-rc.0", + "version": "1.5.0-rc.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 8bc5151c679..20219c77cfb 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-rc.0", + "version": "1.2.0-rc.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index eace566ad8b..65c40036b84 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-rc.0", + "version": "2.5.0-rc.1", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 9cd9522f2f6..b37f48f84a7 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0-beta.1", + "version": "1.2.0-rc.1", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ @@ -44,4 +44,3 @@ "tslib": "^1.9.3" } } - diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index abde5f30273..7f2fdbd73c7 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-rc.0", + "version": "4.2.0-rc.1", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From b793efd062f6e567de6c183b04e837eb395947cf Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 21:15:00 -0500 Subject: [PATCH 084/230] Add missing stale property to ApolloCurrentQueryResult `ObservableQuery.getCurrentResult` can now return a result that includes a `stale` property, which wasn't accounted for in the returned `ApolloCurrentQueryResult` type. --- packages/apollo-client/src/core/ObservableQuery.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 574e7ef8c38..34ad1a644e4 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -36,6 +36,7 @@ export type ApolloCurrentQueryResult = { networkStatus: NetworkStatus; error?: ApolloError; partial?: boolean; + stale?: boolean; }; export interface FetchMoreOptions< From 2f197f86d7fbf770bac0cc843cec3378dcc78bc8 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 21 Feb 2019 21:20:09 -0500 Subject: [PATCH 085/230] Adjust setQuery updater function call to appease tsc The current code is returning a "Spread types may only be created from object types" error when trying to understand `{ ...prev, ...updater(prev) }`. This commit makes sure typescript can tell the result is an object. --- packages/apollo-client/src/core/QueryManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 4486aea32d8..bc68acc2e3c 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -1444,7 +1444,7 @@ export class QueryManager { updater: (prev: QueryInfo) => Pick, ) { const prev = this.getQuery(queryId); - const newInfo = { ...prev, ...updater(prev) }; + const newInfo = { ...prev, ...(updater(prev) as object) }; this.queries.set(queryId, newInfo); } From 27adcdea494467fa509be405b1fd5af7b1854acd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Feb 2019 06:29:06 +0000 Subject: [PATCH 086/230] chore(deps): update dependency danger to v7.0.13 --- package-lock.json | 37 ++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c1ca25a1f5..362e30147fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4158,9 +4158,9 @@ } }, "danger": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.12.tgz", - "integrity": "sha512-pew8vsBs2bitXt5upLuvfEAqvVuvzLoo/BjX7ysGI3yXQ8X7vrESo1/gGRvkA4uaDEoDq7LaBR4xhxfqxk9fog==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.13.tgz", + "integrity": "sha512-6tHEWYCCycI0szlodbxDUR4d91l3Gu33ChrowvJOYZ5P9VhxTkmamWC04b3f5qgxkrFsQCTiuAL8eqvMQyOQyw==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", @@ -4679,9 +4679,9 @@ } }, "ecdsa-sig-formatter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", - "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -8771,12 +8771,12 @@ "dev": true }, "jsonwebtoken": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", - "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz", + "integrity": "sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA==", "dev": true, "requires": { - "jws": "^3.1.5", + "jws": "^3.2.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -8784,7 +8784,8 @@ "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", - "ms": "^2.1.1" + "ms": "^2.1.1", + "semver": "^5.6.0" }, "dependencies": { "ms": { @@ -8792,6 +8793,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true } } }, @@ -8816,13 +8823,13 @@ } }, "jwa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.2.0.tgz", - "integrity": "sha512-Grku9ZST5NNQ3hqNUodSkDfEBqAmGA1R8yiyPHOnLzEKI0GaCQC/XhFmsheXYuXzFQJdILbh+lYBiliqG5R/Vg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.3.0.tgz", + "integrity": "sha512-SxObIyzv9a6MYuZYaSN6DhSm9j3+qkokwvCB0/OTSV5ylPq1wUQiygZQcHT5Qlux0I5kmISx3J86TxKhuefItg==", "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.10", + "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, diff --git a/package.json b/package.json index a023e553265..d371cddf236 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.12", + "danger": "7.0.13", "fetch-mock": "7.3.0", "flow-bin": "0.93.0", "graphql": "14.1.1", From b781f7885df5956e146704c9e5f83c208ae859cf Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 22 Feb 2019 08:59:43 -0500 Subject: [PATCH 087/230] Revert "Adjust setQuery updater function call to appease tsc" This reverts commit 2f197f86d7fbf770bac0cc843cec3378dcc78bc8. This change isn't necessary when using typescript >= 3.2, which Apollo Client is configured to use. My global typescript was stuck as 3.1, hence the unnecessary commit. --- packages/apollo-client/src/core/QueryManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index bc68acc2e3c..4486aea32d8 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -1444,7 +1444,7 @@ export class QueryManager { updater: (prev: QueryInfo) => Pick, ) { const prev = this.getQuery(queryId); - const newInfo = { ...prev, ...(updater(prev) as object) }; + const newInfo = { ...prev, ...updater(prev) }; this.queries.set(queryId, newInfo); } From a1ce7be13d010fa536f0a15eaf601200e682cd72 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sun, 24 Feb 2019 16:03:05 -0500 Subject: [PATCH 088/230] Re-enable local state tests Recent jest config changes inadvertantly disabled all local state tests. --- config/jest.config.settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/jest.config.settings.js b/config/jest.config.settings.js index c00ccf94690..4ddbe43348c 100644 --- a/config/jest.config.settings.js +++ b/config/jest.config.settings.js @@ -12,7 +12,7 @@ module.exports = { moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], testURL: 'http://localhost', - testMatch: ['/src/**/__tests__/*.ts'], + testMatch: ['/src/**/__tests__/**/*.ts'], testPathIgnorePatterns: [ '/node_modules/', '/lib/', From f73c4cf3ed1941176efed2b136ad631874318a74 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 23 Feb 2019 06:23:33 +0000 Subject: [PATCH 089/230] chore(deps): update dependency @types/node to v10.12.27 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 362e30147fa..afd9cc849ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1692,9 +1692,9 @@ "dev": true }, "@types/node": { - "version": "10.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", - "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==", + "version": "10.12.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.27.tgz", + "integrity": "sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==", "dev": true }, "@types/prop-types": { diff --git a/package.json b/package.json index d371cddf236..a1f8e1e7d95 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.121", - "@types/node": "10.12.26", + "@types/node": "10.12.27", "@types/react": "16.8.3", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", From 770b5021dd3bea9b5aa2f48afb99bd28989442ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Feb 2019 09:33:23 +0000 Subject: [PATCH 090/230] chore(deps): update dependency @types/react to v16.8.4 --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index afd9cc849ef..6cfc34d22ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1704,9 +1704,9 @@ "dev": true }, "@types/react": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.3.tgz", - "integrity": "sha512-PjPocAxL9SNLjYMP4dfOShW/rj9FDBJGu3JFRt0zEYf77xfihB6fq8zfDpMrV6s82KnAi7F1OEe5OsQX25Ybdw==", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.4.tgz", + "integrity": "sha512-Mpz1NNMJvrjf0GcDqiK8+YeOydXfD8Mgag3UtqQ5lXYTsMnOiHcKmO48LiSWMb1rSHB9MV/jlgyNzeAVxWMZRQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -11779,21 +11779,21 @@ } }, "react": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.2.tgz", - "integrity": "sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.2" + "scheduler": "^0.13.3" }, "dependencies": { "scheduler": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", - "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", + "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index a1f8e1e7d95..dc047b120c5 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.121", "@types/node": "10.12.27", - "@types/react": "16.8.3", + "@types/react": "16.8.4", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", "bundlesize": "0.17.1", @@ -103,7 +103,7 @@ "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", - "react": "16.8.2", + "react": "16.8.3", "react-dom": "16.8.2", "rollup": "1.2.2", "rollup-plugin-local-resolve": "1.0.7", From cc5b88320a88fae1130ebd42ce982f041d5f83d7 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 25 Feb 2019 06:10:56 -0500 Subject: [PATCH 091/230] Make sure `npm run watch` builds ESM/UMD bundles (#4482) Changes to make sure calling `npm run watch` in any of this repo's child packages ensures the final bundles are built after compilation has completed. For the full details on why this is needed, see: https://github.com/apollographql/react-apollo/pull/2765 --- package-lock.json | 112 ++++++++++++++++++++ package.json | 1 + packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 7 files changed, 118 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 443e38462dd..914db24c182 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4686,6 +4686,32 @@ "es5-ext": "~0.10.14" } }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + }, + "dependencies": { + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + } + } + }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", @@ -5467,6 +5493,12 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -9303,6 +9335,12 @@ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -10653,6 +10691,15 @@ "pify": "^3.0.0" } }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -10957,6 +11004,15 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -13274,6 +13330,15 @@ "readable-stream": "^2.0.2" } }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", @@ -13928,6 +13993,53 @@ } } }, + "tsc-watch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-2.1.2.tgz", + "integrity": "sha512-w80windZ4HAFpq2qtva/WsgfyYqS4CXTow+KjyO+AmYRFIDhzODUIK2BJW7M1Y8sL8NZUH0b4U1ET3436Q7Ctw==", + "dev": true, + "requires": { + "cross-spawn": "^5.1.0", + "node-cleanup": "^2.1.2", + "ps-tree": "^1.2.0", + "string-argv": "^0.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "string-argv": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.1.tgz", + "integrity": "sha512-El1Va5ehZ0XTj3Ekw4WFidXvTmt9SrC0+eigdojgtJMVtPkF0qbBe9fyNSl9eQf+kUHnTSQxdQYzuHfZy8V+DQ==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", diff --git a/package.json b/package.json index 17ab933e346..266bacdcf2c 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "rollup-plugin-typescript2": "0.18.1", "rxjs": "6.4.0", "ts-jest": "23.1.4", + "tsc-watch": "^2.1.2", "tslib": "1.9.3", "tslint": "5.12.1", "typescript": "3.3.3", diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index fb4150635a9..223716d8093 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -34,7 +34,7 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "watch": "tsc -w -p .", + "watch": "../../node_modules/tsc-watch/index.js --onSuccess \"npm run postbuild\"", "clean": "rm -rf coverage/* lib/*", "prepublishOnly": "npm run build" }, diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 20219c77cfb..04758c2509f 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -31,7 +31,7 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "watch": "tsc -w -p .", + "watch": "../../node_modules/tsc-watch/index.js --onSuccess \"npm run postbuild\"", "clean": "rm -rf coverage/* lib/*", "prepublishOnly": "npm run clean && npm run build" }, diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 65c40036b84..af8c8268bd0 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -20,7 +20,7 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "build:benchmark": "tsc -p tsconfig.benchmark.json", - "watch": "tsc -w", + "watch": "../../node_modules/tsc-watch/index.js --onSuccess \"npm run postbuild\"", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "testonly": "jest", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index b37f48f84a7..9d30caa5290 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -31,7 +31,7 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "watch": "tsc -w -p .", + "watch": "../../node_modules/tsc-watch/index.js --onSuccess \"npm run postbuild\"", "clean": "rm -rf coverage/* lib/*", "prepublishOnly": "npm run clean && npm run build" }, diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 7f2fdbd73c7..8e2599a1851 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -13,7 +13,7 @@ "build": "tsc -b .", "postbuild": "npm run bundle", "bundle": "../../node_modules/rollup/bin/rollup -c rollup.config.js", - "watch": "tsc -w", + "watch": "../../node_modules/tsc-watch/index.js --onSuccess \"npm run postbuild\"", "prepublishOnly": "npm run build", "lint": "tslint -c \"../../config/tslint.json\" -p tsconfig.json src/*.ts", "clean": "rm -rf coverage/* lib/*" From 8eed4e2a75b990544ccdc9b6bfa05867e064bba2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Feb 2019 10:37:00 +0000 Subject: [PATCH 092/230] chore(deps): update dependency react-dom to v16.8.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6cfc34d22ea..4da2ba6a615 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11803,15 +11803,15 @@ } }, "react-dom": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.2.tgz", - "integrity": "sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.3.tgz", + "integrity": "sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.2" + "scheduler": "^0.13.3" } }, "read": { @@ -12652,9 +12652,9 @@ "dev": true }, "scheduler": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", - "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", + "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index dc047b120c5..e60f54ec12a 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "pre-commit": "1.2.2", "prettier": "1.16.4", "react": "16.8.3", - "react-dom": "16.8.2", + "react-dom": "16.8.3", "rollup": "1.2.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.0", From 1603c050b31cb8c7a2d1d43ad0cadfe5fb43c132 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 25 Feb 2019 07:13:33 -0500 Subject: [PATCH 093/230] Stop using cache results in local resolver root values (#4495) In an effort to simulate `defaults` behaviour from `apollo-link-state`, we're leveraging cache results when running local resolvers. The idea being that if a local resolver isn't defined for a `@client` field, the local resolver handling code can then fallback on using any matching cache results, to resolve the field. While this works in theory, it has introduced a few problems, like the one reported in #4474. Since local resolvers adhere to Apollo Client's query fetch policy, by defalut the cache is consulted first, when trying to resolve a `@client` field. This means we shouldn't need to attempt to resolve from the cache again, when processing local resolvers, in most cases. There are a few situations where we might want to do this, but the requirements are theoretical at this point, and can be addressed in future changes if needed. This commit removes the extra cache check, and adds a test to verify that the behaviour reported in #4474 is fixed. --- .../src/__tests__/local-state/export.ts | 9 ++- .../src/__tests__/local-state/resolvers.ts | 63 +++++++++++++++++++ packages/apollo-client/src/core/LocalState.ts | 17 +---- 3 files changed, 68 insertions(+), 21 deletions(-) diff --git a/packages/apollo-client/src/__tests__/local-state/export.ts b/packages/apollo-client/src/__tests__/local-state/export.ts index 6a3222f1366..a96bbc56344 100644 --- a/packages/apollo-client/src/__tests__/local-state/export.ts +++ b/packages/apollo-client/src/__tests__/local-state/export.ts @@ -433,8 +433,10 @@ describe('@client @export tests', () => { cache, link, resolvers: { - CurrentReviewer: { - id: () => currentReviewer.id, + Post: { + currentReviewer() { + return currentReviewer; + }, }, }, }); @@ -442,9 +444,6 @@ describe('@client @export tests', () => { cache.writeData({ data: { postRequiringReview: { - currentReviewer: { - __typename: 'CurrentReviewer', - }, __typename: 'Post', }, }, diff --git a/packages/apollo-client/src/__tests__/local-state/resolvers.ts b/packages/apollo-client/src/__tests__/local-state/resolvers.ts index ff59170b4d0..0bde2672323 100644 --- a/packages/apollo-client/src/__tests__/local-state/resolvers.ts +++ b/packages/apollo-client/src/__tests__/local-state/resolvers.ts @@ -731,6 +731,69 @@ describe('Resolving field aliases', () => { }); }, ); + + it( + 'should resolve @client fields using local resolvers and not have ' + + 'their value overridden when a fragment is loaded', + () => { + const query = gql` + fragment LaunchDetails on Launch { + id + __typename + } + query Launch { + launch { + isInCart @client + ...LaunchDetails + } + } + `; + + const link = new ApolloLink(() => + Observable.of({ + data: { + launch: { + id: 1, + __typename: 'Launch', + }, + }, + }), + ); + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link, + resolvers: { + Launch: { + isInCart() { + return true; + }, + }, + }, + }); + + client.writeData({ + data: { + launch: { + isInCart: false, + __typename: 'Launch', + }, + }, + }); + + return client.query({ query }).then(({ data }) => { + // `isInCart` resolver is fired, returning `true` (which is then + // stored in the cache). + expect(data.launch.isInCart).toBe(true); + }).then(() => { + client.query({ query }).then(({ data }) => { + // When the same query fires again, `isInCart` should be pulled from + // the cache and have a value of `true`. + expect(data.launch.isInCart).toBe(true); + }); + }); + } + ); }); describe('Force local resolvers', () => { diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 7b8b2cce2e0..5622185e27f 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -143,24 +143,9 @@ export class LocalState { onlyRunForcedResolvers?: boolean; }): Promise> { if (document) { - const toMerge: TData[] = []; - - const rootValueFromCache = this.buildRootValueFromCache( - document, - variables, - ); - - if (rootValueFromCache) { - toMerge.push(rootValueFromCache as TData); - } - - if (remoteResult.data) { - toMerge.push(remoteResult.data); - } - return this.resolveDocument( document, - mergeDeepArray(toMerge), + remoteResult.data, context, variables, this.fragmentMatcher, From dea8b34f722175871235bb424ac4d37cb28ec018 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Feb 2019 11:46:44 +0000 Subject: [PATCH 094/230] chore(deps): update dependency rollup-plugin-node-resolve to v4.0.1 --- package-lock.json | 23 +++++++++++++++++++---- package.json | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4da2ba6a615..29f0b4d5d60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12224,14 +12224,14 @@ "dev": true }, "rollup-plugin-node-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz", - "integrity": "sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz", + "integrity": "sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg==", "dev": true, "requires": { "builtin-modules": "^3.0.0", "is-module": "^1.0.0", - "resolve": "^1.8.1" + "resolve": "^1.10.0" }, "dependencies": { "builtin-modules": { @@ -12239,6 +12239,21 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, diff --git a/package.json b/package.json index e60f54ec12a..e578ade2c53 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "react-dom": "16.8.3", "rollup": "1.2.2", "rollup-plugin-local-resolve": "1.0.7", - "rollup-plugin-node-resolve": "4.0.0", + "rollup-plugin-node-resolve": "4.0.1", "rollup-plugin-sourcemaps": "0.4.2", "rxjs": "6.4.0", "ts-jest": "23.1.4", From 8f13d4ac9c50fa294e807bbd948851292da6a5b8 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 25 Feb 2019 07:29:20 -0500 Subject: [PATCH 095/230] chore: Publish - apollo-boost@0.3.0-rc.2 - apollo-cache-inmemory@1.5.0-rc.2 - apollo-cache@1.2.0-rc.2 - apollo-client@2.5.0-rc.2 - apollo-utilities@1.2.0-rc.2 - graphql-anywhere@4.2.0-rc.2 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index e4b0fcc4445..529148f71d1 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-rc.1", + "version": "0.3.0-rc.2", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 223716d8093..c5946ccd69b 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-rc.1", + "version": "1.5.0-rc.2", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 04758c2509f..a5b9fad666a 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-rc.1", + "version": "1.2.0-rc.2", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index af8c8268bd0..89264ea51b7 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-rc.1", + "version": "2.5.0-rc.2", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 9d30caa5290..7eb8503bb0b 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0-rc.1", + "version": "1.2.0-rc.2", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index 8e2599a1851..e4820959db2 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-rc.1", + "version": "4.2.0-rc.2", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From adfd9c008c1a9afab09fdda70f0b121287ed6eb7 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 25 Feb 2019 10:42:15 -0500 Subject: [PATCH 096/230] Avoid handling client typeDefs in LocalState class. The only reason we currently store/manage client typeDefs in the Apollo Client codebase is so that they can be consumed by the Apollo DevTools in development. Because the DevTools do not have a public API, it's important for developers to continue passing any client typeDefs to the ApolloClient constructor, but we do not have to expose those typeDefs through any convenient public API, and the LocalState class should not need to know about them at all, much less perform any expensive normalization, since all of that work can be done by the DevTools. Instead, the typeDefs are now exposed as client.typeDefs, exactly as they were originally passed to the ApolloClient constructor. Local resolvers will no longer receive context.schemas, but that's no great loss because the LocalState implementation is new in apollo-client@2.5.0. It would be much harder to remove that functionality after shipping v2.5.0, which is why it's important to do it now. Thanks to this change, we're back to having zero imports of graphql/language/printer in the Apollo Client codebase (though the printer is still used by apollo-link). @hwillson @justinanastos I realize there's been some churn in the way the DevTools and the client communicate recently, but the good news is we can iterate freely because it's a private API. Let me know if you have any questions about this change! --- packages/apollo-client/src/ApolloClient.ts | 3 +- .../src/__tests__/local-state/typeDefs.ts | 92 ------------------- packages/apollo-client/src/core/LocalState.ts | 39 +------- 3 files changed, 3 insertions(+), 131 deletions(-) delete mode 100644 packages/apollo-client/src/__tests__/local-state/typeDefs.ts diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 92b3499ccce..8cf0be460e6 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -77,6 +77,7 @@ export default class ApolloClient implements DataProxy { public version: string; public queryDeduplication: boolean; public defaultOptions: DefaultOptions = {}; + public readonly typeDefs: ApolloClientOptions['typeDefs']; private devToolsHookCb: Function; private proxy: ApolloCache | undefined; @@ -169,6 +170,7 @@ export default class ApolloClient implements DataProxy { this.queryDeduplication = queryDeduplication; this.ssrMode = ssrMode; this.defaultOptions = defaultOptions || {}; + this.typeDefs = typeDefs; if (ssrForceFetchDelay) { setTimeout( @@ -243,7 +245,6 @@ export default class ApolloClient implements DataProxy { cache, client: this, resolvers, - typeDefs, fragmentMatcher, }); } diff --git a/packages/apollo-client/src/__tests__/local-state/typeDefs.ts b/packages/apollo-client/src/__tests__/local-state/typeDefs.ts deleted file mode 100644 index b85fea29400..00000000000 --- a/packages/apollo-client/src/__tests__/local-state/typeDefs.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { InMemoryCache } from 'apollo-cache-inmemory'; -import { ApolloLink, Observable } from 'apollo-link'; -import gql from 'graphql-tag'; - -import ApolloClient from '../..'; - -describe('Default use', () => { - it( - 'should add a schema string in SDL format to the context as definition ' + - 'if typeDefs are passed in', - done => { - const link = new ApolloLink(operation => { - const { schemas } = operation.getContext(); - expect(schemas).toMatchSnapshot(); - return Observable.of({ - data: { foo: { bar: true, __typename: 'Bar' } }, - }); - }); - - const typeDefs = ` - type Todo { - id: String - message: String! - } - - type Query { - todo(id: String!): Todo - } - `; - - const remoteQuery = gql` - { - foo { - bar - } - } - `; - - const client = new ApolloClient({ - cache: new InMemoryCache(), - link, - typeDefs, - }); - - client.query({ query: remoteQuery }).then(() => done(), done.fail); - }, - ); - - it('should concatenate schema strings if typeDefs are passed in as an array', done => { - const anotherSchema = ` - type Foo { - foo: String! - bar: String - } - `; - - const link = new ApolloLink(operation => { - const { schemas } = operation.getContext(); - expect(schemas).toMatchSnapshot(); - return Observable.of({ - data: { foo: { bar: true, __typename: 'Bar' } }, - }); - }); - - const typeDefs = ` - type Todo { - id: String - message: String! - } - - type Query { - todo(id: String!): Todo - } - `; - - const remoteQuery = gql` - { - foo { - bar - } - } - `; - - const client = new ApolloClient({ - cache: new InMemoryCache(), - link, - typeDefs: [typeDefs, anotherSchema], - }); - - client.query({ query: remoteQuery }).then(() => done(), done.fail); - }); -}); diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 5622185e27f..268077e714b 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -9,7 +9,6 @@ import { FieldNode, ASTNode, } from 'graphql'; -import { print } from 'graphql/language/printer'; import { visit, BREAK } from 'graphql/language/visitor'; import { ApolloCache } from 'apollo-cache'; @@ -69,7 +68,6 @@ export type LocalStateOptions = { cache: ApolloCache; client?: ApolloClient; resolvers?: Resolvers | Resolvers[]; - typeDefs?: string | string[] | DocumentNode | DocumentNode[]; fragmentMatcher?: FragmentMatcher; }; @@ -77,14 +75,12 @@ export class LocalState { private cache: ApolloCache; private client: ApolloClient; private resolvers: Resolvers | Resolvers[] = {}; - private typeDefs: string | string[] | DocumentNode | DocumentNode[]; private fragmentMatcher: FragmentMatcher; constructor({ cache, client, resolvers, - typeDefs, fragmentMatcher, }: LocalStateOptions) { this.cache = cache; @@ -97,10 +93,6 @@ export class LocalState { this.addResolvers(resolvers); } - if (typeDefs) { - this.setTypeDefs(typeDefs); - } - if (fragmentMatcher) { this.setFragmentMatcher(fragmentMatcher); } @@ -159,16 +151,6 @@ export class LocalState { return remoteResult; } - public setTypeDefs( - typeDefs: string | string[] | DocumentNode | DocumentNode[], - ) { - this.typeDefs = typeDefs; - } - - public getTypeDefs(): string | string[] | DocumentNode | DocumentNode[] { - return this.typeDefs; - } - public setFragmentMatcher(fragmentMatcher: FragmentMatcher) { this.fragmentMatcher = fragmentMatcher; } @@ -189,14 +171,7 @@ export class LocalState { } public prepareContext(context = {}) { - const cache = this.cache; - - let schemas: object[] = []; - if (this.typeDefs) { - const directives = 'directive @client on FIELD'; - const definition = this.normalizeTypeDefs(this.typeDefs); - schemas.push({ definition, directives }); - } + const { cache } = this; const newContext = { ...context, @@ -212,7 +187,6 @@ export class LocalState { ); } }, - schemas, }; return newContext; @@ -281,17 +255,6 @@ export class LocalState { }).result; } - private normalizeTypeDefs( - typeDefs: string | string[] | DocumentNode | DocumentNode[], - ) { - const defs = Array.isArray(typeDefs) ? typeDefs : [typeDefs]; - - return defs - .map(typeDef => (typeof typeDef === 'string' ? typeDef : print(typeDef))) - .map(str => str.trim()) - .join('\n'); - } - private async resolveDocument( document: DocumentNode, rootValue: TData, From f4cd2fa933963be9180973a43c8c5f651c20da19 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 25 Feb 2019 19:22:07 -0500 Subject: [PATCH 097/230] Remove obsolete Jest snapshot. --- .../__snapshots__/typeDefs.ts.snap | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap diff --git a/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap b/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap deleted file mode 100644 index a1a46ea8877..00000000000 --- a/packages/apollo-client/src/__tests__/local-state/__snapshots__/typeDefs.ts.snap +++ /dev/null @@ -1,37 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Default use should add a schema string in SDL format to the context as definition if typeDefs are passed in 1`] = ` -Array [ - Object { - "definition": "type Todo { - id: String - message: String! - } - - type Query { - todo(id: String!): Todo - }", - "directives": "directive @client on FIELD", - }, -] -`; - -exports[`Default use should concatenate schema strings if typeDefs are passed in as an array 1`] = ` -Array [ - Object { - "definition": "type Todo { - id: String - message: String! - } - - type Query { - todo(id: String!): Todo - } -type Foo { - foo: String! - bar: String - }", - "directives": "directive @client on FIELD", - }, -] -`; From 96fa3dad940549943ddc858580639daa3d2ed136 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 25 Feb 2019 21:07:55 -0500 Subject: [PATCH 098/230] Enable local state only when client resolvers provided. (#4499) * Enable local state only when client resolvers provided. If an application was previously using apollo-link-state, updating to apollo-client@2.5.0 could cause problems because @client fields are now stripped by the integrated LocalState API, and thus will not be passed into the link chain. This commit should ease the transition by enabling the LocalState functionality only if client resolvers were passed to the ApolloClient constructor, or the LocalState#setResolvers method has been called. If no client resolvers have been specified, @client fields will remain in the query passed to the link chain, so apollo-link-state can still process them, though a warning will be logged in development. If you want to use @client directives to read from or write to the cache without running resolver functions, you can pass an empty resolvers:{} map to enable the LocalState functionality (including the stripping of @client fields from queries). * Refine private LocalState resolvers field type. The setResolvers method normalizes Resolvers[] arrays into a combined (non-array) Resolvers object. --- .../src/__tests__/local-state/export.ts | 8 ++++ .../src/__tests__/local-state/general.ts | 38 +++++++++++++++++++ packages/apollo-client/src/core/LocalState.ts | 21 +++++++--- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/packages/apollo-client/src/__tests__/local-state/export.ts b/packages/apollo-client/src/__tests__/local-state/export.ts index a96bbc56344..94a169e92c3 100644 --- a/packages/apollo-client/src/__tests__/local-state/export.ts +++ b/packages/apollo-client/src/__tests__/local-state/export.ts @@ -19,6 +19,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link: ApolloLink.empty(), + resolvers: {}, }); cache.writeData({ data: { field: 1 } }); @@ -47,6 +48,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link: ApolloLink.empty(), + resolvers: {}, }); cache.writeData({ @@ -198,6 +200,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ @@ -259,6 +262,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ @@ -307,6 +311,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache: new InMemoryCache(), link, + resolvers: {}, }); return client.query({ query }).then(({ data }: any) => { @@ -360,6 +365,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ @@ -548,6 +554,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ @@ -599,6 +606,7 @@ describe('@client @export tests', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ diff --git a/packages/apollo-client/src/__tests__/local-state/general.ts b/packages/apollo-client/src/__tests__/local-state/general.ts index 89a5d6d5da8..8128bfc419a 100644 --- a/packages/apollo-client/src/__tests__/local-state/general.ts +++ b/packages/apollo-client/src/__tests__/local-state/general.ts @@ -9,6 +9,7 @@ import { IntrospectionFragmentMatcher, } from 'apollo-cache-inmemory'; import { ApolloLink, Observable, Operation } from 'apollo-link'; +import { hasDirectives } from 'apollo-utilities'; describe('General functionality', () => { it('should not impact normal non-@client use', () => { @@ -34,6 +35,38 @@ describe('General functionality', () => { }); }); + // TODO The functionality tested here should be removed (along with the test) + // once apollo-link-state is fully deprecated. + it('should strip @client fields only if client resolvers specified', async () => { + const query = gql` + { + field @client + } + `; + + const client = new ApolloClient({ + cache: new InMemoryCache(), + link: new ApolloLink(operation => { + expect(hasDirectives(['client'], operation.query)).toBe(true); + return Observable.of({ data: { field: 'local' } }); + }), + }); + + const { warn } = console; + const messages: string[] = []; + console.warn = (message: string) => messages.push(message); + try { + const result = await client.query({ query }); + expect(result.data).toEqual({ field: 'local' }); + expect(messages).toEqual([ + 'Found @client directives in query but no client resolvers were specified. ' + + 'You can now pass apollo-link-state resolvers to the ApolloClient constructor.', + ]); + } finally { + console.warn = warn; + } + }); + it('should not interfere with server introspection queries', () => { const query = gql` ${introspectionQuery} @@ -232,6 +265,7 @@ describe('Cache manipulation', () => { const client = new ApolloClient({ cache, link: ApolloLink.empty(), + resolvers: {}, }); cache.writeQuery({ query, data: { field: 'yo' } }); @@ -410,6 +444,7 @@ describe('Sample apps', () => { const client = new ApolloClient({ link, cache: new InMemoryCache(), + resolvers: {}, }); const update = ( @@ -504,6 +539,7 @@ describe('Sample apps', () => { const client = new ApolloClient({ link: ApolloLink.empty(), cache: new InMemoryCache(), + resolvers: {}, }); interface Todo { @@ -749,6 +785,7 @@ describe('Combining client and server state/operations', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ @@ -786,6 +823,7 @@ describe('Combining client and server state/operations', () => { const client = new ApolloClient({ cache, link, + resolvers: {}, }); cache.writeData({ diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index 268077e714b..efe94b67c0d 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -35,7 +35,6 @@ import ApolloClient from '../ApolloClient'; import { Resolvers, OperationVariables } from './types'; import { capitalizeFirstLetter } from '../util/capitalizeFirstLetter'; - export type Resolver = ( fieldName: string, rootValue: any, @@ -74,7 +73,7 @@ export type LocalStateOptions = { export class LocalState { private cache: ApolloCache; private client: ApolloClient; - private resolvers: Resolvers | Resolvers[] = {}; + private resolvers?: Resolvers; private fragmentMatcher: FragmentMatcher; constructor({ @@ -99,6 +98,7 @@ export class LocalState { } public addResolvers(resolvers: Resolvers | Resolvers[]) { + this.resolvers = this.resolvers || {}; if (Array.isArray(resolvers)) { resolvers.forEach(resolverGroup => { this.resolvers = mergeDeep(this.resolvers, resolverGroup); @@ -114,7 +114,7 @@ export class LocalState { } public getResolvers() { - return this.resolvers; + return this.resolvers || {}; } // Run local client resolvers against the incoming query and remote data. @@ -162,12 +162,21 @@ export class LocalState { // Client queries contain everything in the incoming document (if a @client // directive is found). public clientQuery(document: DocumentNode) { - return hasDirectives(['client'], document) ? document : null; + if (hasDirectives(['client'], document)) { + if (this.resolvers) { + return document; + } + invariant.warn( + 'Found @client directives in query but no client resolvers were specified. ' + + 'You can now pass apollo-link-state resolvers to the ApolloClient constructor.', + ); + } + return null; } // Server queries are stripped of all @client based selection sets. public serverQuery(document: DocumentNode) { - return removeClientSetsFromDocument(document); + return this.resolvers ? removeClientSetsFromDocument(document) : document; } public prepareContext(context = {}) { @@ -376,7 +385,7 @@ export class LocalState { ) { const resolverType = rootValue.__typename || execContext.defaultOperationType; - const resolverMap = (this.resolvers as any)[resolverType]; + const resolverMap = this.resolvers && this.resolvers[resolverType]; if (resolverMap) { const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName]; if (resolve) { From db529914f850ed5549dc43a4e1ec6e07fa14da5e Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 11:01:42 -0500 Subject: [PATCH 099/230] chore: Publish - apollo-boost@0.3.0-rc.3 - apollo-client@2.5.0-rc.3 --- packages/apollo-boost/package.json | 2 +- packages/apollo-client/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 529148f71d1..a1b737e3ce1 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-rc.2", + "version": "0.3.0-rc.3", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 89264ea51b7..9e7d74c2697 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-rc.2", + "version": "2.5.0-rc.3", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From b1e0d6683adeb9e9021e728be3ba04f4e98eb853 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 11:31:41 -0500 Subject: [PATCH 100/230] Add new advanced section with a high-level code-splitting example --- docs/source/essentials/local-state.md | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 6420b286a98..4083050f62d 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -948,6 +948,80 @@ If you open up Apollo Client Devtools and click on the `GraphiQL` tab, you'll be ![GraphiQL Console](../assets/client-schema.png) +

Advanced

+ +

Code splitting

+ +Depending on the complexity and size of your local resolvers, you might not always want to define them up front, when you create your initial `ApolloClient` instance. If you have local resolvers that are only needed in a specific part of your application, you can leverage Apollo Client's [`addResolvers`](#apollo-client) and [`setResolvers`](#apollo-client) functions to adjust your resolver map at any point. This can be really useful when leveraging techniques like route based code-splitting, using something like [`react-loadable`](https://github.com/jamiebuilds/react-loadable). + +Let's say we're building a messaging app and have a `/stats` route that is used return the total number of messages stored locally. If we use `react-loadable` to load our `Stats` component like: + +```js +import Loadable from 'react-loadable'; + +import Loading from './components/Loading'; + +export const Stats = Loadable({ + loader: () => import('./components/stats/Stats'), + loading: Loading, +}); +``` + +and wait until our `Stats` component is called to define our local resolvers (using `addResolvers`): + +```js +import React from 'react'; +import { ApolloConsumer, Query } from 'react-apollo'; +import gql from 'graphql-tag'; + +const GET_MESSAGE_COUNT = gql` + { + messageCount @client { + total + } + } +`; + +const resolvers = { + Query: { + messageCount: (_, args, { cache }) => { + // ... calculate and return the number of messages in + // the cache ... + return { + total: 123, + __typename: 'MessageCount', + }; + }, + }, +}; + +const MessageCount = () => { + return ( + + {(client) => { + client.addResolvers(resolvers); + return ( + + {({ loading, data: { messageCount } }) => { + if (loading) return 'Loading ...'; + return ( +

+ Total number of messages: {messageCount.total} +

+ ); + }} +
+ ); + }} +
+ ); +}; + +export default MessageCount; +``` + +our local resolver code will only be included in the bundle a user downloads when (if) they access `/stats`. It won't be included in the initial application bundle, which helps keep the size of our initial bundle down, and ultimately helps with download and application startup times. +

Migrating from `apollo-link-state`

The [`apollo-link-state`](https://github.com/apollographql/apollo-link-state) project was the first to bring local state handling into the Apollo ecosystem. Handling local resolvers through the addition of an `ApolloLink` was a great starting point, and proved that `@client` based queries make sense, and work really well for local state management. From 3489c03d54876748159f3299e7c51229dca5ad9c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 26 Feb 2019 11:38:51 -0500 Subject: [PATCH 101/230] Fix type parameter defaults for various ApolloClient methods. --- packages/apollo-client/src/ApolloClient.ts | 22 +++++++++---------- .../apollo-client/src/core/QueryManager.ts | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 8cf0be460e6..5146ad421ef 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -278,7 +278,7 @@ export default class ApolloClient implements DataProxy { * See [here](https://medium.com/apollo-stack/the-concepts-of-graphql-bc68bd819be3#.3mb0cbcmc) for * a description of store reactivity. */ - public watchQuery( + public watchQuery( options: WatchQueryOptions, ): ObservableQuery { if (this.defaultOptions.watchQuery) { @@ -309,7 +309,7 @@ export default class ApolloClient implements DataProxy { * describe how this query should be treated e.g. whether it should hit the * server at all or just resolve from the cache, etc. */ - public query( + public query( options: QueryOptions, ): Promise> { if (this.defaultOptions.query) { @@ -339,7 +339,7 @@ export default class ApolloClient implements DataProxy { * * It takes options as an object with the following keys and values: */ - public mutate( + public mutate( options: MutationOptions, ): Promise> { if (this.defaultOptions.mutate) { @@ -359,7 +359,7 @@ export default class ApolloClient implements DataProxy { public subscribe( options: SubscriptionOptions, ): Observable { - return this.initQueryManager().startGraphQLSubscription(options); + return this.initQueryManager().startGraphQLSubscription(options); } /** @@ -371,11 +371,11 @@ export default class ApolloClient implements DataProxy { * @param optimistic Set to `true` to allow `readQuery` to return * optimistic results. Is `false` by default. */ - public readQuery( + public readQuery( options: DataProxy.Query, optimistic: boolean = false, ): T | null { - return this.initProxy().readQuery(options, optimistic); + return this.initProxy().readQuery(options, optimistic); } /** @@ -392,11 +392,11 @@ export default class ApolloClient implements DataProxy { * @param optimistic Set to `true` to allow `readFragment` to return * optimistic results. Is `false` by default. */ - public readFragment( + public readFragment( options: DataProxy.Fragment, optimistic: boolean = false, ): T | null { - return this.initProxy().readFragment(options, optimistic); + return this.initProxy().readFragment(options, optimistic); } /** @@ -407,7 +407,7 @@ export default class ApolloClient implements DataProxy { public writeQuery( options: DataProxy.WriteQueryOptions, ): void { - const result = this.initProxy().writeQuery(options); + const result = this.initProxy().writeQuery(options); this.initQueryManager().broadcastQueries(); return result; } @@ -426,7 +426,7 @@ export default class ApolloClient implements DataProxy { public writeFragment( options: DataProxy.WriteFragmentOptions, ): void { - const result = this.initProxy().writeFragment(options); + const result = this.initProxy().writeFragment(options); this.initQueryManager().broadcastQueries(); return result; } @@ -444,7 +444,7 @@ export default class ApolloClient implements DataProxy { public writeData( options: DataProxy.WriteDataOptions, ): void { - const result = this.initProxy().writeData(options); + const result = this.initProxy().writeData(options); this.initQueryManager().broadcastQueries(); return result; } diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 4486aea32d8..e3f8765db18 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -972,9 +972,9 @@ export class QueryManager { return queryId; } - public startGraphQLSubscription( + public startGraphQLSubscription( options: SubscriptionOptions, - ): Observable { + ): Observable { const { query } = options; const isCacheEnabled = !( options.fetchPolicy && options.fetchPolicy === 'no-cache' From e40a93688376b2ab97997890903d3d4abb68eb51 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 11:45:33 -0500 Subject: [PATCH 102/230] Doc changes to accommodate enabling/disabling AC @client handling Related to https://github.com/apollographql/apollo-client/pull/4499. --- docs/source/essentials/local-state.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 4083050f62d..ee95fa8d7dc 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -512,6 +512,7 @@ const cache = new InMemoryCache(); const client = new ApolloClient({ cache, link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), + resolvers: {}, }); cache.writeData({ @@ -538,6 +539,8 @@ ReactDOM.render( In the above example, we first prep the cache using `cache.writeData` to store a value for the `isLoggedIn` field. We then run the `IS_LOGGED_IN` query via a React Apollo `Query` component, which includes an `@client` directive. When Apollo Client executes the `IS_LOGGED_IN` query, it first looks for a local resolver that can be used to handle the `@client` field. When it can't find one, it falls back on trying to pull the specified field out of the cache. So in this case, the `data` value passed into the `Query` component's render prop has a `isLoggedIn` property available, which includes the `isLoggedIn` result (`!!localStorage.getItem('token')`) pulled directly from the cache. +> ⚠️ If you want to use Apollo Client's `@client` support to query the cache without using local resolvers, you must pass an empty object into the `ApolloClient` constructor `resolvers` option. Without this Apollo Client will not enable its integrated `@client` support, which means your `@client` based queries will be passed to the Apollo Client link chain. You can find more details about why this is necessary [here](https://github.com/apollographql/apollo-client/pull/4499). + Pulling `@client` field values directly out of the cache isn't quite as flexible as local resolver functions, since local resolvers can perform extra computations before returning a result. Depending on your application's needs however, loading `@client` fields directly from the cache might be a simpler option. Apollo Client doesn't restrict combining both approaches, so feel free to mix and match. If the need arises, you can pull some `@client` values from the cache, and resolve others with local resolvers, all in the same query.

Working with fetch policies

@@ -677,6 +680,7 @@ const cache = new InMemoryCache(); const client = new ApolloClient({ link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), cache, + resolvers: {}, }); cache.writeData({ @@ -710,6 +714,7 @@ const cache = new InMemoryCache(); const client = new ApolloClient({ link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), cache, + resolvers: {}, }); cache.writeData({ From ede8bec1b2313ba80df8d978adee8c2b0c84452b Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 13:01:53 -0500 Subject: [PATCH 103/230] Changelog update --- CHANGELOG.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4cbc9085a4..0b045783d1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,24 @@ **Note:** This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific `apollo-client` release. -## Apollo Client (vNext, minor bump) +## Apollo Client (2.5.0) -### Apollo Client (vNext, minor bump) +## Apollo Client (2.5.0) -- Un-revert "Improve (and shorten) query polling implementation. - ([#4243](https://github.com/apollographql/apollo-client/pull/4243))"
- [PR #4337](https://github.com/apollographql/apollo-client/pull/4337) - -## Apollo Client (vNext) - -- Fixes an issue where the `QueryManager` was accidentally returning cached +- Introduces new local state management features (client-side schema + and local resolver / `@client` support) and many overall code improvements, + to help reduce the Apollo Client bundle size.
+ [#4361](https://github.com/apollographql/apollo-client/pull/4361) +- Revamped CJS and ESM bundling approach with Rollup.
+ [@rosskevin](https://github.com/rosskevin) in [#4261](https://github.com/apollographql/apollo-client/pull/4261) +- Fixes an issue where the `QueryManager` was accidentally returning cached data for `network-only` queries.
[@danilobuerger](https://github.com/danilobuerger) in [#4352](https://github.com/apollographql/apollo-client/pull/4352) - Fixed an issue in the repo `.gitattributes` that was causing binary files - to have their line endings adjusted, and cleaned up corrupted documentation + to have their line endings adjusted, and cleaned up corrupted documentation images (ref: https://github.com/apollographql/apollo-client/pull/4232).
[@rajington](https://github.com/rajington) in [#4438](https://github.com/apollographql/apollo-client/pull/4438) +- Improve (and shorten) query polling implementation.
+ [PR #4337](https://github.com/apollographql/apollo-client/pull/4337) ## Apollo Client (2.4.13) From dcbda3de49f88ede9c868747af62a88adf42b11d Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 14:29:35 -0500 Subject: [PATCH 104/230] Remove next tags; prep for publish --- package.json | 2 +- packages/apollo-client/scripts/deploy.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cbcfd063898..5d7386cc099 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "coverage": "jest --verbose --coverage", "coverage:upload": "codecov", "danger": "danger run --verbose --dangerfile=./config/dangerfile.ts", - "deploy": "lerna publish -m \"chore: Publish\" --npm-tag next && cd packages/apollo-client && npm run deploy", + "deploy": "lerna publish -m \"chore: Publish\" && cd packages/apollo-client && npm run deploy", "clean": "find . -name \"node_modules\" -exec rm -rf '{}' + && find . -name \"lib\" -exec rm -rf '{}' +" }, "bundlesize": [ diff --git a/packages/apollo-client/scripts/deploy.sh b/packages/apollo-client/scripts/deploy.sh index 7faafe876c7..b90f10ce295 100755 --- a/packages/apollo-client/scripts/deploy.sh +++ b/packages/apollo-client/scripts/deploy.sh @@ -61,4 +61,4 @@ node -e "\ cp ../../README.md npm/ cp ../../LICENSE npm/ -cd npm && npm publish --tag next +cd npm && npm publish From bc740e09d1b40d2186933e4793d8d66ae8e627ef Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 26 Feb 2019 14:39:43 -0500 Subject: [PATCH 105/230] chore: Publish - apollo-boost@0.3.0 - apollo-cache-inmemory@1.5.0 - apollo-cache@1.2.0 - apollo-client@2.5.0 - apollo-utilities@1.2.0 - graphql-anywhere@4.2.0 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index a1b737e3ce1..95718338b6c 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-rc.3", + "version": "0.3.0", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index c5946ccd69b..9ebd958d17c 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-rc.2", + "version": "1.5.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index a5b9fad666a..47104c0f677 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0-rc.2", + "version": "1.2.0", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 9e7d74c2697..9dfc5aeb9b3 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0-rc.3", + "version": "2.5.0", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 7eb8503bb0b..9efc9cccc41 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0-rc.2", + "version": "1.2.0", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index e4820959db2..ea62736ef2a 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0-rc.2", + "version": "4.2.0", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From dd2acd662ad92b31982649b789058f258fded9ba Mon Sep 17 00:00:00 2001 From: Justin Anastos Date: Tue, 26 Feb 2019 15:54:04 -0500 Subject: [PATCH 106/230] =?UTF-8?q?=F0=9F=93=9A=20remove=20`setTypeDefs`?= =?UTF-8?q?=20and=20`getTypeDefs`=20functions=20from=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/essentials/local-state.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index ee95fa8d7dc..1faf85d9a38 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -1154,10 +1154,6 @@ client.setResolvers({ ... });
A map of resolver functions that your GraphQL queries and mutations call in order to read and write to the cache. Resolver functions added through `setResolvers` overwrite all existing resolvers (a pre-existing resolver map is wiped out, before the new resolvers are added).
`getResolvers`
Get the currently defined resolver map.
-
`setTypeDefs(typeDefs: string | string[] | DocumentNode | DocumentNode[])`
-
A string representing your client-side schema written in the [Schema Definition Language](/docs/graphql-tools/generate-schema.html#schema-language), or as a GraphQL AST. This schema is not used for validation, but is used for introspection by the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools).
-
`getTypeDefs`
-
Returns a string (SDL) or GraphQL AST representation of your client-side schema (if previously set via the `ApolloClient` constructor or `setTypeDefs`).
`setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher)`
Set a custom `FragmentMatcher` to be used when resolving local state queries involving [fragments on unions or interfaces](/docs/react/advanced/fragments.html#fragment-matcher).
From 271114d4949a1dd25ce3434fc41c4cbd5d37593c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Feb 2019 20:02:34 +0000 Subject: [PATCH 107/230] chore(deps): update dependency typescript to v3.3.3333 --- docs/package-lock.json | 69 ++++++++++++++++++++++++++++++------------ docs/package.json | 2 +- package-lock.json | 12 ++------ package.json | 2 +- 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 586d71b7255..5aa998e5c18 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -637,6 +637,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -2066,7 +2067,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2087,12 +2089,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2107,17 +2111,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2234,7 +2241,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2246,6 +2254,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2260,6 +2269,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2267,12 +2277,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2291,6 +2303,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2371,7 +2384,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2383,6 +2397,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2468,7 +2483,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2504,6 +2520,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2523,6 +2540,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2566,12 +2584,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3523,7 +3543,8 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "hosted-git-info": { "version": "2.7.1", @@ -5179,13 +5200,15 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -5204,6 +5227,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5377,6 +5401,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -5389,6 +5414,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5454,7 +5480,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "optional": true }, "is-glob": { "version": "4.0.0", @@ -5471,6 +5498,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -5480,6 +5508,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -5490,13 +5519,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true }, "micromatch": { "version": "3.1.10", @@ -7835,9 +7866,9 @@ "dev": true }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.3.3333", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", + "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", "dev": true }, "ua-parser-js": { diff --git a/docs/package.json b/docs/package.json index 335e3e04918..b613c6bb229 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,7 +20,7 @@ "poke-site": "1.3.1", "start-server-and-test": "1.7.11", "typedoc": "0.14.2", - "typescript": "3.3.3" + "typescript": "3.3.3333" }, "scripts": { "start": "npm run build && chexo apollo-hexo-config -- server", diff --git a/package-lock.json b/package-lock.json index f787749e0a8..1835de36ef3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2959,12 +2959,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", - "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -14204,9 +14198,9 @@ "dev": true }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.3.3333", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", + "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 5d7386cc099..0b6e23580df 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "tsc-watch": "^2.1.2", "tslib": "1.9.3", "tslint": "5.12.1", - "typescript": "3.3.3", + "typescript": "3.3.3333", "uglify-js": "3.4.9", "webpack": "3.12.0", "webpack-bundle-analyzer": "3.0.4" From a440242fc3cfc87e16f744e7f5a3677372515814 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 26 Feb 2019 17:37:25 -0500 Subject: [PATCH 108/230] Simplify building the graphql-anywhere/lib/async entry point. (#4503) Should fix https://github.com/apollographql/apollo-link-rest/issues/194. --- packages/graphql-anywhere/rollup.config.js | 5 ----- packages/graphql-anywhere/src/__tests__/index.ts | 2 +- packages/graphql-anywhere/src/{graphql-async.ts => async.ts} | 0 3 files changed, 1 insertion(+), 6 deletions(-) rename packages/graphql-anywhere/src/{graphql-async.ts => async.ts} (100%) diff --git a/packages/graphql-anywhere/rollup.config.js b/packages/graphql-anywhere/rollup.config.js index 3f46b907150..c142191014e 100644 --- a/packages/graphql-anywhere/rollup.config.js +++ b/packages/graphql-anywhere/rollup.config.js @@ -2,9 +2,4 @@ import { rollup } from '../../config/rollup.config'; export default [ ...rollup({ name: 'graphql-anywhere' }), - ...rollup({ - name: 'graphql-anywhere-async', - input: 'src/graphql-async.ts', - outputPrefix: 'async', - }), ]; diff --git a/packages/graphql-anywhere/src/__tests__/index.ts b/packages/graphql-anywhere/src/__tests__/index.ts index fb556d1492f..96cbf4ba924 100644 --- a/packages/graphql-anywhere/src/__tests__/index.ts +++ b/packages/graphql-anywhere/src/__tests__/index.ts @@ -844,5 +844,5 @@ describe('basic operations done sync', execute(require('../').default, x => x)); describe( 'basic operations done async', - execute(require('../graphql-async').graphql, x => Promise.resolve(x)), + execute(require('../async').graphql, x => Promise.resolve(x)), ); diff --git a/packages/graphql-anywhere/src/graphql-async.ts b/packages/graphql-anywhere/src/async.ts similarity index 100% rename from packages/graphql-anywhere/src/graphql-async.ts rename to packages/graphql-anywhere/src/async.ts From bcaa0b7470e8a1fddab74db096cf93a70d5836a2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 26 Feb 2019 18:23:48 -0500 Subject: [PATCH 109/230] Don't worry about empty tuple types in TupleToIntersection. (#4502) Although a zero-argument call to `mergeDeep` was always pretty pointless, it seemed worth handling that case for the sake of completeness. Well, apparently empty tuple types are forbidden by section 3.8.5 of the TypeScript spec, so (some versions of) the compiler complain about the `[]` in the `T extends []` case of `TupleToIntersection`: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#385-tuple-type-literals Since we never really needed this case in the first place, the easy solution is to remove it. Note that the final cases in `TupleToIntersection` continue to cover the zero-argument case, for whatever it may be worth: T extends (infer U)[] ? U : any Should fix #4501. --- packages/apollo-utilities/src/util/mergeDeep.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/apollo-utilities/src/util/mergeDeep.ts b/packages/apollo-utilities/src/util/mergeDeep.ts index 237e9d1ee40..d83a33fe1df 100644 --- a/packages/apollo-utilities/src/util/mergeDeep.ts +++ b/packages/apollo-utilities/src/util/mergeDeep.ts @@ -15,7 +15,6 @@ const { hasOwnProperty } = Object.prototype; // true & false, and the inferred type ends up as unknown in many cases), // in addition to being nearly impossible to explain/understand. export type TupleToIntersection = - T extends [] ? {} : T extends [infer A] ? A : T extends [infer A, infer B] ? A & B : T extends [infer A, infer B, infer C] ? A & B & C : From 3a9dfe268979618180823eef93e96ab87468449c Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 27 Feb 2019 06:25:17 -0500 Subject: [PATCH 110/230] Changelog update --- CHANGELOG.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b045783d1c..176847c6d7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,22 @@ **Note:** This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific `apollo-client` release. -## Apollo Client (2.5.0) +## Apollo Client (vNext) + +### apollo-client (vNext) + +- Fixes `A tuple type element list cannot be empty` issue.
+ [@benjamn](https://github.com/benjamn) in [#4502](https://github.com/apollographql/apollo-client/pull/4502) + +### graphql-anywhere (vNext) + +- Adds back the missing `graphql-anywhere/lib/async` entry point.
+ [@benjamn](https://github.com/benjamn) in [#4503](https://github.com/apollographql/apollo-client/pull/4503) + ## Apollo Client (2.5.0) +### Apollo Client (2.5.0) + - Introduces new local state management features (client-side schema and local resolver / `@client` support) and many overall code improvements, to help reduce the Apollo Client bundle size.
From 29ea2f3cf0c8e2579496386b585629e8a358470b Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 27 Feb 2019 09:00:18 -0500 Subject: [PATCH 111/230] Changelog updates, prep for publish --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 176847c6d7f..8563a5a5c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,13 @@ **Note:** This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific `apollo-client` release. -## Apollo Client (vNext) +## Apollo Client 2.5.1 -### apollo-client (vNext) +### apollo-client 2.5.1 - Fixes `A tuple type element list cannot be empty` issue.
[@benjamn](https://github.com/benjamn) in [#4502](https://github.com/apollographql/apollo-client/pull/4502) -### graphql-anywhere (vNext) +### graphql-anywhere 4.2.1 - Adds back the missing `graphql-anywhere/lib/async` entry point.
[@benjamn](https://github.com/benjamn) in [#4503](https://github.com/apollographql/apollo-client/pull/4503) From fda77c22a43a472843954903b43bf875b2ed9d60 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 27 Feb 2019 09:01:16 -0500 Subject: [PATCH 112/230] chore: Publish - apollo-boost@0.3.1 - apollo-cache-inmemory@1.5.1 - apollo-cache@1.2.1 - apollo-client@2.5.1 - apollo-utilities@1.2.1 - graphql-anywhere@4.2.1 --- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package.json | 2 +- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 95718338b6c..01ad64255c5 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0", + "version": "0.3.1", "description": "The easiest way to get started with Apollo Client", "author": "Peggy Rayzis ", "contributors": [ diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 9ebd958d17c..35f7e425acb 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0", + "version": "1.5.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-cache/package.json b/packages/apollo-cache/package.json index 47104c0f677..948fddb2e7f 100644 --- a/packages/apollo-cache/package.json +++ b/packages/apollo-cache/package.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.2.0", + "version": "1.2.1", "description": "Core abstract of Caching layer for Apollo Client", "author": "James Baxley ", "contributors": [ diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 9dfc5aeb9b3..8dba4d2f123 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -1,7 +1,7 @@ { "name": "apollo-client", "private": true, - "version": "2.5.0", + "version": "2.5.1", "description": "A simple yet functional GraphQL client.", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 9efc9cccc41..f360d1a56aa 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0", + "version": "1.2.1", "description": "Utilities for working with GraphQL ASTs", "author": "James Baxley ", "contributors": [ diff --git a/packages/graphql-anywhere/package.json b/packages/graphql-anywhere/package.json index ea62736ef2a..4909ca6e522 100644 --- a/packages/graphql-anywhere/package.json +++ b/packages/graphql-anywhere/package.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.2.0", + "version": "4.2.1", "description": "Run GraphQL queries with no schema and just one resolver", "main": "./lib/bundle.cjs.js", "module": "./lib/bundle.esm.js", From 9ba1f92b2e63a52c322f5592c18adb70249ede07 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 27 Feb 2019 13:49:24 -0500 Subject: [PATCH 113/230] Avoid embedding ../../src in relative module identifiers. (#4509) Since the published code resides in apollo-client/lib, relative module identifiers should not assume the existence of the apollo-client/src directory. In all likelihood, these ../../src identifiers snuck in because of VS Code's auto-import functionality. In addition to auditing automatic imports more carefully in code reviews, perhaps we should add some sort of test that forbids ../../src identifiers in generated code? Then again, these particular imports are only importing types, so they do not correspond to any generated import code in apollo-client/lib, which is perhaps why they have gone unnoticed until now. --- packages/apollo-client/src/__mocks__/mockQueryManager.ts | 4 ++-- packages/apollo-client/src/__mocks__/mockWatchQuery.ts | 2 +- packages/apollo-client/src/util/observableToPromise.ts | 6 +++--- packages/apollo-client/src/util/subscribeAndCount.ts | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/apollo-client/src/__mocks__/mockQueryManager.ts b/packages/apollo-client/src/__mocks__/mockQueryManager.ts index 4a95ae34564..b543f82f978 100644 --- a/packages/apollo-client/src/__mocks__/mockQueryManager.ts +++ b/packages/apollo-client/src/__mocks__/mockQueryManager.ts @@ -1,8 +1,8 @@ -import { QueryManager } from '../../src/core/QueryManager'; +import { QueryManager } from '../core/QueryManager'; import { mockSingleLink, MockedResponse } from './mockLinks'; -import { DataStore } from '../../src/data/store'; +import { DataStore } from '../data/store'; import { InMemoryCache } from 'apollo-cache-inmemory'; // Helper method for the tests that construct a query manager out of a diff --git a/packages/apollo-client/src/__mocks__/mockWatchQuery.ts b/packages/apollo-client/src/__mocks__/mockWatchQuery.ts index 849b72e4c5f..d95d922b20f 100644 --- a/packages/apollo-client/src/__mocks__/mockWatchQuery.ts +++ b/packages/apollo-client/src/__mocks__/mockWatchQuery.ts @@ -2,7 +2,7 @@ import { MockedResponse } from './mockLinks'; import mockQueryManager from './mockQueryManager'; -import { ObservableQuery } from '../../src/core/ObservableQuery'; // tslint:disable-line +import { ObservableQuery } from '../core/ObservableQuery'; export default (...mockedResponses: MockedResponse[]): ObservableQuery => { const queryManager = mockQueryManager(...mockedResponses); diff --git a/packages/apollo-client/src/util/observableToPromise.ts b/packages/apollo-client/src/util/observableToPromise.ts index 30a14caa297..857f11c9455 100644 --- a/packages/apollo-client/src/util/observableToPromise.ts +++ b/packages/apollo-client/src/util/observableToPromise.ts @@ -1,6 +1,6 @@ -import { ObservableQuery } from '../../src/core/ObservableQuery'; -import { ApolloQueryResult } from '../../src/core/types'; -import { Subscription } from '../../src/util/Observable'; +import { ObservableQuery } from '../core/ObservableQuery'; +import { ApolloQueryResult } from '../core/types'; +import { Subscription } from '../util/Observable'; /** * diff --git a/packages/apollo-client/src/util/subscribeAndCount.ts b/packages/apollo-client/src/util/subscribeAndCount.ts index 594ea00ffa8..008f211c0d7 100644 --- a/packages/apollo-client/src/util/subscribeAndCount.ts +++ b/packages/apollo-client/src/util/subscribeAndCount.ts @@ -1,6 +1,6 @@ -import { ObservableQuery } from '../../src/core/ObservableQuery'; -import { ApolloQueryResult } from '../../src/core/types'; -import { Subscription } from '../../src/util/Observable'; +import { ObservableQuery } from '../core/ObservableQuery'; +import { ApolloQueryResult } from '../core/types'; +import { Subscription } from '../util/Observable'; export default function subscribeAndCount( done: jest.DoneCallback, From 5bd971614320a887140e11b8c9f8d472a8508407 Mon Sep 17 00:00:00 2001 From: Steve Moser Date: Thu, 28 Feb 2019 11:08:17 -0500 Subject: [PATCH 114/230] Remove --save option as it isn't required anymore (#4463) --- docs/source/essentials/get-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/essentials/get-started.md b/docs/source/essentials/get-started.md index cfa9c250ed0..f0b56ef0d2f 100644 --- a/docs/source/essentials/get-started.md +++ b/docs/source/essentials/get-started.md @@ -12,7 +12,7 @@ If you're an advanced user who would like to configure Apollo Client from scratc First, let's install some packages! ```bash -npm install apollo-boost react-apollo graphql --save +npm install apollo-boost react-apollo graphql ``` - `apollo-boost`: Package containing everything you need to set up Apollo Client From ebb66d129631c03ffcf1119e7929dfb96230afbb Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 28 Feb 2019 11:42:40 -0500 Subject: [PATCH 115/230] Support InMemoryCache({ freezeResults: true }) to help enforce immutability. Part of the plan I outlined in this comment: https://github.com/apollographql/apollo-client/issues/4464#issuecomment-467548798 If we could trust application code not to modify cache results, we wouldn't have to save deep snapshots of past results in order to implement isDifferentFromLastResult correctly (see #4069). Aside: why doesn't the cache just return defensive copies of all results? https://github.com/apollographql/apollo-client/issues/4031#issuecomment-435103281 While you might agree that immutability is a worthwhile aspiration, it can be hard to maintain that discipline across your entire application over time, especially in a team of multiple developers. This commit implements a new freezeResults option for the InMemoryCache constructor, which (when true) causes all cache results to be frozen in development, so you can more easily detect accidental mutations. Note: mutating frozen objects only throws in strict mode, whereas it fails silently in non-strict code. ECMAScript module code automatically runs in strict mode, and most module transforms add "use strict" at the top of the generated code, so you're probably already using strict mode everywhere, though you might want to double-check. The beauty of this implementation is that it does not need to repeatedly freeze entire results, because it can shallow-freeze the root of each subtree when that object is first created. Thanks to result caching, those frozen objects can be shared between multiple different result trees without any additional freezing, and the entire result always ends up deeply frozen. The freezing happens only in non-production environments, so there is no runtime cost to using { freezeResults: true } in production. Please keep this in mind when benchmarking cache performance! --- .../src/__tests__/__snapshots__/cache.ts.snap | 146 ++++++++++++++++-- .../__tests__/__snapshots__/mapCache.ts.snap | 146 ++++++++++++++++-- .../src/__tests__/cache.ts | 11 ++ .../src/__tests__/roundtrip.ts | 64 ++++++-- .../src/inMemoryCache.ts | 7 +- .../src/readFromStore.ts | 35 ++++- 6 files changed, 365 insertions(+), 44 deletions(-) diff --git a/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/cache.ts.snap b/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/cache.ts.snap index 0cd8b06df71..d972da111c5 100644 --- a/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/cache.ts.snap +++ b/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/cache.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 1`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 1`] = ` Object { "bar": Object { "i": 7, @@ -17,7 +17,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 2`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 2`] = ` Object { "bar": Object { "i": 7, @@ -38,7 +38,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 3`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 3`] = ` Object { "bar": Object { "i": 10, @@ -59,7 +59,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 4`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 4`] = ` Object { "bar": Object { "i": 10, @@ -80,7 +80,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 5`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 5`] = ` Object { "bar": Object { "i": 7, @@ -101,7 +101,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/2) 6`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (1/3) 6`] = ` Object { "bar": Object { "i": 10, @@ -122,7 +122,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 1`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 1`] = ` Object { "bar": Object { "i": 7, @@ -139,7 +139,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 2`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 2`] = ` Object { "bar": Object { "i": 7, @@ -160,7 +160,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 3`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 3`] = ` Object { "bar": Object { "i": 10, @@ -181,7 +181,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 4`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 4`] = ` Object { "bar": Object { "i": 10, @@ -202,7 +202,7 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 5`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 5`] = ` Object { "bar": Object { "i": 7, @@ -223,7 +223,129 @@ Object { } `; -exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/2) 6`] = ` +exports[`Cache writeFragment will write some deeply nested data into the store at any id (2/3) 6`] = ` +Object { + "bar": Object { + "i": 10, + "j": 11, + "k": 12, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": "Bar", + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 1`] = ` +Object { + "bar": Object { + "i": 7, + }, + "foo": Object { + "e": 4, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 2`] = ` +Object { + "bar": Object { + "i": 7, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 3`] = ` +Object { + "bar": Object { + "i": 10, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 4`] = ` +Object { + "bar": Object { + "i": 10, + "j": 11, + "k": 12, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 5`] = ` +Object { + "bar": Object { + "i": 7, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": "Bar", + }, + }, +} +`; + +exports[`Cache writeFragment will write some deeply nested data into the store at any id (3/3) 6`] = ` Object { "bar": Object { "i": 10, diff --git a/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/mapCache.ts.snap b/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/mapCache.ts.snap index c3711026b09..4682281f7f0 100644 --- a/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/mapCache.ts.snap +++ b/packages/apollo-cache-inmemory/src/__tests__/__snapshots__/mapCache.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 1`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 1`] = ` Object { "bar": Object { "i": 7, @@ -17,7 +17,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 2`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 2`] = ` Object { "bar": Object { "i": 7, @@ -38,7 +38,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 3`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 3`] = ` Object { "bar": Object { "i": 10, @@ -59,7 +59,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 4`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 4`] = ` Object { "bar": Object { "i": 10, @@ -80,7 +80,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 5`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 5`] = ` Object { "bar": Object { "i": 7, @@ -101,7 +101,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/2) 6`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (1/3) 6`] = ` Object { "bar": Object { "i": 10, @@ -122,7 +122,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 1`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 1`] = ` Object { "bar": Object { "i": 7, @@ -139,7 +139,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 2`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 2`] = ` Object { "bar": Object { "i": 7, @@ -160,7 +160,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 3`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 3`] = ` Object { "bar": Object { "i": 10, @@ -181,7 +181,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 4`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 4`] = ` Object { "bar": Object { "i": 10, @@ -202,7 +202,7 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 5`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 5`] = ` Object { "bar": Object { "i": 7, @@ -223,7 +223,129 @@ Object { } `; -exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/2) 6`] = ` +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (2/3) 6`] = ` +Object { + "bar": Object { + "i": 10, + "j": 11, + "k": 12, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": "Bar", + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 1`] = ` +Object { + "bar": Object { + "i": 7, + }, + "foo": Object { + "e": 4, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 2`] = ` +Object { + "bar": Object { + "i": 7, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 3`] = ` +Object { + "bar": Object { + "i": 10, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 4`] = ` +Object { + "bar": Object { + "i": 10, + "j": 11, + "k": 12, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": undefined, + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 5`] = ` +Object { + "bar": Object { + "i": 7, + "j": 8, + "k": 9, + }, + "foo": Object { + "e": 4, + "f": 5, + "g": 6, + "h": Object { + "generated": false, + "id": "bar", + "type": "id", + "typename": "Bar", + }, + }, +} +`; + +exports[`MapCache Cache writeFragment will write some deeply nested data into the store at any id (3/3) 6`] = ` Object { "bar": Object { "i": 10, diff --git a/packages/apollo-cache-inmemory/src/__tests__/cache.ts b/packages/apollo-cache-inmemory/src/__tests__/cache.ts index f0cb6e27ed1..58e89177908 100644 --- a/packages/apollo-cache-inmemory/src/__tests__/cache.ts +++ b/packages/apollo-cache-inmemory/src/__tests__/cache.ts @@ -25,6 +25,12 @@ describe('Cache', () => { resultCaching: false, }).restore(cloneDeep(data)) ), + initialDataForCaches.map( + data => new InMemoryCache({ + addTypename: false, + freezeResults: true, + }).restore(cloneDeep(data)) + ), ]; cachesList.forEach((caches, i) => { @@ -48,6 +54,11 @@ describe('Cache', () => { ...config, resultCaching: false, }), + new InMemoryCache({ + addTypename: false, + ...config, + freezeResults: true, + }), ]; caches.forEach((cache, i) => { diff --git a/packages/apollo-cache-inmemory/src/__tests__/roundtrip.ts b/packages/apollo-cache-inmemory/src/__tests__/roundtrip.ts index ad4a337c711..30a70ae8914 100644 --- a/packages/apollo-cache-inmemory/src/__tests__/roundtrip.ts +++ b/packages/apollo-cache-inmemory/src/__tests__/roundtrip.ts @@ -16,8 +16,25 @@ import { const fragmentMatcherFunction = new HeuristicFragmentMatcher().match; +function assertDeeplyFrozen(value: any, stack: any[] = []) { + if ( + value !== null && + typeof value === 'object' && + stack.indexOf(value) < 0 + ) { + expect(Object.isExtensible(value)).toBe(false); + expect(Object.isFrozen(value)).toBe(true); + stack.push(value); + Object.keys(value).forEach(key => { + assertDeeplyFrozen(value[key], stack); + }); + expect(stack.pop()).toBe(value); + } +} + function storeRoundtrip(query: DocumentNode, result: any, variables = {}) { const reader = new StoreReader(); + const immutableReader = new StoreReader({ freezeResults: true }); const writer = new StoreWriter(); const store = writer.writeQueryToStore({ @@ -41,6 +58,22 @@ function storeRoundtrip(query: DocumentNode, result: any, variables = {}) { expect(store).toBeInstanceOf(DepTrackingCache); expect(reader.readQueryFromStore(readOptions)).toBe(reconstructedResult); + const immutableResult = immutableReader.readQueryFromStore(readOptions); + expect(immutableResult).toEqual(reconstructedResult); + expect(immutableReader.readQueryFromStore(readOptions)).toBe(immutableResult); + if (process.env.NODE_ENV !== 'production') { + try { + // Note: this illegal assignment will only throw in strict mode, but that's + // safe to assume because this test file is a module. + (immutableResult as any).illegal = "this should not work"; + throw new Error("unreached"); + } catch (e) { + expect(e.message).not.toMatch(/unreached/); + expect(e).toBeInstanceOf(TypeError); + } + assertDeeplyFrozen(immutableResult); + } + // Now make sure subtrees of the result are identical even after we write // an additional bogus field to the store. writer.writeQueryToStore({ @@ -203,6 +236,19 @@ describe('roundtrip', () => { }); it('with GraphQLJSON scalar type', () => { + const updateClub = { + uid: '1d7f836018fc11e68d809dfee940f657', + name: 'Eple', + settings: { + name: 'eple', + currency: 'AFN', + calendarStretch: 2, + defaultPreAllocationPeriod: 1, + confirmationEmailCopy: null, + emailDomains: null, + }, + }; + storeRoundtrip( gql` { @@ -214,20 +260,14 @@ describe('roundtrip', () => { } `, { - updateClub: { - uid: '1d7f836018fc11e68d809dfee940f657', - name: 'Eple', - settings: { - name: 'eple', - currency: 'AFN', - calendarStretch: 2, - defaultPreAllocationPeriod: 1, - confirmationEmailCopy: null, - emailDomains: null, - }, - }, + updateClub, }, ); + + // Just because we read from the store using { freezeResults: true }, the + // original data should not be frozen. + expect(Object.isExtensible(updateClub)).toBe(true); + expect(Object.isFrozen(updateClub)).toBe(false); }); describe('directives', () => { diff --git a/packages/apollo-cache-inmemory/src/inMemoryCache.ts b/packages/apollo-cache-inmemory/src/inMemoryCache.ts index 3d4af3f4f4a..85e3ba0088e 100644 --- a/packages/apollo-cache-inmemory/src/inMemoryCache.ts +++ b/packages/apollo-cache-inmemory/src/inMemoryCache.ts @@ -26,6 +26,7 @@ import { ObjectCache } from './objectCache'; export interface InMemoryCacheConfig extends ApolloReducerConfig { resultCaching?: boolean; + freezeResults?: boolean; } const defaultConfig: InMemoryCacheConfig = { @@ -33,6 +34,7 @@ const defaultConfig: InMemoryCacheConfig = { dataIdFromObject: defaultDataIdFromObject, addTypename: true, resultCaching: true, + freezeResults: false, }; export function defaultDataIdFromObject(result: any): string | null { @@ -128,8 +130,11 @@ export class InMemoryCache extends ApolloCache { // original this.data cache object. this.optimisticData = this.data; - this.storeReader = new StoreReader(this.cacheKeyRoot); this.storeWriter = new StoreWriter(); + this.storeReader = new StoreReader({ + cacheKeyRoot: this.cacheKeyRoot, + freezeResults: config.freezeResults, + }); const cache = this; const { maybeBroadcastWatch } = cache; diff --git a/packages/apollo-cache-inmemory/src/readFromStore.ts b/packages/apollo-cache-inmemory/src/readFromStore.ts index 495b120a1c8..01b14678778 100644 --- a/packages/apollo-cache-inmemory/src/readFromStore.ts +++ b/packages/apollo-cache-inmemory/src/readFromStore.ts @@ -21,6 +21,7 @@ import { shouldInclude, toIdValue, mergeDeepArray, + maybeDeepFreeze, } from 'apollo-utilities'; import { Cache } from 'apollo-cache'; @@ -93,15 +94,24 @@ type ExecSelectionSetOptions = { execContext: ExecContext; }; +export interface StoreReaderConfig { + cacheKeyRoot?: CacheKeyNode; + freezeResults?: boolean; +}; + export class StoreReader { - constructor( - private cacheKeyRoot = new CacheKeyNode, - ) { - const reader = this; + private freezeResults: boolean; + + constructor({ + cacheKeyRoot = new CacheKeyNode, + freezeResults = false, + }: StoreReaderConfig = {}) { const { executeStoreQuery, executeSelectionSet, - } = reader; + } = this; + + this.freezeResults = freezeResults; this.executeStoreQuery = wrap((options: ExecStoreQueryOptions) => { return executeStoreQuery.call(this, options); @@ -117,7 +127,7 @@ export class StoreReader { // underlying store is capable of tracking dependencies and invalidating // the cache when relevant data have changed. if (contextValue.store instanceof DepTrackingCache) { - return reader.cacheKeyRoot.lookup( + return cacheKeyRoot.lookup( query, contextValue.store, fragmentMatcher, @@ -138,7 +148,7 @@ export class StoreReader { execContext, }: ExecSelectionSetOptions) { if (execContext.contextValue.store instanceof DepTrackingCache) { - return reader.cacheKeyRoot.lookup( + return cacheKeyRoot.lookup( selectionSet, execContext.contextValue.store, execContext.fragmentMatcher, @@ -376,6 +386,10 @@ export class StoreReader { // defensive shallow copies than necessary. finalResult.result = mergeDeepArray(objectsToMerge); + if (this.freezeResults && process.env.NODE_ENV !== 'production') { + Object.freeze(finalResult.result); + } + return finalResult; } @@ -417,6 +431,9 @@ export class StoreReader { // Handle all scalar types here if (!field.selectionSet) { assertSelectionSetForIdValue(field, readStoreResult.result); + if (this.freezeResults && process.env.NODE_ENV !== 'production') { + maybeDeepFreeze(readStoreResult); + } return readStoreResult; } @@ -495,6 +512,10 @@ export class StoreReader { return item; }); + if (this.freezeResults && process.env.NODE_ENV !== 'production') { + Object.freeze(result); + } + return { result, missing }; } } From f7417c136b20d7ae3a2139e1465e69a5240971ac Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 28 Feb 2019 15:38:11 -0500 Subject: [PATCH 116/230] Bump bundle size limit for apollo-cache-inmemory. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b6e23580df..5a610388858 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ { "name": "apollo-cache-inmemory", "path": "./packages/apollo-cache-inmemory/lib/bundle.cjs.min.js", - "maxSize": "4.9 kB" + "maxSize": "4.95 kB" }, { "name": "apollo-client", From b1acbce78512779e9bef561d3d76d79ed35fb14b Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 28 Feb 2019 15:40:36 -0500 Subject: [PATCH 117/230] Mention PR #4514 in CHANGELOG.md. --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8563a5a5c09..3ea42ff5e21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ **Note:** This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific `apollo-client` release. +## Apollo Client vNEXT + +### Apollo Cache In-Memory + +- Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
+ [@benjamn](https://github.com/benjamn) in [#4514](https://github.com/apollographql/apollo-client/pull/4514) + ## Apollo Client 2.5.1 ### apollo-client 2.5.1 From f65e1f030736bf06ee9e2004ca22d324883436ed Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 28 Feb 2019 15:55:18 -0500 Subject: [PATCH 118/230] Fix error message about ApolloClient({ link, cache }) options. (#4515) * Fix error message about ApolloClient({ link, cache }) options. This should keep folks from continuing to encounter issue #3639. * Fix Jest snapshots that depended on the old error message. --- packages/apollo-client/src/ApolloClient.ts | 12 ++- .../__snapshots__/ApolloClient.ts.snap | 88 +++++-------------- 2 files changed, 28 insertions(+), 72 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 5146ad421ef..3aa67c5ebee 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -139,13 +139,11 @@ export default class ApolloClient implements DataProxy { } if (!link || !cache) { - throw new InvariantError(` - In order to initialize Apollo Client, you must specify link & cache properties on the config object. - This is part of the required upgrade when migrating from Apollo Client 1.0 to Apollo Client 2.0. - For more information, please visit: - https://www.apollographql.com/docs/react/basics/setup.html - to help you get started. - `); + throw new InvariantError( + "In order to initialize Apollo Client, you must specify 'link' and 'cache' properties in the options object.\n" + + "These options are part of the upgrade requirements when migrating from Apollo Client 1.x to Apollo Client 2.x.\n" + + "For more information, please visit: https://www.apollographql.com/docs/tutorial/client.html#apollo-client-setup" + ); } const supportedCache = new Map(); diff --git a/packages/apollo-client/src/__tests__/__snapshots__/ApolloClient.ts.snap b/packages/apollo-client/src/__tests__/__snapshots__/ApolloClient.ts.snap index 5e3005c999c..e8d1b19fb68 100644 --- a/packages/apollo-client/src/__tests__/__snapshots__/ApolloClient.ts.snap +++ b/packages/apollo-client/src/__tests__/__snapshots__/ApolloClient.ts.snap @@ -1,32 +1,18 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[ - `ApolloClient constructor will throw an error if cache is not passed in 1` -] = ` -" - In order to initialize Apollo Client, you must specify link & cache properties on the config object. - This is part of the required upgrade when migrating from Apollo Client 1.0 to Apollo Client 2.0. - For more information, please visit: - https://www.apollographql.com/docs/react/basics/setup.html - to help you get started. - " +exports[`ApolloClient constructor will throw an error if cache is not passed in 1`] = ` +"In order to initialize Apollo Client, you must specify 'link' and 'cache' properties in the options object. +These options are part of the upgrade requirements when migrating from Apollo Client 1.x to Apollo Client 2.x. +For more information, please visit: https://www.apollographql.com/docs/tutorial/client.html#apollo-client-setup" `; -exports[ - `ApolloClient constructor will throw an error if link is not passed in 1` -] = ` -" - In order to initialize Apollo Client, you must specify link & cache properties on the config object. - This is part of the required upgrade when migrating from Apollo Client 1.0 to Apollo Client 2.0. - For more information, please visit: - https://www.apollographql.com/docs/react/basics/setup.html - to help you get started. - " +exports[`ApolloClient constructor will throw an error if link is not passed in 1`] = ` +"In order to initialize Apollo Client, you must specify 'link' and 'cache' properties in the options object. +These options are part of the upgrade requirements when migrating from Apollo Client 1.x to Apollo Client 2.x. +For more information, please visit: https://www.apollographql.com/docs/tutorial/client.html#apollo-client-setup" `; -exports[ - `ApolloClient write then read will not use a default id getter if either _id or id is present when __typename is not also present 1` -] = ` +exports[`ApolloClient write then read will not use a default id getter if either _id or id is present when __typename is not also present 1`] = ` Object { "$ROOT_QUERY.bar": Object { "foo": Object { @@ -79,9 +65,7 @@ Object { } `; -exports[ - `ApolloClient write then read will not use a default id getter if id and _id are not present 1` -] = ` +exports[`ApolloClient write then read will not use a default id getter if id and _id are not present 1`] = ` Object { "$ROOT_QUERY.bar": Object { "__typename": "bar", @@ -136,9 +120,7 @@ Object { } `; -exports[ - `ApolloClient write then read will use a default id getter if __typename and _id are present 1` -] = ` +exports[`ApolloClient write then read will use a default id getter if __typename and _id are present 1`] = ` Object { "$ROOT_QUERY.foo": Object { "__typename": "foo", @@ -170,9 +152,7 @@ Object { } `; -exports[ - `ApolloClient write then read will use a default id getter if __typename and id are present 1` -] = ` +exports[`ApolloClient write then read will use a default id getter if __typename and id are present 1`] = ` Object { "$ROOT_QUERY.foo": Object { "__typename": "foo", @@ -204,9 +184,7 @@ Object { } `; -exports[ - `ApolloClient write then read will use a default id getter if one is not specified and __typename is present along with either _id or id 1` -] = ` +exports[`ApolloClient write then read will use a default id getter if one is not specified and __typename is present along with either _id or id 1`] = ` Object { "$ROOT_QUERY.bar": Object { "__typename": "bar", @@ -263,9 +241,7 @@ Object { } `; -exports[ - `ApolloClient write then read will write data locally which will then be read back 1` -] = ` +exports[`ApolloClient write then read will write data locally which will then be read back 1`] = ` Object { "$foo.bar": Object { "__typename": "Bar", @@ -320,9 +296,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 1` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 1`] = ` Object { "bar": Object { "__typename": "Bar", @@ -341,9 +315,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 2` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 2`] = ` Object { "bar": Object { "__typename": "Bar", @@ -366,9 +338,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 3` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 3`] = ` Object { "bar": Object { "__typename": "Bar", @@ -391,9 +361,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 4` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 4`] = ` Object { "bar": Object { "__typename": "Bar", @@ -416,9 +384,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 5` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 5`] = ` Object { "bar": Object { "__typename": "Bar", @@ -441,9 +407,7 @@ Object { } `; -exports[ - `ApolloClient writeFragment will write some deeply nested data into the store at any id 6` -] = ` +exports[`ApolloClient writeFragment will write some deeply nested data into the store at any id 6`] = ` Object { "bar": Object { "__typename": "Bar", @@ -466,9 +430,7 @@ Object { } `; -exports[ - `ApolloClient writeQuery will write some deeply nested data to the store 1` -] = ` +exports[`ApolloClient writeQuery will write some deeply nested data to the store 1`] = ` Object { "$ROOT_QUERY.d": Object { "__typename": "D", @@ -486,9 +448,7 @@ Object { } `; -exports[ - `ApolloClient writeQuery will write some deeply nested data to the store 2` -] = ` +exports[`ApolloClient writeQuery will write some deeply nested data to the store 2`] = ` Object { "$ROOT_QUERY.d": Object { "__typename": "D", @@ -516,9 +476,7 @@ Object { } `; -exports[ - `ApolloClient writeQuery will write some deeply nested data to the store 3` -] = ` +exports[`ApolloClient writeQuery will write some deeply nested data to the store 3`] = ` Object { "$ROOT_QUERY.d": Object { "__typename": "D", From b52f2678ade42dc9c9aa2e312392beece3765a6c Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 28 Feb 2019 20:29:11 -0500 Subject: [PATCH 119/230] Enable `hexo-versioned-netlify-redirects` for docs versionning --- docs/_config.yml | 2 ++ docs/package-lock.json | 78 +++++++++++++++++------------------------- docs/package.json | 3 +- 3 files changed, 35 insertions(+), 48 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index b68f65cf3a5..b70f14ac7a5 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -6,6 +6,8 @@ description: A guide to using the Apollo GraphQL Client with React. versions: - '2.5' - '2.4' +versioned-netlify-redirects: + netlify_site_id: apollo-client-docs content_root: docs/source public_dir: public/docs/react diff --git a/docs/package-lock.json b/docs/package-lock.json index 5aa998e5c18..961416fd9c5 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -637,7 +637,6 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, - "optional": true, "requires": { "hoek": "2.x.x" } @@ -2067,8 +2066,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2089,14 +2087,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2111,20 +2107,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2241,8 +2234,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2254,7 +2246,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2269,7 +2260,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2277,14 +2267,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2303,7 +2291,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2384,8 +2371,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2397,7 +2383,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2483,8 +2468,7 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -2520,7 +2504,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2540,7 +2523,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2584,14 +2566,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -3533,6 +3513,15 @@ "striptags": "^2.1.1" } }, + "hexo-versioned-netlify-redirects": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hexo-versioned-netlify-redirects/-/hexo-versioned-netlify-redirects-1.1.0.tgz", + "integrity": "sha512-kfY19ZZDwBnRaZFA6KQgt5DhVBpTQG1yBoq01zaACFHIFuSd9OjhiHCkJ3it+TMvGl+JGTtgKhIwZoQUJHyv/g==", + "dev": true, + "requires": { + "url-join": "^4.0.0" + } + }, "highlight.js": { "version": "9.12.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", @@ -3543,8 +3532,7 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true, - "optional": true + "dev": true }, "hosted-git-info": { "version": "2.7.1", @@ -5200,15 +5188,13 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true + "dev": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -5227,7 +5213,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5401,7 +5386,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -5414,7 +5398,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5480,8 +5463,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "optional": true + "dev": true }, "is-glob": { "version": "4.0.0", @@ -5498,7 +5480,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -5508,7 +5489,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -5519,15 +5499,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true + "dev": true }, "micromatch": { "version": "3.1.10", @@ -8084,6 +8062,12 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", + "dev": true + }, "urlcache": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/urlcache/-/urlcache-0.7.0.tgz", diff --git a/docs/package.json b/docs/package.json index b613c6bb229..41fb7909697 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,6 +16,7 @@ "hexo-renderer-marked": "0.3.2", "hexo-server": "0.3.3", "hexo-typescript-api-box": "0.9.2", + "hexo-versioned-netlify-redirects": "^1.1.0", "meteor-theme-hexo": "2.0.1", "poke-site": "1.3.1", "start-server-and-test": "1.7.11", @@ -30,4 +31,4 @@ "ci": "npm run clean; start-server-and-test start http-get://localhost:4000 test", "test": "poke http://localhost:4000 --retry https://www.apollographql.com --shallow --method get --skip-images --skip-duplicates" } -} \ No newline at end of file +} From 10b743cf2acb1a3f137de1bc5bfce63bdd20f57b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 1 Mar 2019 06:29:01 +0000 Subject: [PATCH 120/230] chore(deps): update dependency @octokit/rest to v16.16.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1835de36ef3..66b1a8e7d71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1335,9 +1335,9 @@ "dev": true }, "@octokit/request": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.3.0.tgz", - "integrity": "sha512-5YRqYNZOAaL7+nt7w3Scp6Sz4P2g7wKFP9npx1xdExMomk8/M/ICXVLYVam2wzxeY0cIc6wcKpjC5KI4jiNbGw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.0.tgz", + "integrity": "sha512-Bm2P0duVRUeKhyepNyFg5GX+yhCK71fqdtpsw5Rz+PQPjSha8HYwPMF5QfpzpD8b6/Xl3xhTgu3V90W362gZ1A==", "dev": true, "requires": { "@octokit/endpoint": "^3.1.1", @@ -1347,12 +1347,12 @@ } }, "@octokit/rest": { - "version": "16.16.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.16.0.tgz", - "integrity": "sha512-Q6L5OwQJrdJ188gLVmUHLKNXBoeCU0DynKPYW8iZQQoGNGws2hkP/CePVNlzzDgmjuv7o8dCrJgecvDcIHccTA==", + "version": "16.16.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.16.3.tgz", + "integrity": "sha512-8v5xyqXZwQbQ1WsTLU3G25nAlcKYEgIXzDeqLgTFpbzzJXcey0C8Mcs/LZiAgU8dDINZtO2dAPgd1cVKgK9DQw==", "dev": true, "requires": { - "@octokit/request": "2.3.0", + "@octokit/request": "2.4.0", "before-after-hook": "^1.2.0", "btoa-lite": "^1.0.0", "lodash.get": "^4.4.2", diff --git a/package.json b/package.json index 5a610388858..66ea44ee619 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "graphql-anywhere": "file:packages/graphql-anywhere" }, "devDependencies": { - "@octokit/rest": "16.16.0", + "@octokit/rest": "16.16.3", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", From 5a03191f372d005d1afa36807d389a4d388e80aa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Mar 2019 08:28:59 +0000 Subject: [PATCH 121/230] chore(deps): update dependency @types/react to v16.8.6 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66b1a8e7d71..d2cd084c07e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1427,15 +1427,15 @@ "dev": true }, "@types/prop-types": { - "version": "15.5.9", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.9.tgz", - "integrity": "sha512-Nha5b+jmBI271jdTMwrHiNXM+DvThjHOfyZtMX9kj/c/LUj2xiLHsG/1L3tJ8DjAoQN48cHwUwtqBotjyXaSdQ==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz", + "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==", "dev": true }, "@types/react": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.4.tgz", - "integrity": "sha512-Mpz1NNMJvrjf0GcDqiK8+YeOydXfD8Mgag3UtqQ5lXYTsMnOiHcKmO48LiSWMb1rSHB9MV/jlgyNzeAVxWMZRQ==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.6.tgz", + "integrity": "sha512-bN9qDjEMltmHrl0PZRI4IF2AbB7V5UlRfG+OOduckVnRQ4VzXVSzy/1eLAh778IEqhTnW0mmgL9yShfinNverA==", "dev": true, "requires": { "@types/prop-types": "*", diff --git a/package.json b/package.json index 66ea44ee619..4d8abfc7a02 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.121", "@types/node": "10.12.27", - "@types/react": "16.8.4", + "@types/react": "16.8.6", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", "bundlesize": "0.17.1", From e21f77cb4434d8c53dadae429648f4ed1890ca90 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Mar 2019 09:29:47 +0000 Subject: [PATCH 122/230] chore(deps): update dependency danger to v7.0.14 --- package-lock.json | 33 +++++++++++++-------------------- package.json | 2 +- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2cd084c07e..04637d6fa9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3866,9 +3866,9 @@ } }, "danger": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.13.tgz", - "integrity": "sha512-6tHEWYCCycI0szlodbxDUR4d91l3Gu33ChrowvJOYZ5P9VhxTkmamWC04b3f5qgxkrFsQCTiuAL8eqvMQyOQyw==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.14.tgz", + "integrity": "sha512-8JoWH5wge25vo0ROSplA+edy2PVk5Ttn7iR7oEq/XwWxp18lHG4B8JuYgMWqp68EcJbJlKxTWQfmANJudmJuiA==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", @@ -3888,6 +3888,7 @@ "lodash.includes": "^4.3.0", "lodash.isobject": "^3.0.2", "lodash.keys": "^4.0.8", + "lodash.memoize": "^4.1.2", "memfs-or-file-map-to-github-branch": "^1.1.0", "node-cleanup": "^2.1.2", "node-fetch": "^2.3.0", @@ -8236,20 +8237,6 @@ "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "jsprim": { @@ -8265,9 +8252,9 @@ } }, "jwa": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.3.0.tgz", - "integrity": "sha512-SxObIyzv9a6MYuZYaSN6DhSm9j3+qkokwvCB0/OTSV5ylPq1wUQiygZQcHT5Qlux0I5kmISx3J86TxKhuefItg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.0.tgz", + "integrity": "sha512-mt6IHaq0ZZWDBspg0Pheu3r9sVNMEZn+GJe1zcdYyhFcDSclp3J8xEdO4PjZolZ2i8xlaVU1LetHM0nJejYsEw==", "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", @@ -9132,6 +9119,12 @@ "integrity": "sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", diff --git a/package.json b/package.json index 4d8abfc7a02..8caebcde547 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.13", + "danger": "7.0.14", "fetch-mock": "7.3.0", "flow-bin": "0.93.0", "graphql": "14.1.1", From dfa5a1f9abf3772c6fbef496c659d6d23a03c135 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Mar 2019 10:35:48 +0000 Subject: [PATCH 123/230] chore(deps): update dependency fetch-mock to v7.3.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04637d6fa9a..59ec4b47370 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5285,9 +5285,9 @@ } }, "fetch-mock": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-7.3.0.tgz", - "integrity": "sha512-KxBeS8vsADFbWPVomuwxYqOJ2obZo6CidgkypjDPeu6zl+tAJvh2GfLDmJ8u//xgBGM9iOGwOxafeqAclilH2A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-7.3.1.tgz", + "integrity": "sha512-euKqWnxeApj0toZ5MSavZJ7IIxbMaHpgteV2GNuz6/slAY0JUbRe95U/ueaz2spT/4nR75H4wpEmy2MMEsCoRg==", "dev": true, "requires": { "babel-polyfill": "^6.26.0", diff --git a/package.json b/package.json index 8caebcde547..ba987ff717c 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", "danger": "7.0.14", - "fetch-mock": "7.3.0", + "fetch-mock": "7.3.1", "flow-bin": "0.93.0", "graphql": "14.1.1", "graphql-tag": "2.10.1", From 41b02660bd8713300595a30da3a0ecb3977e61cd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Mar 2019 11:31:12 +0000 Subject: [PATCH 124/230] chore(deps): update dependency flow-bin to v0.94.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59ec4b47370..5987fdfed5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5405,9 +5405,9 @@ } }, "flow-bin": { - "version": "0.93.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.93.0.tgz", - "integrity": "sha512-p8yq4ocOlpyJgOEBEj0v0GzCP25c9WP0ilFQ8hXSbrTR7RPKuR+Whr+OitlVyp8ocdX0j1MrIwQ8x28dacy1pg==", + "version": "0.94.0", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.94.0.tgz", + "integrity": "sha512-DYF7r9CJ/AksfmmB4+q+TyLMoeQPRnqtF1Pk7KY3zgfkB/nVuA3nXyzqgsIPIvnMSiFEXQcFK4z+iPxSLckZhQ==", "dev": true }, "flush-write-stream": { diff --git a/package.json b/package.json index ba987ff717c..9adf7971741 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "codecov": "3.2.0", "danger": "7.0.14", "fetch-mock": "7.3.1", - "flow-bin": "0.93.0", + "flow-bin": "0.94.0", "graphql": "14.1.1", "graphql-tag": "2.10.1", "isomorphic-fetch": "2.2.1", From 4d5c26c2dea42a35a67c46996c86d2e4a0d72546 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Mar 2019 12:33:44 +0000 Subject: [PATCH 125/230] chore(deps): update dependency lerna to v3.13.1 --- package-lock.json | 202 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5987fdfed5a..3f8b2a529c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,20 +113,20 @@ } }, "@lerna/add": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.0.tgz", - "integrity": "sha512-5srUGfZHjqa5BW3JODHpzbH1ayweGqqrxH8qOzf/E/giNfzigdfyCSkbGh/iiLTXGu7BBE+3/OFfycoqYbalgg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.1.tgz", + "integrity": "sha512-cXk42YbuhzEnADCK8Qte5laC9Qo03eJLVnr0qKY85jQUM/T4URe3IIUemqpg0CpVATrB+Vz+iNdeqw9ng1iALw==", "dev": true, "requires": { - "@lerna/bootstrap": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/bootstrap": "3.13.1", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/npm-conf": "3.13.0", "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "npm-package-arg": "^6.1.0", "p-map": "^1.2.0", - "pacote": "^9.4.1", + "pacote": "^9.5.0", "semver": "^5.5.0" } }, @@ -142,13 +142,13 @@ } }, "@lerna/bootstrap": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.13.0.tgz", - "integrity": "sha512-wdwBzvwEdzGERwpiY6Zu/T+tntCfXeXrL9cQIxP+K2M07jL5M00ZRdDoFcP90sGn568AjhvRhD2ExA5wPECSgA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.13.1.tgz", + "integrity": "sha512-mKdi5Ds5f82PZwEFyB9/W60I3iELobi1i87sTeVrbJh/um7GvqpSPy7kG/JPxyOdMpB2njX6LiJgw+7b6BEPWw==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/has-npm-version": "3.13.0", "@lerna/npm-install": "3.13.0", @@ -174,16 +174,16 @@ } }, "@lerna/changed": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.0.tgz", - "integrity": "sha512-BNUVfEzhrY+XEQJI0fFxEAN7JrguXMGNX5rqQ2KWyGQB4fZ1mv4FStJRjK0K/gcCvdHnuR65uexc/acxBnBi9w==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.1.tgz", + "integrity": "sha512-BRXitEJGOkoudbxEewW7WhjkLxFD+tTk4PrYpHLyCBk63pNTWtQLRE6dc1hqwh4emwyGncoyW6RgXfLgMZgryw==", "dev": true, "requires": { "@lerna/collect-updates": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/listable": "3.13.0", "@lerna/output": "3.13.0", - "@lerna/version": "3.13.0" + "@lerna/version": "3.13.1" } }, "@lerna/check-working-tree": { @@ -270,12 +270,12 @@ } }, "@lerna/clean": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.13.0.tgz", - "integrity": "sha512-eFkqVsOmybUIjak2NyGfk78Mo8rNyNiSDFh2+HGpias3PBdEbkGYtFi/JMBi9FvqCsBSiVnHCTUcnZdLzMz69w==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.13.1.tgz", + "integrity": "sha512-myGIaXv7RUO2qCFZXvx8SJeI+eN6y9SUD5zZ4/LvNogbOiEIlujC5lUAqK65rAHayQ9ltSa/yK6Xv510xhZXZQ==", "dev": true, "requires": { - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", @@ -494,14 +494,14 @@ } }, "@lerna/command": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.13.0.tgz", - "integrity": "sha512-34Igk99KKeDt1ilzHooVUamMegArFz8AH9BuJivIKBps1E2A5xkwRd0mJFdPENzLxOqBJlt+cnL7LyvaIM6tRQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.13.1.tgz", + "integrity": "sha512-SYWezxX+iheWvzRoHCrbs8v5zHPaxAx3kWvZhqi70vuGsdOVAWmaG4IvHLn11ztS+Vpd5PM+ztBWSbnykpLFKQ==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", "@lerna/package-graph": "3.13.0", - "@lerna/project": "3.13.0", + "@lerna/project": "3.13.1", "@lerna/validation-error": "3.13.0", "@lerna/write-log-file": "3.13.0", "dedent": "^0.7.0", @@ -587,13 +587,13 @@ } }, "@lerna/create": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.13.0.tgz", - "integrity": "sha512-0Vrl6Z1NEQFKd1uzWBFWii59OmMNKSNXxgKYoh3Ulu/ekMh90BgnLJ0a8tE34KK4lG5mVTQDlowKFEF+jZfYOA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.13.1.tgz", + "integrity": "sha512-pLENMXgTkQuvKxAopjKeoLOv9fVUCnpTUD7aLrY5d95/1xqSZlnsOcQfUYcpMf3GpOvHc8ILmI5OXkPqjAf54g==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/npm-conf": "3.13.0", "@lerna/validation-error": "3.13.0", "camelcase": "^5.0.0", @@ -603,7 +603,7 @@ "init-package-json": "^1.10.3", "npm-package-arg": "^6.1.0", "p-reduce": "^1.0.0", - "pacote": "^9.4.1", + "pacote": "^9.5.0", "pify": "^3.0.0", "semver": "^5.5.0", "slash": "^1.0.0", @@ -653,26 +653,26 @@ } }, "@lerna/diff": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.13.0.tgz", - "integrity": "sha512-fyHRzRBiqXj03YbGY5/ume1N0v0wrWVB7XPHPaQs/e/eCgMpcmoQGQoW5r97R+xaEoy3boByr/ham4XHZv02ZQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.13.1.tgz", + "integrity": "sha512-cKqmpONO57mdvxtp8e+l5+tjtmF04+7E+O0QEcLcNUAjC6UR2OSM77nwRCXDukou/1h72JtWs0jjcdYLwAmApg==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/validation-error": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.13.0.tgz", - "integrity": "sha512-Dc8jr1jL6YrfbI1sUZ3+px00HwcZLKykl7AC8A+vvCzYLa4MeK3UJ7CPg4kvBN1mX7yhGrSDSfxG0bJriHU5nA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.13.1.tgz", + "integrity": "sha512-I34wEP9lrAqqM7tTXLDxv/6454WFzrnXDWpNDbiKQiZs6SIrOOjmm6I4FiQsx+rU3o9d+HkC6tcUJRN5mlJUgA==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", "@lerna/child-process": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/run-parallel-batches": "3.13.0", "@lerna/validation-error": "3.13.0" @@ -744,14 +744,14 @@ } }, "@lerna/github-client": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.13.0.tgz", - "integrity": "sha512-4/003z1g7shg21nl06ku5/yqYbQfNsQkeWuWEd+mjiTtGH6OhzJ8XcmBOq6mhZrfDAlA4OLeXypd1QIK1Y7arA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.13.1.tgz", + "integrity": "sha512-iPLUp8FFoAKGURksYEYZzfuo9TRA+NepVlseRXFaWlmy36dCQN20AciINpoXiXGoHcEUHXUKHQvY3ARFdMlf3w==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", - "@octokit/plugin-enterprise-rest": "^2.1.0", - "@octokit/rest": "^16.15.0", + "@octokit/plugin-enterprise-rest": "^2.1.1", + "@octokit/rest": "^16.16.0", "git-url-parse": "^11.1.2", "npmlog": "^4.1.2" } @@ -773,13 +773,13 @@ } }, "@lerna/import": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.13.0.tgz", - "integrity": "sha512-uQ+hoYEC6/B8VqQ9tecA1PVCFiqwN+DCrdIBY/KX3Z5vip94Pc8H/u+Q2dfBymkT6iXnvmPR/6hsMkpMOjBQDg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.13.1.tgz", + "integrity": "sha512-A1Vk1siYx1XkRl6w+zkaA0iptV5TIynVlHPR9S7NY0XAfhykjztYVvwtxarlh6+VcNrO9We6if0+FXCrfDEoIg==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", "@lerna/validation-error": "3.13.0", @@ -789,25 +789,25 @@ } }, "@lerna/init": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.13.0.tgz", - "integrity": "sha512-4MBaNaitr9rfzwHK4d0Y19WIzqL5RTk719tIlVtw+IRE2qF9/ioovNIZuoeISyi84mTKehsFtPsHoxFIulZUhQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.13.1.tgz", + "integrity": "sha512-M59WACqim8WkH5FQEGOCEZ89NDxCKBfFTx4ZD5ig3LkGyJ8RdcJq5KEfpW/aESuRE9JrZLzVr0IjKbZSxzwEMA==", "dev": true, "requires": { "@lerna/child-process": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" } }, "@lerna/link": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.13.0.tgz", - "integrity": "sha512-0PAZM1kVCmtJfiQUzy6TT1aemIg9pxejGxFBYMB+IAxR5rcgLlZago1R52/8HyNGa07bLv0B6CkRgrdQ/9bzCg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.13.1.tgz", + "integrity": "sha512-N3h3Fj1dcea+1RaAoAdy4g2m3fvU7m89HoUn5X/Zcw5n2kPoK8kTO+NfhNAatfRV8VtMXst8vbNrWQQtfm0FFw==", "dev": true, "requires": { - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/package-graph": "3.13.0", "@lerna/symlink-dependencies": "3.13.0", "p-map": "^1.2.0", @@ -815,12 +815,12 @@ } }, "@lerna/list": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.13.0.tgz", - "integrity": "sha512-nKSqGs4ZJe7zB6SJmBEb7AfGLzqDOwJwbucC3XVgkjrXlrX4AW4+qnPiGpEdz8OFmzstkghQrWUUJvsEpNVTjw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.13.1.tgz", + "integrity": "sha512-635iRbdgd9gNvYLLIbYdQCQLr+HioM5FGJLFS0g3DPGygr6iDR8KS47hzCRGH91LU9NcM1mD1RoT/AChF+QbiA==", "dev": true, "requires": { - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/listable": "3.13.0", "@lerna/output": "3.13.0" @@ -950,16 +950,16 @@ } }, "@lerna/pack-directory": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.13.0.tgz", - "integrity": "sha512-p5lhLPvpRptms08uSTlDpz8R2/s8Z2Vi0Hc8+yIAP74YD8gh/U9Diku9EGkkgkLfV+P0WhnEO8/Gq/qzNVbntA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.13.1.tgz", + "integrity": "sha512-kXnyqrkQbCIZOf1054N88+8h0ItC7tUN5v9ca/aWpx298gsURpxUx/1TIKqijL5TOnHMyIkj0YJmnH/PyBVLKA==", "dev": true, "requires": { "@lerna/get-packed": "3.13.0", "@lerna/package": "3.13.0", "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", - "npm-packlist": "^1.1.12", + "npm-packlist": "^1.4.1", "npmlog": "^4.1.2", "tar": "^4.4.8", "temp-write": "^3.4.0" @@ -1011,14 +1011,14 @@ } }, "@lerna/project": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.13.0.tgz", - "integrity": "sha512-hxRvln8Dks3T4PBALC9H3Kw6kTne70XShfqSs4oJkMqFyDj4mb5VCUN6taCDXyF8fu75d02ETdTFZhhBgm1x6w==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.13.1.tgz", + "integrity": "sha512-/GoCrpsCCTyb9sizk1+pMBrIYchtb+F1uCOn3cjn9yenyG/MfYEnlfrbV5k/UDud0Ei75YBLbmwCbigHkAKazQ==", "dev": true, "requires": { "@lerna/package": "3.13.0", "@lerna/validation-error": "3.13.0", - "cosmiconfig": "^5.0.2", + "cosmiconfig": "^5.1.0", "dedent": "^0.7.0", "dot-prop": "^4.2.0", "glob-parent": "^3.1.0", @@ -1074,29 +1074,29 @@ } }, "@lerna/publish": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.0.tgz", - "integrity": "sha512-WuO7LWWQ+8F+ig48RtUxWrVdOfpqDBOv6fXz0/2heQf/rJQoJDTzJZ0rk5ymaGCFz1Av2CbP0zoP7PAQQ2BeKg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.1.tgz", + "integrity": "sha512-KhCJ9UDx76HWCF03i5TD7z5lX+2yklHh5SyO8eDaLptgdLDQ0Z78lfGj3JhewHU2l46FztmqxL/ss0IkWHDL+g==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", "@lerna/check-working-tree": "3.13.0", "@lerna/child-process": "3.13.0", "@lerna/collect-updates": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/describe-ref": "3.13.0", "@lerna/log-packed": "3.13.0", "@lerna/npm-conf": "3.13.0", "@lerna/npm-dist-tag": "3.13.0", "@lerna/npm-publish": "3.13.0", "@lerna/output": "3.13.0", - "@lerna/pack-directory": "3.13.0", + "@lerna/pack-directory": "3.13.1", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", "@lerna/run-lifecycle": "3.13.0", "@lerna/run-parallel-batches": "3.13.0", "@lerna/validation-error": "3.13.0", - "@lerna/version": "3.13.0", + "@lerna/version": "3.13.1", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", "libnpmaccess": "^3.0.1", @@ -1107,7 +1107,7 @@ "p-map": "^1.2.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", - "pacote": "^9.4.1", + "pacote": "^9.5.0", "semver": "^5.5.0" } }, @@ -1144,13 +1144,13 @@ } }, "@lerna/run": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.13.0.tgz", - "integrity": "sha512-KSpEStp5SVzNB7+3V5WnyY4So8aEyDhBYvhm7cJr5M7xesKf/IE5KFywcI+JPYzyqnIOGXghfzBf9nBZRHlEUQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.13.1.tgz", + "integrity": "sha512-nv1oj7bsqppWm1M4ifN+/IIbVu9F4RixrbQD2okqDGYne4RQPAXyb5cEZuAzY/wyGTWWiVaZ1zpj5ogPWvH0bw==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/filter-options": "3.13.0", "@lerna/npm-run-script": "3.13.0", "@lerna/output": "3.13.0", @@ -1225,18 +1225,18 @@ } }, "@lerna/version": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.0.tgz", - "integrity": "sha512-YdLC208tExVpV77pdXpokGt9MAtTE7Kt93a2jcfjqiMoAI1VmXgGA+7drgBSTVtzfjXExPgi2//hJjI5ObckXA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.1.tgz", + "integrity": "sha512-WpfKc5jZBBOJ6bFS4atPJEbHSiywQ/Gcd+vrwaEGyQHWHQZnPTvhqLuq3q9fIb9sbuhH5pSY6eehhuBrKqTnjg==", "dev": true, "requires": { "@lerna/batch-packages": "3.13.0", "@lerna/check-working-tree": "3.13.0", "@lerna/child-process": "3.13.0", "@lerna/collect-updates": "3.13.0", - "@lerna/command": "3.13.0", + "@lerna/command": "3.13.1", "@lerna/conventional-commits": "3.13.0", - "@lerna/github-client": "3.13.0", + "@lerna/github-client": "3.13.1", "@lerna/output": "3.13.0", "@lerna/prompt": "3.13.0", "@lerna/run-lifecycle": "3.13.0", @@ -1329,9 +1329,9 @@ } }, "@octokit/plugin-enterprise-rest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.1.1.tgz", - "integrity": "sha512-DJNXHH0LptKCLpJ8y3vCA/O+s+3/sDU4JNN2V0M04tsMN0hVGLPzoGgejPJgaxGP8Il5aw+jA5Nl5mTfdt9NrQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.1.2.tgz", + "integrity": "sha512-EWKrEqhSgzqWXI9DuEsEI691PNJppm/a4zW62//te27I8pYI5zSNVR3wtNUk0NWPlvs7054YzGZochwbUbhI8A==", "dev": true }, "@octokit/request": { @@ -8309,26 +8309,26 @@ "dev": true }, "lerna": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.0.tgz", - "integrity": "sha512-MHaqqwfAdYIo0rAE0oOZRQ8eKbKyW035akLf0pz3YlWbdXKH91lxXRLj0BpbEytUz7hDbsv0FNNtXz9u5eTNFg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.1.tgz", + "integrity": "sha512-7kSz8LLozVsoUNTJzJzy+b8TnV9YdviR2Ee2PwGZSlVw3T1Rn7kOAPZjEi+3IWnOPC96zMPHVmjCmzQ4uubalw==", "dev": true, "requires": { - "@lerna/add": "3.13.0", - "@lerna/bootstrap": "3.13.0", - "@lerna/changed": "3.13.0", - "@lerna/clean": "3.13.0", + "@lerna/add": "3.13.1", + "@lerna/bootstrap": "3.13.1", + "@lerna/changed": "3.13.1", + "@lerna/clean": "3.13.1", "@lerna/cli": "3.13.0", - "@lerna/create": "3.13.0", - "@lerna/diff": "3.13.0", - "@lerna/exec": "3.13.0", - "@lerna/import": "3.13.0", - "@lerna/init": "3.13.0", - "@lerna/link": "3.13.0", - "@lerna/list": "3.13.0", - "@lerna/publish": "3.13.0", - "@lerna/run": "3.13.0", - "@lerna/version": "3.13.0", + "@lerna/create": "3.13.1", + "@lerna/diff": "3.13.1", + "@lerna/exec": "3.13.1", + "@lerna/import": "3.13.1", + "@lerna/init": "3.13.1", + "@lerna/link": "3.13.1", + "@lerna/list": "3.13.1", + "@lerna/publish": "3.13.1", + "@lerna/run": "3.13.1", + "@lerna/version": "3.13.1", "import-local": "^1.0.0", "npmlog": "^4.1.2" } diff --git a/package.json b/package.json index 9adf7971741..fb52853d7fb 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "isomorphic-fetch": "2.2.1", "jest": "23.6.0", "jest-junit": "5.2.0", - "lerna": "3.13.0", + "lerna": "3.13.1", "lint-staged": "8.1.4", "lodash": "4.17.11", "pre-commit": "1.2.2", From 44677946935ef69f85ddc7f5d28822ea8cac65bc Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sun, 3 Mar 2019 11:47:49 -0500 Subject: [PATCH 126/230] Remove request for React Native example apps We no longer want to maintain a list of external React Native example apps, so this commit removes the request from the docs. Maintaining a list of external links requires review/vet/approve/etc overhead, and is not something we can devote time to right now unforunately. --- docs/source/recipes/react-native.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/recipes/react-native.md b/docs/source/recipes/react-native.md index 93aa5aba394..f569da086fa 100644 --- a/docs/source/recipes/react-native.md +++ b/docs/source/recipes/react-native.md @@ -37,8 +37,6 @@ There are some Apollo examples written in React Native that you may wish to refe 1. The ["Hello World" example](https://github.com/apollographql/frontpage-react-native-app) used at dev.apollodata.com. 2. A [GitHub API Example](https://github.com/apollographql/GitHub-GraphQL-API-Example) built to work with GitHub's new GraphQL API. -> If you've got an example to post here, please hit the "Edit on GitHub" button above and let us know! -

Apollo Dev Tools

[React Native Debugger](https://github.com/jhen0409/react-native-debugger) supports the [Apollo Client Devtools](https://github.com/apollographql/apollo-client-devtools): From 334f8771b75211a3df989b33bc043931e55ab146 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Sun, 3 Mar 2019 12:04:04 -0500 Subject: [PATCH 127/230] Changelog update --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ea42ff5e21..6bbf210c541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,19 @@ ## Apollo Client vNEXT +### Apollo Client + +- Update the React Native docs to remove the request for external example + apps that we can link to. We're no longer going to manage a list of + external example apps.
+ [@hwillson](https://github.com/hwillson) in [#4531](https://github.com/apollographql/apollo-client/pull/4531) + ### Apollo Cache In-Memory - Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
[@benjamn](https://github.com/benjamn) in [#4514](https://github.com/apollographql/apollo-client/pull/4514) + ## Apollo Client 2.5.1 ### apollo-client 2.5.1 From 251b14e36a98aaf4357fd49111853c7a0e071641 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 4 Mar 2019 11:50:20 -0500 Subject: [PATCH 128/230] Assign unique error codes to production invariant errors. (#4521) Inspired by https://github.com/apollographql/apollo-client/issues/4519. Implemented and explained by https://github.com/apollographql/invariant-packages/pull/1. --- CHANGELOG.md | 12 ++++++++---- config/rollup.config.js | 10 +++++++++- package-lock.json | 6 +++--- package.json | 4 ++-- packages/apollo-boost/package-lock.json | 8 ++++---- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package-lock.json | 8 ++++---- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-cache/package-lock.json | 2 +- packages/apollo-client/package-lock.json | 8 ++++---- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package-lock.json | 8 ++++---- packages/apollo-utilities/package.json | 2 +- packages/graphql-anywhere/package-lock.json | 2 +- 14 files changed, 44 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bbf210c541..f342b0a78ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,15 @@ ## Apollo Client vNEXT -### Apollo Client +- In production, `invariant(condition, message)` failures will now include + a unique error code that can be used to trace the error back to the + point of failure.
+ [@benjamn](https://github.com/benjamn) in [#4521](https://github.com/apollographql/apollo-client/pull/4521) -- Update the React Native docs to remove the request for external example - apps that we can link to. We're no longer going to manage a list of +### Apollo Client + +- Update the React Native docs to remove the request for external example + apps that we can link to. We're no longer going to manage a list of external example apps.
[@hwillson](https://github.com/hwillson) in [#4531](https://github.com/apollographql/apollo-client/pull/4531) @@ -14,7 +19,6 @@ - Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
[@benjamn](https://github.com/benjamn) in [#4514](https://github.com/apollographql/apollo-client/pull/4514) - ## Apollo Client 2.5.1 ### apollo-client 2.5.1 diff --git a/config/rollup.config.js b/config/rollup.config.js index 60c68d674e3..a0dda885253 100644 --- a/config/rollup.config.js +++ b/config/rollup.config.js @@ -79,7 +79,15 @@ export function rollup({ module: true, }), typescriptPlugin({ typescript, tsconfig }), - invariantPlugin(), + invariantPlugin({ + // Instead of completely stripping InvariantError messages in + // production, this option assigns a numeric code to the + // production version of each error (unique to the call/throw + // location), which makes it much easier to trace production + // errors back to the unminified code where they were thrown, + // where the full error string can be found. See #4519. + errorCodes: true, + }), ], onwarn, }, diff --git a/package-lock.json b/package-lock.json index 3f8b2a529c6..649608889f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11937,9 +11937,9 @@ } }, "rollup-plugin-invariant": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.3.2.tgz", - "integrity": "sha512-1LxRFWan0jXGIlP8H7XaL2ivt96SLQFM7mdSJVMkZSdfNTTCCrIjk4G2H2wdhStcFDtCRpmu9ukYPUXShTa2yg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.4.0.tgz", + "integrity": "sha512-w8HRAowafvETQ6xh09A1TYzL6Jc4PIa0B1Cug795e5/w4VYMxSAlwypoW1bUNpziPTAft5q67FjqkNlQN+5Wdg==", "dev": true, "requires": { "recast": "^0.17.2", diff --git a/package.json b/package.json index fb52853d7fb..5aaa1943247 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ { "name": "apollo-utilities", "path": "./packages/apollo-utilities/lib/bundle.cjs.min.js", - "maxSize": "4.15 kB" + "maxSize": "4.2 kB" } ], "lint-staged": { @@ -89,7 +89,7 @@ "react": "16.8.3", "react-dom": "16.8.3", "rollup": "1.2.2", - "rollup-plugin-invariant": "^0.3.2", + "rollup-plugin-invariant": "^0.4.0", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", "rollup-plugin-sourcemaps": "0.4.2", diff --git a/packages/apollo-boost/package-lock.json b/packages/apollo-boost/package-lock.json index fdc6a88c7e4..6a1274de7c6 100644 --- a/packages/apollo-boost/package-lock.json +++ b/packages/apollo-boost/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-boost", - "version": "0.3.0-beta.0", + "version": "0.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -229,9 +229,9 @@ "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" }, "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", + "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 01ad64255c5..8050bc3b3b7 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -42,7 +42,7 @@ "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", "graphql-tag": "^2.4.2", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.0", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-cache-inmemory/package-lock.json b/packages/apollo-cache-inmemory/package-lock.json index ced1bc55172..92ad8ab40ad 100644 --- a/packages/apollo-cache-inmemory/package-lock.json +++ b/packages/apollo-cache-inmemory/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-cache-inmemory", - "version": "1.5.0-beta.0", + "version": "1.5.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -51,9 +51,9 @@ } }, "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", + "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index 35f7e425acb..d2685a01ee7 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -42,7 +42,7 @@ "apollo-cache": "file:../apollo-cache", "apollo-utilities": "file:../apollo-utilities", "optimism": "^0.6.9", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.0", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-cache/package-lock.json b/packages/apollo-cache/package-lock.json index 7462604e3eb..47d7dc0d6dd 100644 --- a/packages/apollo-cache/package-lock.json +++ b/packages/apollo-cache/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-cache", - "version": "1.1.25", + "version": "1.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/apollo-client/package-lock.json b/packages/apollo-client/package-lock.json index 1c094b23e3b..a54b91ca4b4 100644 --- a/packages/apollo-client/package-lock.json +++ b/packages/apollo-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-client", - "version": "2.5.0-beta.0", + "version": "2.5.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -65,9 +65,9 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", + "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 8dba4d2f123..1406f49a208 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -51,7 +51,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:../apollo-utilities", "symbol-observable": "^1.0.2", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.0", "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, diff --git a/packages/apollo-utilities/package-lock.json b/packages/apollo-utilities/package-lock.json index f9172f16919..5af4426412d 100644 --- a/packages/apollo-utilities/package-lock.json +++ b/packages/apollo-utilities/package-lock.json @@ -1,6 +1,6 @@ { "name": "apollo-utilities", - "version": "1.2.0-beta.0", + "version": "1.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10,9 +10,9 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", + "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index f360d1a56aa..1f496cc19be 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.0", "tslib": "^1.9.3" } } diff --git a/packages/graphql-anywhere/package-lock.json b/packages/graphql-anywhere/package-lock.json index 90bae247db5..a250ba1d229 100644 --- a/packages/graphql-anywhere/package-lock.json +++ b/packages/graphql-anywhere/package-lock.json @@ -1,6 +1,6 @@ { "name": "graphql-anywhere", - "version": "4.1.27", + "version": "4.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { From 95910168f10bd63e40d0c4977f6c24f6dd2c5fcd Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 5 Mar 2019 18:50:06 -0500 Subject: [PATCH 129/230] Update rollup-plugin-invariant and ts-invariant to latest versions. --- package-lock.json | 14 +++++++------- package.json | 2 +- packages/apollo-boost/package-lock.json | 6 +++--- packages/apollo-boost/package.json | 2 +- packages/apollo-cache-inmemory/package-lock.json | 6 +++--- packages/apollo-cache-inmemory/package.json | 2 +- packages/apollo-client/package-lock.json | 6 +++--- packages/apollo-client/package.json | 2 +- packages/apollo-utilities/package-lock.json | 6 +++--- packages/apollo-utilities/package.json | 2 +- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 649608889f3..03bf93c6f84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1941,7 +1941,7 @@ "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", "graphql-tag": "^2.4.2", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" } }, @@ -1958,7 +1958,7 @@ "apollo-cache": "file:packages/apollo-cache", "apollo-utilities": "file:packages/apollo-utilities", "optimism": "^0.6.9", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" } }, @@ -1971,7 +1971,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:packages/apollo-utilities", "symbol-observable": "^1.0.2", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3", "zen-observable": "^0.8.0" } @@ -2022,7 +2022,7 @@ "version": "file:packages/apollo-utilities", "requires": { "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.2.1", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" } }, @@ -11937,9 +11937,9 @@ } }, "rollup-plugin-invariant": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.4.0.tgz", - "integrity": "sha512-w8HRAowafvETQ6xh09A1TYzL6Jc4PIa0B1Cug795e5/w4VYMxSAlwypoW1bUNpziPTAft5q67FjqkNlQN+5Wdg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-invariant/-/rollup-plugin-invariant-0.4.2.tgz", + "integrity": "sha512-GXVoh7fnzEElVEbzt7gOWHnkB+nWd9WGQex70SKvl49RXvnWKSHu4Nk6M/7tqDKFMHvRUpEo6qWD7bv48vmg7g==", "dev": true, "requires": { "recast": "^0.17.2", diff --git a/package.json b/package.json index 5aaa1943247..7b7fcfbcf1c 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "react": "16.8.3", "react-dom": "16.8.3", "rollup": "1.2.2", - "rollup-plugin-invariant": "^0.4.0", + "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", "rollup-plugin-sourcemaps": "0.4.2", diff --git a/packages/apollo-boost/package-lock.json b/packages/apollo-boost/package-lock.json index 6a1274de7c6..677e058c738 100644 --- a/packages/apollo-boost/package-lock.json +++ b/packages/apollo-boost/package-lock.json @@ -229,9 +229,9 @@ "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" }, "ts-invariant": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", - "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-boost/package.json b/packages/apollo-boost/package.json index 8050bc3b3b7..ba6ccdca340 100644 --- a/packages/apollo-boost/package.json +++ b/packages/apollo-boost/package.json @@ -42,7 +42,7 @@ "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", "graphql-tag": "^2.4.2", - "ts-invariant": "^0.3.0", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-cache-inmemory/package-lock.json b/packages/apollo-cache-inmemory/package-lock.json index 92ad8ab40ad..ad96e8817d8 100644 --- a/packages/apollo-cache-inmemory/package-lock.json +++ b/packages/apollo-cache-inmemory/package-lock.json @@ -51,9 +51,9 @@ } }, "ts-invariant": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", - "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-cache-inmemory/package.json b/packages/apollo-cache-inmemory/package.json index d2685a01ee7..f56fa9d505f 100644 --- a/packages/apollo-cache-inmemory/package.json +++ b/packages/apollo-cache-inmemory/package.json @@ -42,7 +42,7 @@ "apollo-cache": "file:../apollo-cache", "apollo-utilities": "file:../apollo-utilities", "optimism": "^0.6.9", - "ts-invariant": "^0.3.0", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" }, "peerDependencies": { diff --git a/packages/apollo-client/package-lock.json b/packages/apollo-client/package-lock.json index a54b91ca4b4..01a2d33f83a 100644 --- a/packages/apollo-client/package-lock.json +++ b/packages/apollo-client/package-lock.json @@ -65,9 +65,9 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "ts-invariant": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", - "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-client/package.json b/packages/apollo-client/package.json index 1406f49a208..fa23417d182 100644 --- a/packages/apollo-client/package.json +++ b/packages/apollo-client/package.json @@ -51,7 +51,7 @@ "apollo-link-dedup": "^1.0.0", "apollo-utilities": "file:../apollo-utilities", "symbol-observable": "^1.0.2", - "ts-invariant": "^0.3.0", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, diff --git a/packages/apollo-utilities/package-lock.json b/packages/apollo-utilities/package-lock.json index 5af4426412d..66a90fc8a87 100644 --- a/packages/apollo-utilities/package-lock.json +++ b/packages/apollo-utilities/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "ts-invariant": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.0.tgz", - "integrity": "sha512-HIaaQa5naCe+vYsMsRnEV0gs5ment1Y2VJMYneoQLPm014uUjc76PHvLJr61qas35aYOcsZEC+i6AuJjTY7Odw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } diff --git a/packages/apollo-utilities/package.json b/packages/apollo-utilities/package.json index 1f496cc19be..f5c8f4411b0 100644 --- a/packages/apollo-utilities/package.json +++ b/packages/apollo-utilities/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.3.0", + "ts-invariant": "^0.3.2", "tslib": "^1.9.3" } } From 12bd15ffcee0ec672e7ec8461eaa90466e2d5971 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 5 Mar 2019 19:27:11 -0500 Subject: [PATCH 130/230] Use @condenast/bundlesize to avoid compiling iltorb. (#4538) https://github.com/siddharthkp/bundlesize/pull/260#issuecomment-462760969 Also using @condenast/bundlesize for the apollo-link packages: https://github.com/apollographql/apollo-link/pull/965 --- package-lock.json | 95 ++++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 49 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03bf93c6f84..da5eee4db50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,6 +50,24 @@ "regenerator-runtime": "^0.12.0" } }, + "@condenast/bundlesize": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@condenast/bundlesize/-/bundlesize-0.18.1.tgz", + "integrity": "sha512-i/GG6p8j9BRrts4sG7ECLN5WrcJj+ubYEM+F6dR1BwbTHKo7Lt0sx6y/sZf1pg4jbHyGOHAe3jedkiVoj6e/qw==", + "dev": true, + "requires": { + "axios": "^0.17.0", + "brotli-size": "0.0.3", + "bytes": "^3.0.0", + "ci-env": "^1.4.0", + "commander": "^2.11.0", + "github-build": "^1.2.0", + "glob": "^7.1.2", + "gzip-size": "^4.0.0", + "prettycli": "^1.4.3", + "read-pkg-up": "^3.0.0" + } + }, "@iamstarkov/listr-update-renderer": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz", @@ -2790,13 +2808,13 @@ "dev": true }, "brotli-size": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.1.tgz", - "integrity": "sha1-jBruoBzSLzWbBIlRGFvVOf8Mgp8=", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.0.3.tgz", + "integrity": "sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ==", "dev": true, "requires": { "duplexer": "^0.1.1", - "iltorb": "^1.0.9" + "iltorb": "^2.0.5" } }, "browser-process-hrtime": { @@ -2971,24 +2989,6 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, - "bundlesize": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.17.1.tgz", - "integrity": "sha512-p5I5Tpoug9aOVGg4kQETMJ8xquY66mX9XI19kXkkAFnmDhDXwSF+1jq1OjBGz7h27TAulM3k2wLEJPvickTt0A==", - "dev": true, - "requires": { - "axios": "^0.17.0", - "brotli-size": "0.0.1", - "bytes": "^3.0.0", - "ci-env": "^1.4.0", - "commander": "^2.11.0", - "github-build": "^1.2.0", - "glob": "^7.1.2", - "gzip-size": "^4.0.0", - "prettycli": "^1.4.3", - "read-pkg-up": "^3.0.0" - } - }, "byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", @@ -4261,9 +4261,9 @@ } }, "detect-libc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz", - "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true }, "detect-newline": { @@ -4772,9 +4772,9 @@ } }, "expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true }, "expand-tilde": { @@ -6920,15 +6920,15 @@ } }, "iltorb": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz", - "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.1.tgz", + "integrity": "sha512-huyAN7dSNe2b7VAl5AyvaeZ8XTcDTSF1b8JVYDggl+SBfHsORq3qMZeesZW7zoEy21s15SiERAITWT5cwxu1Uw==", "dev": true, "requires": { - "detect-libc": "^0.2.0", - "nan": "^2.6.2", - "node-gyp": "^3.6.2", - "prebuild-install": "^2.3.0" + "detect-libc": "^1.0.3", + "npmlog": "^4.1.2", + "prebuild-install": "^5.2.1", + "which-pm-runs": "^1.0.0" } }, "immutable-tuple": { @@ -9768,6 +9768,12 @@ } } }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10817,34 +10823,29 @@ } }, "prebuild-install": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", - "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.4.tgz", + "integrity": "sha512-CG3JnpTZXdmr92GW4zbcba4jkDha6uHraJ7hW4Fn8j0mExxwOKK20hqho8ZuBDCKYCHYIkFM1P2jhtG+KpP4fg==", "dev": true, "requires": { "detect-libc": "^1.0.3", - "expand-template": "^1.0.2", + "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "node-abi": "^2.2.0", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", "noop-logger": "^0.1.1", "npmlog": "^4.0.1", "os-homedir": "^1.0.1", "pump": "^2.0.1", - "rc": "^1.1.6", + "rc": "^1.2.7", "simple-get": "^2.7.0", "tar-fs": "^1.13.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" }, "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", diff --git a/package.json b/package.json index 7b7fcfbcf1c..174b9471734 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "graphql-anywhere": "file:packages/graphql-anywhere" }, "devDependencies": { + "@condenast/bundlesize": "0.18.1", "@octokit/rest": "16.16.3", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", @@ -70,7 +71,6 @@ "@types/react": "16.8.6", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", - "bundlesize": "0.17.1", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", "danger": "7.0.14", From 48ea511d2485f6597dfa3e2f3dffc362373d2d2e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Mar 2019 17:25:35 -0500 Subject: [PATCH 131/230] Create QueryManager in ApolloClient constructor. Creating the QueryManager lazily has limited value, since almost nothing ApolloClient needs to do can happen without the QueryManager. This change cuts 183 bytes from the minified size of the package (60 bytes after gzip). --- packages/apollo-client/src/ApolloClient.ts | 105 +++++++----------- .../apollo-client/src/__tests__/client.ts | 18 --- 2 files changed, 39 insertions(+), 84 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 3aa67c5ebee..c7541138a86 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -72,7 +72,7 @@ export default class ApolloClient implements DataProxy { public link: ApolloLink; public store: DataStore; public cache: ApolloCache; - public queryManager: QueryManager | undefined; + public readonly queryManager: QueryManager; public disableNetworkFetches: boolean; public version: string; public queryDeduplication: boolean; @@ -80,11 +80,8 @@ export default class ApolloClient implements DataProxy { public readonly typeDefs: ApolloClientOptions['typeDefs']; private devToolsHookCb: Function; - private proxy: ApolloCache | undefined; - private ssrMode: boolean; private resetStoreCallbacks: Array<() => Promise> = []; private clearStoreCallbacks: Array<() => Promise> = []; - private clientAwareness: Record = {}; private localState: LocalState; /** @@ -166,7 +163,6 @@ export default class ApolloClient implements DataProxy { this.store = new DataStore(cache); this.disableNetworkFetches = ssrMode || ssrForceFetchDelay > 0; this.queryDeduplication = queryDeduplication; - this.ssrMode = ssrMode; this.defaultOptions = defaultOptions || {}; this.typeDefs = typeDefs; @@ -231,20 +227,36 @@ export default class ApolloClient implements DataProxy { this.version = version; - if (clientAwarenessName) { - this.clientAwareness.name = clientAwarenessName; - } - - if (clientAwarenessVersion) { - this.clientAwareness.version = clientAwarenessVersion; - } - this.localState = new LocalState({ cache, client: this, resolvers, fragmentMatcher, }); + + this.queryManager = new QueryManager({ + link: this.link, + store: this.store, + queryDeduplication, + ssrMode, + clientAwareness: { + name: clientAwarenessName!, + version: clientAwarenessVersion!, + }, + localState: this.localState, + onBroadcast: () => { + if (this.devToolsHookCb) { + this.devToolsHookCb({ + action: {}, + state: { + queries: this.queryManager.queryStore.getStore(), + mutations: this.queryManager.mutationStore.getStore(), + }, + dataWithOptimisticResults: this.cache.extract(true), + }); + } + }, + }); } /** @@ -295,7 +307,7 @@ export default class ApolloClient implements DataProxy { options = { ...options, fetchPolicy: 'cache-first' }; } - return this.initQueryManager().watchQuery(options); + return this.queryManager.watchQuery(options); } /** @@ -327,7 +339,7 @@ export default class ApolloClient implements DataProxy { options = { ...options, fetchPolicy: 'cache-first' }; } - return this.initQueryManager().query(options); + return this.queryManager.query(options); } /** @@ -347,7 +359,7 @@ export default class ApolloClient implements DataProxy { } as MutationOptions; } - return this.initQueryManager().mutate(options); + return this.queryManager.mutate(options); } /** @@ -357,7 +369,7 @@ export default class ApolloClient implements DataProxy { public subscribe( options: SubscriptionOptions, ): Observable { - return this.initQueryManager().startGraphQLSubscription(options); + return this.queryManager.startGraphQLSubscription(options); } /** @@ -373,7 +385,7 @@ export default class ApolloClient implements DataProxy { options: DataProxy.Query, optimistic: boolean = false, ): T | null { - return this.initProxy().readQuery(options, optimistic); + return this.cache.readQuery(options, optimistic); } /** @@ -394,7 +406,7 @@ export default class ApolloClient implements DataProxy { options: DataProxy.Fragment, optimistic: boolean = false, ): T | null { - return this.initProxy().readFragment(options, optimistic); + return this.cache.readFragment(options, optimistic); } /** @@ -405,8 +417,8 @@ export default class ApolloClient implements DataProxy { public writeQuery( options: DataProxy.WriteQueryOptions, ): void { - const result = this.initProxy().writeQuery(options); - this.initQueryManager().broadcastQueries(); + const result = this.cache.writeQuery(options); + this.queryManager.broadcastQueries(); return result; } @@ -424,8 +436,8 @@ export default class ApolloClient implements DataProxy { public writeFragment( options: DataProxy.WriteFragmentOptions, ): void { - const result = this.initProxy().writeFragment(options); - this.initQueryManager().broadcastQueries(); + const result = this.cache.writeFragment(options); + this.queryManager.broadcastQueries(); return result; } @@ -442,8 +454,8 @@ export default class ApolloClient implements DataProxy { public writeData( options: DataProxy.WriteDataOptions, ): void { - const result = this.initProxy().writeData(options); - this.initQueryManager().broadcastQueries(); + const result = this.cache.writeData(options); + this.queryManager.broadcastQueries(); return result; } @@ -459,32 +471,6 @@ export default class ApolloClient implements DataProxy { * This initializes the query manager that tracks queries and the cache */ public initQueryManager(): QueryManager { - if (!this.queryManager) { - this.queryManager = new QueryManager({ - link: this.link, - store: this.store, - queryDeduplication: this.queryDeduplication, - ssrMode: this.ssrMode, - clientAwareness: this.clientAwareness, - localState: this.localState, - onBroadcast: () => { - if (this.devToolsHookCb) { - this.devToolsHookCb({ - action: {}, - state: { - queries: this.queryManager - ? this.queryManager.queryStore.getStore() - : {}, - mutations: this.queryManager - ? this.queryManager.mutationStore.getStore() - : {}, - }, - dataWithOptimisticResults: this.cache.extract(true), - }); - } - }, - }); - } return this.queryManager; } @@ -581,7 +567,7 @@ export default class ApolloClient implements DataProxy { * Exposes the cache's complete state, in a serializable format for later restoration. */ public extract(optimistic?: boolean): TCacheShape { - return this.initProxy().extract(optimistic); + return this.cache.extract(optimistic); } /** @@ -592,7 +578,7 @@ export default class ApolloClient implements DataProxy { * and also (potentially) during hot reloads. */ public restore(serializedState: TCacheShape): ApolloCache { - return this.initProxy().restore(serializedState); + return this.cache.restore(serializedState); } /** @@ -622,17 +608,4 @@ export default class ApolloClient implements DataProxy { public setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher) { this.localState.setFragmentMatcher(fragmentMatcher); } - - /** - * Initializes a data proxy for this client instance if one does not already - * exist and returns either a previously initialized proxy instance or the - * newly initialized instance. - */ - private initProxy(): ApolloCache { - if (!this.proxy) { - this.initQueryManager(); - this.proxy = this.cache; - } - return this.proxy; - } } diff --git a/packages/apollo-client/src/__tests__/client.ts b/packages/apollo-client/src/__tests__/client.ts index 2d3b477e264..57e1df88e3a 100644 --- a/packages/apollo-client/src/__tests__/client.ts +++ b/packages/apollo-client/src/__tests__/client.ts @@ -22,20 +22,6 @@ import { withWarning } from '../util/wrap'; import { mockSingleLink } from '../__mocks__/mockLinks'; describe('client', () => { - it('creates query manager lazily', () => { - const client = new ApolloClient({ - link: ApolloLink.empty(), - cache: new InMemoryCache(), - }); - - expect(client.queryManager).toBeUndefined(); - - // We only create the query manager on the first query - client.initQueryManager(); - expect(client.queryManager).toBeDefined(); - expect(client.cache).toBeDefined(); - }); - it('can be loaded via require', () => { /* tslint:disable */ const ApolloClientRequire = require('../').default; @@ -46,10 +32,6 @@ describe('client', () => { cache: new InMemoryCache(), }); - expect(client.queryManager).toBeUndefined(); - - // We only create the query manager on the first query - client.initQueryManager(); expect(client.queryManager).toBeDefined(); expect(client.cache).toBeDefined(); }); From 29c0fa18b923153d45945d22b3011f179ce4d502 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 1 Mar 2019 17:27:38 -0500 Subject: [PATCH 132/230] Avoid costly cloneDeep calls if { assumeImmutableResults: true }. Part of the plan I outlined in this comment: https://github.com/apollographql/apollo-client/issues/4464#issuecomment-467548798 Passing { assumeImmutableResults: true } to the ApolloClient constructor should probably always be accompanied by passing { freezeResults: true } to the InMemoryCache constructor (see #4514), though of course the use of InMemoryCache is optional, and other cache implementations may not support that option. --- packages/apollo-client/src/ApolloClient.ts | 9 ++ .../apollo-client/src/core/ObservableQuery.ts | 6 +- .../apollo-client/src/core/QueryManager.ts | 4 + .../src/core/__tests__/ObservableQuery.ts | 102 +++++++++++++++++- 4 files changed, 118 insertions(+), 3 deletions(-) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index c7541138a86..25d34cabcb8 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -55,6 +55,7 @@ export type ApolloClientOptions = { connectToDevTools?: boolean; queryDeduplication?: boolean; defaultOptions?: DefaultOptions; + assumeImmutableResults?: boolean; resolvers?: Resolvers | Resolvers[]; typeDefs?: string | string[] | DocumentNode | DocumentNode[]; fragmentMatcher?: FragmentMatcher; @@ -103,6 +104,12 @@ export default class ApolloClient implements DataProxy { * options supplied to `watchQuery`, `query`, or * `mutate`. * + * @param assumeImmutableResults When this option is true, the client will assume results + * read from the cache are never mutated by application code, + * which enables substantial performance optimizations. Passing + * `{ freezeResults: true }` to the `InMemoryCache` constructor + * can help enforce this immutability. + * * @param name A custom name that can be used to identify this client, when * using Apollo client awareness features. E.g. "iOS". * @@ -120,6 +127,7 @@ export default class ApolloClient implements DataProxy { connectToDevTools, queryDeduplication = true, defaultOptions, + assumeImmutableResults = false, resolvers, typeDefs, fragmentMatcher, @@ -244,6 +252,7 @@ export default class ApolloClient implements DataProxy { version: clientAwarenessVersion!, }, localState: this.localState, + assumeImmutableResults, onBroadcast: () => { if (this.devToolsHookCb) { this.devToolsHookCb({ diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 34ad1a644e4..92d421a4556 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -250,7 +250,8 @@ export class ObservableQuery< if (!partial) { this.lastResult = { ...result, stale: false }; - this.lastResultSnapshot = cloneDeep(this.lastResult); + this.lastResultSnapshot = this.queryManager.assumeImmutableResults + ? this.lastResult : cloneDeep(this.lastResult); } return { ...result, partial }; @@ -611,7 +612,8 @@ export class ObservableQuery< const observer: Observer> = { next: (result: ApolloQueryResult) => { this.lastResult = result; - this.lastResultSnapshot = cloneDeep(result); + this.lastResultSnapshot = this.queryManager.assumeImmutableResults + ? result : cloneDeep(result); this.observers.forEach(obs => obs.next && obs.next(result)); }, error: (error: ApolloError) => { diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index e3f8765db18..3e89c572f42 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -57,6 +57,7 @@ export class QueryManager { public mutationStore: MutationStore = new MutationStore(); public queryStore: QueryStore = new QueryStore(); public dataStore: DataStore; + public readonly assumeImmutableResults: boolean; private deduplicator: ApolloLink; private queryDeduplication: boolean; @@ -94,6 +95,7 @@ export class QueryManager { ssrMode = false, clientAwareness = {}, localState, + assumeImmutableResults, }: { link: ApolloLink; queryDeduplication?: boolean; @@ -102,6 +104,7 @@ export class QueryManager { ssrMode?: boolean; clientAwareness?: Record; localState?: LocalState; + assumeImmutableResults?: boolean; }) { this.link = link; this.deduplicator = ApolloLink.from([new Deduplicator(), link]); @@ -111,6 +114,7 @@ export class QueryManager { this.clientAwareness = clientAwareness; this.localState = localState || new LocalState({ cache: store.getCache() }); this.ssrMode = ssrMode; + this.assumeImmutableResults = !!assumeImmutableResults; } /** diff --git a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts index f21d93fcb8b..9e1b23495ff 100644 --- a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts +++ b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts @@ -49,7 +49,11 @@ describe('ObservableQuery', () => { const createQueryManager = ({ link }: { link?: ApolloLink }) => { return new QueryManager({ link: link || mockSingleLink(), - store: new DataStore(new InMemoryCache({ addTypename: false })), + assumeImmutableResults: true, + store: new DataStore(new InMemoryCache({ + addTypename: false, + freezeResults: true, + })), }); }; @@ -1690,6 +1694,102 @@ describe('ObservableQuery', () => { }); }); + describe('assumeImmutableResults', () => { + it('should prevent costly (but safe) cloneDeep calls', async () => { + const queryOptions = { + query: gql` + query { + value + } + `, + pollInterval: 20, + }; + + function check({ assumeImmutableResults, freezeResults }) { + const client = new ApolloClient({ + link: mockSingleLink( + { request: queryOptions, result: { data: { value: 1 } } }, + { request: queryOptions, result: { data: { value: 2 } } }, + { request: queryOptions, result: { data: { value: 3 } } }, + ), + assumeImmutableResults, + cache: new InMemoryCache({ freezeResults }), + }); + + const observable = client.watchQuery(queryOptions); + const values = []; + + return new Promise((resolve, reject) => { + observable.subscribe({ + next(result) { + values.push(result.data.value); + try { + result.data.value = 'oyez'; + } catch (error) { + reject(error); + } + client.writeData(result); + }, + error(err) { + expect(err.message).toMatch(/No more mocked responses/); + resolve(values); + }, + }); + }); + } + + // When we assume immutable results, the next method will not fire as a + // result of destructively modifying result.data.value, because the data + // object is still === to the previous object. This behavior might seem + // like a bug, if you are relying on the mutability of results, but the + // cloneDeep calls required to prevent that bug are expensive. Assuming + // immutability is safe only when you write your code in an immutable + // style, but the benefits are well worth the extra effort. + expect( + await check({ + assumeImmutableResults: true, + freezeResults: false, + }), + ).toEqual([1, 2, 3]); + + // When we do not assume immutable results, the observable must do + // extra work to take snapshots of past results, just in case those + // results are destructively modified. The benefit of that work is + // that such mutations can be detected, which is why "oyez" appears + // in the list of values here. This is a somewhat indirect way of + // detecting that cloneDeep must have been called, but at least it + // doesn't violate any abstractions. + expect( + await check({ + assumeImmutableResults: false, + freezeResults: false, + }), + ).toEqual([1, 'oyez', 2, 'oyez', 3, 'oyez']); + + async function checkThrows(assumeImmutableResults) { + try { + await check({ + assumeImmutableResults, + // No matter what value we provide for assumeImmutableResults, if we + // tell the InMemoryCache to deep-freeze its results, destructive + // modifications of the result objects will become fatal. Once you + // start enforcing immutability in this way, you might as well pass + // assumeImmutableResults: true, to prevent calling cloneDeep. + freezeResults: true, + }); + throw new Error('not reached'); + } catch (error) { + expect(error).toBeInstanceOf(TypeError); + expect(error.message).toMatch( + /Cannot assign to read only property 'value'/, + ); + } + } + await checkThrows(true); + await checkThrows(false); + }); + }); + describe('stopPolling', () => { it('does not restart polling after stopping and resubscribing', done => { const observable = mockWatchQuery( From b0a9e4c5e011326d587a4893f347816954c70c1d Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Mar 2019 13:23:41 -0500 Subject: [PATCH 133/230] Update apollo-boost test that relied on private clientAwareness property. --- packages/apollo-boost/src/__tests__/config.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/apollo-boost/src/__tests__/config.ts b/packages/apollo-boost/src/__tests__/config.ts index 5b0352ac4bc..74ac8dee566 100644 --- a/packages/apollo-boost/src/__tests__/config.ts +++ b/packages/apollo-boost/src/__tests__/config.ts @@ -145,8 +145,9 @@ describe('config', () => { version, }); - expect(client.clientAwareness.name).toEqual(name); - expect(client.clientAwareness.version).toEqual(version); + const { clientAwareness } = client.queryManager as any; + expect(clientAwareness.name).toEqual(name); + expect(clientAwareness.version).toEqual(version); }); const makePromise = res => From 1e740befdc4af214a007eb4b36022467bacf8fb0 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 6 Mar 2019 15:48:20 -0500 Subject: [PATCH 134/230] Use invariant.warn to forecast initQueryManager deprecation. --- packages/apollo-client/src/ApolloClient.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/apollo-client/src/ApolloClient.ts b/packages/apollo-client/src/ApolloClient.ts index 25d34cabcb8..d90d305c011 100644 --- a/packages/apollo-client/src/ApolloClient.ts +++ b/packages/apollo-client/src/ApolloClient.ts @@ -480,6 +480,10 @@ export default class ApolloClient implements DataProxy { * This initializes the query manager that tracks queries and the cache */ public initQueryManager(): QueryManager { + invariant.warn( + 'Calling the initQueryManager method is no longer necessary, ' + + 'and it will be removed from ApolloClient in version 3.0.', + ); return this.queryManager; } From aec8fa155474abfbeec0b81539dc5c3af7dcdac2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 6 Mar 2019 06:29:08 +0000 Subject: [PATCH 135/230] chore(deps): update dependency @types/lodash to v4.14.122 --- package-lock.json | 53 ++++++++++++++++++++++++++++++++++++----------- package.json | 2 +- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index da5eee4db50..b8982402e59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1433,9 +1433,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.121", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.121.tgz", - "integrity": "sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==", + "version": "4.14.122", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.122.tgz", + "integrity": "sha512-9IdED8wU93ty8gP06ninox+42SBSJHp2IAamsSYMUY76mshRTeUsid/gtbl8ovnOwy8im41ib4cxTiIYMXGKew==", "dev": true }, "@types/node": { @@ -1961,6 +1961,15 @@ "graphql-tag": "^2.4.2", "ts-invariant": "^0.3.2", "tslib": "^1.9.3" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.2", + "bundled": true, + "requires": { + "tslib": "^1.9.3" + } + } } }, "apollo-cache": { @@ -1978,6 +1987,15 @@ "optimism": "^0.6.9", "ts-invariant": "^0.3.2", "tslib": "^1.9.3" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.2", + "bundled": true, + "requires": { + "tslib": "^1.9.3" + } + } } }, "apollo-client": { @@ -1992,6 +2010,15 @@ "ts-invariant": "^0.3.2", "tslib": "^1.9.3", "zen-observable": "^0.8.0" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.2", + "bundled": true, + "requires": { + "tslib": "^1.9.3" + } + } } }, "apollo-link": { @@ -2042,6 +2069,15 @@ "fast-json-stable-stringify": "^2.0.0", "ts-invariant": "^0.3.2", "tslib": "^1.9.3" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.2", + "bundled": true, + "requires": { + "tslib": "^1.9.3" + } + } } }, "append-transform": { @@ -9708,7 +9744,8 @@ "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true + "dev": true, + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -13991,14 +14028,6 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", - "requires": { - "tslib": "^1.9.3" - } - }, "ts-jest": { "version": "23.1.4", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.1.4.tgz", diff --git a/package.json b/package.json index 174b9471734..9a7271676cb 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", - "@types/lodash": "4.14.121", + "@types/lodash": "4.14.122", "@types/node": "10.12.27", "@types/react": "16.8.6", "@types/react-dom": "16.8.2", From 94e0d1ebb894c7d0f93c565cc5e34ea1fad6f001 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Mar 2019 11:07:00 +0000 Subject: [PATCH 136/230] chore(deps): update dependency lint-staged to v8.1.5 --- package-lock.json | 70 +++-------------------------------------------- package.json | 2 +- 2 files changed, 5 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8982402e59..e8371646e2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,68 +68,6 @@ "read-pkg-up": "^3.0.0" } }, - "@iamstarkov/listr-update-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz", - "integrity": "sha512-IJyxQWsYDEkf8C8QthBn5N8tIUR9V9je6j3sMIpAkonaadjbvxmRC6RAhpa3RKxndhNnU2M6iNbtJwd7usQYIA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "@lerna/add": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.1.tgz", @@ -8469,12 +8407,11 @@ } }, "lint-staged": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.4.tgz", - "integrity": "sha512-oFbbhB/VzN8B3i/sIdb9gMfngGArI6jIfxSn+WPdQb2Ni3GJeS6T4j5VriSbQfxfMuYoQlMHOoFt+lfcWV0HfA==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz", + "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==", "dev": true, "requires": { - "@iamstarkov/listr-update-renderer": "0.4.1", "chalk": "^2.3.1", "commander": "^2.14.1", "cosmiconfig": "^5.0.2", @@ -8487,6 +8424,7 @@ "is-glob": "^4.0.0", "is-windows": "^1.0.2", "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", "lodash": "^4.17.11", "log-symbols": "^2.2.0", "micromatch": "^3.1.8", diff --git a/package.json b/package.json index 9a7271676cb..e79c848ece8 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "jest": "23.6.0", "jest-junit": "5.2.0", "lerna": "3.13.1", - "lint-staged": "8.1.4", + "lint-staged": "8.1.5", "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", From 208b4d27851e4e21490f322925b0724090ed7604 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 7 Mar 2019 09:54:14 -0500 Subject: [PATCH 137/230] Adjust wording of disabled local resolvers warning message (#4550) The local resolvers are disabled warning message has been confusing people who want local resolvers disabled (so they want `@client` directives passed through the link chain), but aren't using `apollo-link-state` (they're using other custom links that leverage `@client`). This commit adjust the warning message to remove the mention of `apollo-link-state`, and be explicit about `@client` directives being passed into the link chain. --- packages/apollo-client/src/__tests__/local-state/general.ts | 6 ++++-- packages/apollo-client/src/core/LocalState.ts | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/apollo-client/src/__tests__/local-state/general.ts b/packages/apollo-client/src/__tests__/local-state/general.ts index 8128bfc419a..027d7b162ba 100644 --- a/packages/apollo-client/src/__tests__/local-state/general.ts +++ b/packages/apollo-client/src/__tests__/local-state/general.ts @@ -59,8 +59,10 @@ describe('General functionality', () => { const result = await client.query({ query }); expect(result.data).toEqual({ field: 'local' }); expect(messages).toEqual([ - 'Found @client directives in query but no client resolvers were specified. ' + - 'You can now pass apollo-link-state resolvers to the ApolloClient constructor.', + 'Found @client directives in a query but no ApolloClient resolvers ' + + 'were specified. This means ApolloClient local resolver handling ' + + 'has been disabled, and @client directives will be passed through ' + + 'to your link chain.', ]); } finally { console.warn = warn; diff --git a/packages/apollo-client/src/core/LocalState.ts b/packages/apollo-client/src/core/LocalState.ts index efe94b67c0d..66e483b67c8 100644 --- a/packages/apollo-client/src/core/LocalState.ts +++ b/packages/apollo-client/src/core/LocalState.ts @@ -167,8 +167,10 @@ export class LocalState { return document; } invariant.warn( - 'Found @client directives in query but no client resolvers were specified. ' + - 'You can now pass apollo-link-state resolvers to the ApolloClient constructor.', + 'Found @client directives in a query but no ApolloClient resolvers ' + + 'were specified. This means ApolloClient local resolver handling ' + + 'has been disabled, and @client directives will be passed through ' + + 'to your link chain.', ); } return null; From 8f4b473291ddae7d004d16ced9104f2f3ca924e9 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 7 Mar 2019 10:55:37 -0500 Subject: [PATCH 138/230] Mention { assumeImmutableResults: true } in CHANGELOG.md. Implemented by PR #4543. --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f342b0a78ac..90f7a64cdfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,12 @@ external example apps.
[@hwillson](https://github.com/hwillson) in [#4531](https://github.com/apollographql/apollo-client/pull/4531) +- If you can be sure your application code does not modify cache result objects (see `freezeResults` note below), you can unlock substantial performance improvements by communicating this assumption via + ```ts + new ApolloClient({ assumeImmutableResults: true }) + ``` + which allows the client to avoid taking defensive snapshots of past results using `cloneDeep`, as explained by [@benjamn](https://github.com/benjamn) in [#4543](https://github.com/apollographql/apollo-client/pull/4543). + ### Apollo Cache In-Memory - Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
From 4fe909ae6e96f567c2f615cdf2e57983fd9a6b3e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 Mar 2019 06:24:25 +0000 Subject: [PATCH 139/230] chore(deps): update dependency @octokit/rest to v16.17.0 --- package-lock.json | 30 +++++++++++++++++++----------- package.json | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8371646e2e..da73123bfc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1291,25 +1291,27 @@ "dev": true }, "@octokit/request": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.0.tgz", - "integrity": "sha512-Bm2P0duVRUeKhyepNyFg5GX+yhCK71fqdtpsw5Rz+PQPjSha8HYwPMF5QfpzpD8b6/Xl3xhTgu3V90W362gZ1A==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.1.tgz", + "integrity": "sha512-nN8W24ZXEpJQJoVgMsGZeK9FOzxkc39Xn9ykseUpPpPMNEDFSvqfkCeqqKrjUiXRm72ubGLWG1SOz0aJPcgGww==", "dev": true, "requires": { "@octokit/endpoint": "^3.1.1", + "deprecation": "^1.0.1", "is-plain-object": "^2.0.4", "node-fetch": "^2.3.0", + "once": "^1.4.0", "universal-user-agent": "^2.0.1" } }, "@octokit/rest": { - "version": "16.16.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.16.3.tgz", - "integrity": "sha512-8v5xyqXZwQbQ1WsTLU3G25nAlcKYEgIXzDeqLgTFpbzzJXcey0C8Mcs/LZiAgU8dDINZtO2dAPgd1cVKgK9DQw==", + "version": "16.17.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.17.0.tgz", + "integrity": "sha512-1RB7e4ptR/M+1Ik3Qn84pbppbSadBaCtpgFqgqsXn6s4ZVE6hqW9SOm6UW5yd3KT7ObVfdYUkhMlgR937oKyDw==", "dev": true, "requires": { - "@octokit/request": "2.4.0", - "before-after-hook": "^1.2.0", + "@octokit/request": "2.4.1", + "before-after-hook": "^1.4.0", "btoa-lite": "^1.0.0", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", @@ -2634,9 +2636,9 @@ } }, "before-after-hook": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.2.tgz", - "integrity": "sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.4.0.tgz", + "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", "dev": true }, "benchmark": { @@ -4209,6 +4211,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "deprecation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-1.0.1.tgz", + "integrity": "sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==", + "dev": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", diff --git a/package.json b/package.json index e79c848ece8..6e7e42bb4cd 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@condenast/bundlesize": "0.18.1", - "@octokit/rest": "16.16.3", + "@octokit/rest": "16.17.0", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", From 198d3df61160fff8c947da758c9b3f865399a2e5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 07:47:32 +0000 Subject: [PATCH 140/230] chore(deps): update dependency @types/node to v10.12.30 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index da73123bfc5..4e059eb3c26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1379,9 +1379,9 @@ "dev": true }, "@types/node": { - "version": "10.12.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.27.tgz", - "integrity": "sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==", + "version": "10.12.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.30.tgz", + "integrity": "sha512-nsqTN6zUcm9xtdJiM9OvOJ5EF0kOI8f1Zuug27O/rgtxCRJHGqncSWfCMZUP852dCKPsDsYXGvBhxfRjDBkF5Q==", "dev": true }, "@types/prop-types": { diff --git a/package.json b/package.json index 6e7e42bb4cd..fd4ab183acf 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.122", - "@types/node": "10.12.27", + "@types/node": "10.12.30", "@types/react": "16.8.6", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", From 3ed9e9975a081b1dd2adb127186c6acc8b56afdc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 08:23:43 +0000 Subject: [PATCH 141/230] chore(deps): update dependency @types/react to v16.8.7 --- package-lock.json | 26 +++++++++++++------------- package.json | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e059eb3c26..26f254bd9b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1391,9 +1391,9 @@ "dev": true }, "@types/react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.6.tgz", - "integrity": "sha512-bN9qDjEMltmHrl0PZRI4IF2AbB7V5UlRfG+OOduckVnRQ4VzXVSzy/1eLAh778IEqhTnW0mmgL9yShfinNverA==", + "version": "16.8.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", + "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -3812,9 +3812,9 @@ } }, "csstype": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", - "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz", + "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==", "dev": true }, "currently-unhandled": { @@ -11181,21 +11181,21 @@ } }, "react": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", - "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz", + "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.3" + "scheduler": "^0.13.4" }, "dependencies": { "scheduler": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", - "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", + "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index fd4ab183acf..03cb562b0c1 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.122", "@types/node": "10.12.30", - "@types/react": "16.8.6", + "@types/react": "16.8.7", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", @@ -86,7 +86,7 @@ "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", - "react": "16.8.3", + "react": "16.8.4", "react-dom": "16.8.3", "rollup": "1.2.2", "rollup-plugin-invariant": "0.4.2", From 3d4d8e7638ec634fbf99ec4f980fab3a5c06c305 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 09:24:28 +0000 Subject: [PATCH 142/230] chore(deps): update dependency react-dom to v16.8.4 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 26f254bd9b2..f4a15f2b85b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11205,15 +11205,15 @@ } }, "react-dom": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.3.tgz", - "integrity": "sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA==", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz", + "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.3" + "scheduler": "^0.13.4" } }, "react-is": { @@ -12776,9 +12776,9 @@ "dev": true }, "scheduler": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", - "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", + "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index 03cb562b0c1..55b8a1b09b7 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "pre-commit": "1.2.2", "prettier": "1.16.4", "react": "16.8.4", - "react-dom": "16.8.3", + "react-dom": "16.8.4", "rollup": "1.2.2", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", From d051c8c9a99a1cb1b02d064b9590f14dc263c7d6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 10:22:47 +0000 Subject: [PATCH 143/230] chore(deps): update dependency rollup to v1.6.0 --- package-lock.json | 22 ++++++++++++++-------- package.json | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4a15f2b85b..e4d9f2de709 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11902,20 +11902,26 @@ } }, "rollup": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.2.2.tgz", - "integrity": "sha512-fsn5KJcfSuejjrv8GV7kZNciElqxyzZdUq8rA3e528JsR3ccxrWwoptyUY8GGLlgMFAQMB3dZW8nWF2I1/xrZA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.6.0.tgz", + "integrity": "sha512-qu9iWyuiOxAuBM8cAwLuqPclYdarIpayrkfQB7aTGTiyYPbvx+qVF33sIznfq4bxZCiytQux/FvZieUBAXivCw==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "*", - "acorn": "^6.1.0" + "@types/node": "^11.9.5", + "acorn": "^6.1.1" }, "dependencies": { + "@types/node": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz", + "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==", + "dev": true + }, "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true } } diff --git a/package.json b/package.json index 55b8a1b09b7..261c7b990bf 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "prettier": "1.16.4", "react": "16.8.4", "react-dom": "16.8.4", - "rollup": "1.2.2", + "rollup": "1.6.0", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", From 247b6f0a4abfb6dc68c19683ea0b19bc6311befe Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 11:33:11 +0000 Subject: [PATCH 144/230] chore(deps): update dependency tslint to v5.13.1 --- package-lock.json | 19 ++++++++++--------- package.json | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4d9f2de709..78c1767e12d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2953,6 +2953,12 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -14064,9 +14070,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.1.tgz", + "integrity": "sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -14077,18 +14083,13 @@ "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.27.2" }, "dependencies": { - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", diff --git a/package.json b/package.json index 261c7b990bf..fcc35dc01f3 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "ts-jest": "23.1.4", "tsc-watch": "^2.1.2", "tslib": "1.9.3", - "tslint": "5.12.1", + "tslint": "5.13.1", "typescript": "3.3.3333", "uglify-js": "3.4.9", "webpack": "3.12.0", From ff85d52477a7b3e4c39e22bd6f6516f44ede9733 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 Mar 2019 12:25:14 +0000 Subject: [PATCH 145/230] chore(deps): update dependency webpack-bundle-analyzer to v3.1.0 --- package-lock.json | 21 ++++++++++++++------- package.json | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78c1767e12d..5dc128f83f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14770,12 +14770,13 @@ } }, "webpack-bundle-analyzer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.4.tgz", - "integrity": "sha512-ggDUgtKuQki4vmc93Ej65GlYxeCUR/0THa7gA+iqAGC2FFAxO+r+RM9sAUa8HWdw4gJ3/NZHX/QUcVgRjdIsDg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.1.0.tgz", + "integrity": "sha512-nyDyWEs7C6DZlgvu1pR1zzJfIWSiGPbtaByZr8q+Fd2xp70FuM/8ngCJzj3Er1TYRLSFmp1F1OInbEm4DZH8NA==", "dev": true, "requires": { - "acorn": "^5.7.3", + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -14789,6 +14790,12 @@ "ws": "^6.0.0" }, "dependencies": { + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -14826,9 +14833,9 @@ } }, "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", + "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", "dev": true, "requires": { "async-limiter": "~1.0.0" diff --git a/package.json b/package.json index fcc35dc01f3..79864fed93d 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "typescript": "3.3.3333", "uglify-js": "3.4.9", "webpack": "3.12.0", - "webpack-bundle-analyzer": "3.0.4" + "webpack-bundle-analyzer": "3.1.0" }, "renovate": { "extends": [ From ea564d124f3fa4e0506d927c5deaebd86c248fa1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Mar 2019 06:21:59 +0000 Subject: [PATCH 146/230] chore(deps): update dependency @types/lodash to v4.14.123 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5dc128f83f1..58b18d0e9e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1373,9 +1373,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.122", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.122.tgz", - "integrity": "sha512-9IdED8wU93ty8gP06ninox+42SBSJHp2IAamsSYMUY76mshRTeUsid/gtbl8ovnOwy8im41ib4cxTiIYMXGKew==", + "version": "4.14.123", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", + "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", "dev": true }, "@types/node": { diff --git a/package.json b/package.json index 79864fed93d..d50c61f4fba 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", - "@types/lodash": "4.14.122", + "@types/lodash": "4.14.123", "@types/node": "10.12.30", "@types/react": "16.8.7", "@types/react-dom": "16.8.2", From e3a5b14368afe08722df331f01d496abbed3383f Mon Sep 17 00:00:00 2001 From: Wes Winder Date: Thu, 14 Mar 2019 21:26:07 -0400 Subject: [PATCH 147/230] Fixed small spelling mistake from "specfic" to "specific" (#4583) --- docs/source/advanced/caching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/advanced/caching.md b/docs/source/advanced/caching.md index 342772a9e17..6420c3c3f1a 100644 --- a/docs/source/advanced/caching.md +++ b/docs/source/advanced/caching.md @@ -254,7 +254,7 @@ client.writeQuery({ Here are some common situations where you would need to access the cache directly. If you're manipulating the cache in an interesting way and would like your example to be featured, please send in a pull request!

Bypassing the cache

-Sometimes it makes sense to not use the cache for a specfic operation. This can be done using either the `network-only` or `no-cache` fetchPolicy. The key difference between these two policies is that `network-only` still saves the response to the cache for later use, bypassing the reading and forcing a network request. The `no-cache` policy does not read, nor does it write to the cache with the response. This may be useful for sensitive data like passwords that you don't want to keep in the cache. +Sometimes it makes sense to not use the cache for a specific operation. This can be done using either the `network-only` or `no-cache` fetchPolicy. The key difference between these two policies is that `network-only` still saves the response to the cache for later use, bypassing the reading and forcing a network request. The `no-cache` policy does not read, nor does it write to the cache with the response. This may be useful for sensitive data like passwords that you don't want to keep in the cache.

Updating after a mutation

From d0a9382aa8a748868964ddf3159b4f4f6eae6bd3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Mar 2019 02:27:35 +0000 Subject: [PATCH 148/230] chore(deps): update dependency @types/node to v10.14.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58b18d0e9e3..2e992f3208d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1379,9 +1379,9 @@ "dev": true }, "@types/node": { - "version": "10.12.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.30.tgz", - "integrity": "sha512-nsqTN6zUcm9xtdJiM9OvOJ5EF0kOI8f1Zuug27O/rgtxCRJHGqncSWfCMZUP852dCKPsDsYXGvBhxfRjDBkF5Q==", + "version": "10.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.1.tgz", + "integrity": "sha512-Rymt08vh1GaW4vYB6QP61/5m/CFLGnFZP++bJpWbiNxceNa6RBipDmb413jvtSf/R1gg5a/jQVl2jY4XVRscEA==", "dev": true }, "@types/prop-types": { diff --git a/package.json b/package.json index d50c61f4fba..688c867f988 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.123", - "@types/node": "10.12.30", + "@types/node": "10.14.1", "@types/react": "16.8.7", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", From 8dbeeb574658a7e266b05075a5b46703ae041a11 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Mar 2019 04:26:53 +0000 Subject: [PATCH 149/230] chore(deps): update dependency @types/react to v16.8.8 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e992f3208d..0bc3fc4113f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1391,9 +1391,9 @@ "dev": true }, "@types/react": { - "version": "16.8.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", - "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", + "version": "16.8.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.8.tgz", + "integrity": "sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==", "dev": true, "requires": { "@types/prop-types": "*", diff --git a/package.json b/package.json index 688c867f988..dcb856f9927 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.123", "@types/node": "10.14.1", - "@types/react": "16.8.7", + "@types/react": "16.8.8", "@types/react-dom": "16.8.2", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", From e5bf23d1ed0d6de97a0b7508bacf3ea06e5f4506 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Mar 2019 05:39:39 +0000 Subject: [PATCH 150/230] chore(deps): update dependency tslint to v5.14.0 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0bc3fc4113f..e6fbdc9fb23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14070,9 +14070,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.1.tgz", - "integrity": "sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", + "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -14087,7 +14087,7 @@ "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "tsutils": "^2.29.0" }, "dependencies": { "chalk": { diff --git a/package.json b/package.json index dcb856f9927..750d2b4e87b 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "ts-jest": "23.1.4", "tsc-watch": "^2.1.2", "tslib": "1.9.3", - "tslint": "5.13.1", + "tslint": "5.14.0", "typescript": "3.3.3333", "uglify-js": "3.4.9", "webpack": "3.12.0", From 1eec8fbd29f7b9fa44500d7dc3fc94eb3c07c92d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Mar 2019 14:12:42 +0000 Subject: [PATCH 151/230] chore(deps): update dependency start-server-and-test to v1.7.12 --- docs/package-lock.json | 109 ++++++++++++++++++++++++++--------------- docs/package.json | 2 +- 2 files changed, 71 insertions(+), 40 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 961416fd9c5..4f1e3fffe2e 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -637,6 +637,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -1741,7 +1742,7 @@ }, "event-stream": { "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { @@ -1756,7 +1757,7 @@ "dependencies": { "stream-combiner": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { @@ -2066,7 +2067,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2087,12 +2089,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2107,17 +2111,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2234,7 +2241,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2246,6 +2254,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2260,6 +2269,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2267,12 +2277,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2291,6 +2303,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2371,7 +2384,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2383,6 +2397,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2468,7 +2483,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2504,6 +2520,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2523,6 +2540,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2566,12 +2584,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3532,7 +3552,8 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "hosted-git-info": { "version": "2.7.1", @@ -4406,7 +4427,7 @@ }, "map-stream": { "version": "0.1.0", - "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, @@ -5188,13 +5209,15 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -5213,6 +5236,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5386,6 +5410,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -5398,6 +5423,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -5463,7 +5489,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "optional": true }, "is-glob": { "version": "4.0.0", @@ -5480,6 +5507,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -5489,6 +5517,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -5499,13 +5528,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true }, "micromatch": { "version": "3.1.10", @@ -5926,7 +5957,7 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { @@ -6100,9 +6131,9 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, "pump": { @@ -6421,9 +6452,9 @@ }, "dependencies": { "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -7330,14 +7361,14 @@ } }, "start-server-and-test": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.7.11.tgz", - "integrity": "sha512-651SCOfhPT65Xjhecvx/ZMJs8UOd5VItjjmpYH95aM6Hr4P8N8UIcxEgDhY/aaVmthACH7qFTqs4EA/KHykjtw==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.7.12.tgz", + "integrity": "sha512-ArW/prmdjQ6fwK4IQwVS1drKMZJ9hqK4ZdDh5k9qc+LZfFReYmwr4JjEvJ0lgLtTGQyJJr7xIWqXRKMsyxctvA==", "dev": true, "requires": { "bluebird": "3.5.3", "check-more-types": "2.24.0", - "debug": "3.2.6", + "debug": "4.1.1", "execa": "0.11.0", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", @@ -7364,9 +7395,9 @@ } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -7734,9 +7765,9 @@ }, "dependencies": { "hoek": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.4.tgz", - "integrity": "sha512-9D47elppcwrTx2x9B6TrovxnUtlTBYFcHGgo0+LRA1+YfUkCecT//41ovdh6zbl7whB9Hc2whRO1c6lzPoTgww==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", + "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", "dev": true } } @@ -8171,9 +8202,9 @@ }, "dependencies": { "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", "dev": true } } diff --git a/docs/package.json b/docs/package.json index 41fb7909697..87270ba7cc7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "hexo-versioned-netlify-redirects": "^1.1.0", "meteor-theme-hexo": "2.0.1", "poke-site": "1.3.1", - "start-server-and-test": "1.7.11", + "start-server-and-test": "1.7.12", "typedoc": "0.14.2", "typescript": "3.3.3333" }, From 8c35eb108a2e569adfc1cf20e10998bc7b5266c3 Mon Sep 17 00:00:00 2001 From: dnalborczyk Date: Fri, 15 Mar 2019 14:16:02 -0400 Subject: [PATCH 152/230] Fix local resolver typo in local-state.md (#4587) --- docs/source/essentials/local-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 1faf85d9a38..9e51f5a90ca 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -412,7 +412,7 @@ const client = new ApolloClient({ link: new HttpLink({ uri: 'http://localhost:4000/graphql' }), cache: new InMemoryCache(), resolvers: { - Session: { + Member: { session() { return { __typename: 'Session', From 201f641c46ecfaf49741bc13f213854d73adc231 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Mar 2019 06:22:40 +0000 Subject: [PATCH 153/230] chore(deps): update dependency @octokit/rest to v16.19.0 --- package-lock.json | 24 +++++++++++++----------- package.json | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index e6fbdc9fb23..8a009113c53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1273,9 +1273,9 @@ "dev": true }, "@octokit/endpoint": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.3.tgz", - "integrity": "sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.2.3.tgz", + "integrity": "sha512-yUPCt4vMIOclox13CUxzuKiPJIFo46b/6GhUnUTw5QySczN1L0DtSxgmIZrZV4SAb9EyAqrceoyrWoYVnfF2AA==", "dev": true, "requires": { "deepmerge": "3.2.0", @@ -1291,12 +1291,12 @@ "dev": true }, "@octokit/request": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.1.tgz", - "integrity": "sha512-nN8W24ZXEpJQJoVgMsGZeK9FOzxkc39Xn9ykseUpPpPMNEDFSvqfkCeqqKrjUiXRm72ubGLWG1SOz0aJPcgGww==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.2.tgz", + "integrity": "sha512-lxVlYYvwGbKSHXfbPk5vxEA8w4zHOH1wobado4a9EfsyD3Cbhuhus1w0Ye9Ro0eMubGO8kNy5d+xNFisM3Tvaw==", "dev": true, "requires": { - "@octokit/endpoint": "^3.1.1", + "@octokit/endpoint": "^3.2.0", "deprecation": "^1.0.1", "is-plain-object": "^2.0.4", "node-fetch": "^2.3.0", @@ -1305,18 +1305,20 @@ } }, "@octokit/rest": { - "version": "16.17.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.17.0.tgz", - "integrity": "sha512-1RB7e4ptR/M+1Ik3Qn84pbppbSadBaCtpgFqgqsXn6s4ZVE6hqW9SOm6UW5yd3KT7ObVfdYUkhMlgR937oKyDw==", + "version": "16.19.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.19.0.tgz", + "integrity": "sha512-mUk/GU2LtV95OAM3FnvK7KFFNzUUzEGFldOhWliJnuhwBqxEag1gW85o//L6YphC9wLoTaZQOhCHmQcsCnt2ag==", "dev": true, "requires": { - "@octokit/request": "2.4.1", + "@octokit/request": "2.4.2", "before-after-hook": "^1.4.0", "btoa-lite": "^1.0.0", + "deprecation": "^1.0.1", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", "lodash.uniq": "^4.5.0", "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", "universal-user-agent": "^2.0.0", "url-template": "^2.0.8" } diff --git a/package.json b/package.json index 750d2b4e87b..2a01fba0d79 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@condenast/bundlesize": "0.18.1", - "@octokit/rest": "16.17.0", + "@octokit/rest": "16.19.0", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", From eb41d328cc35cfe826c961cf1d3859514c4ffc0c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Mar 2019 08:34:58 +0000 Subject: [PATCH 154/230] chore(deps): update dependency danger to v7.0.15 --- package-lock.json | 26 +++++++++++++------------- package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a009113c53..ee056a2bb6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3850,9 +3850,9 @@ } }, "danger": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.14.tgz", - "integrity": "sha512-8JoWH5wge25vo0ROSplA+edy2PVk5Ttn7iR7oEq/XwWxp18lHG4B8JuYgMWqp68EcJbJlKxTWQfmANJudmJuiA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.15.tgz", + "integrity": "sha512-A4G3+5/JW19tsB9o+QWlEofRz9WJgzqhlzaCLWBbav8rc9Y2IEAJY6cnervPdeCR1JEjAq/RCXL2TChOCas6Dg==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", @@ -3916,9 +3916,9 @@ "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -8242,9 +8242,9 @@ } }, "jwa": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.0.tgz", - "integrity": "sha512-mt6IHaq0ZZWDBspg0Pheu3r9sVNMEZn+GJe1zcdYyhFcDSclp3J8xEdO4PjZolZ2i8xlaVU1LetHM0nJejYsEw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", @@ -8253,12 +8253,12 @@ } }, "jws": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.1.tgz", - "integrity": "sha512-bGA2omSrFUkd72dhh05bIAN832znP4wOU3lfuXtRBuGTbsmNmDXMQg28f0Vsxaxgk4myF5YkKQpz6qeRpMgX9g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "requires": { - "jwa": "^1.2.0", + "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, diff --git a/package.json b/package.json index 2a01fba0d79..4661c88168e 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.14", + "danger": "7.0.15", "fetch-mock": "7.3.1", "flow-bin": "0.94.0", "graphql": "14.1.1", From 116961cf71b67f612d2ba047f95652747e5975db Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Mar 2019 09:34:22 +0000 Subject: [PATCH 155/230] chore(deps): update dependency flow-bin to v0.95.1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee056a2bb6e..7fb53cae3f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5395,9 +5395,9 @@ } }, "flow-bin": { - "version": "0.94.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.94.0.tgz", - "integrity": "sha512-DYF7r9CJ/AksfmmB4+q+TyLMoeQPRnqtF1Pk7KY3zgfkB/nVuA3nXyzqgsIPIvnMSiFEXQcFK4z+iPxSLckZhQ==", + "version": "0.95.1", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.95.1.tgz", + "integrity": "sha512-06IOC/pqPMNRYtC6AMZEWYR9Fi6UdBC7gImGinPuNUpPZFnP5E9/0cBCl3DWrH4zz/gSM2HdDilU7vPGpYIr2w==", "dev": true }, "flush-write-stream": { diff --git a/package.json b/package.json index 4661c88168e..71489fb1830 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "codecov": "3.2.0", "danger": "7.0.15", "fetch-mock": "7.3.1", - "flow-bin": "0.94.0", + "flow-bin": "0.95.1", "graphql": "14.1.1", "graphql-tag": "2.10.1", "isomorphic-fetch": "2.2.1", From dcaa2aafa24935d22afee9f734cc7b24be4ea2bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 Mar 2019 10:33:24 +0000 Subject: [PATCH 156/230] chore(deps): update dependency uglify-js to v3.4.10 --- package-lock.json | 14 ++++---------- package.json | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7fb53cae3f9..01368107a9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14182,21 +14182,15 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index 71489fb1830..7d24b2813e2 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "tslib": "1.9.3", "tslint": "5.14.0", "typescript": "3.3.3333", - "uglify-js": "3.4.9", + "uglify-js": "3.4.10", "webpack": "3.12.0", "webpack-bundle-analyzer": "3.1.0" }, From a0b1f189c8a024cf09636c317bcf85096858001d Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Tue, 19 Mar 2019 11:05:57 -0400 Subject: [PATCH 157/230] Remove github CODEOWNERS (#4602) Github `CODEOWNERS` functionality sounds great in theory, but the extra noise generated by constantly being assigned for review on PR's is not necessary (we know PR's need to be looked at). We also can't expect community members to always submit `Draft` PR's when their changes are WIP, to help avoid code owner review assignment. Maybe we'll re-enable this in the future, but for now we're dropping it. --- .github/CODEOWNERS | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 173d0b20ffb..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @benjamn @hwillson From 1cb43524a647f9b5acd8dfa32a9a2884ef4f2de2 Mon Sep 17 00:00:00 2001 From: Ranjeet Gautam <45088782+gautamr2@users.noreply.github.com> Date: Wed, 20 Mar 2019 19:21:22 +0530 Subject: [PATCH 158/230] Fix #4417 by making TypeScript treat fixPolyfills.ts as a module (#4606) --- packages/apollo-cache-inmemory/src/fixPolyfills.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/apollo-cache-inmemory/src/fixPolyfills.ts b/packages/apollo-cache-inmemory/src/fixPolyfills.ts index df4fb8a5d8b..98b55ae5419 100644 --- a/packages/apollo-cache-inmemory/src/fixPolyfills.ts +++ b/packages/apollo-cache-inmemory/src/fixPolyfills.ts @@ -49,3 +49,5 @@ try { Object.seal = wrap(Object.seal); Object.preventExtensions = wrap(Object.preventExtensions); } + +export {} From 8ddc85644585cd3af7226ded01feaf0bbbe5206d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Mar 2019 05:29:40 +0000 Subject: [PATCH 159/230] chore(deps): update dependency @octokit/rest to v16.20.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01368107a9a..07f942f4fed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1305,9 +1305,9 @@ } }, "@octokit/rest": { - "version": "16.19.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.19.0.tgz", - "integrity": "sha512-mUk/GU2LtV95OAM3FnvK7KFFNzUUzEGFldOhWliJnuhwBqxEag1gW85o//L6YphC9wLoTaZQOhCHmQcsCnt2ag==", + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.20.0.tgz", + "integrity": "sha512-tN5j64P6QymlMzKo94DG1LRNHCwMnLg5poZlVhsCfkHhEWKpofZ1qBDr2/0w6qDLav4EA1XXMmZdNpvGhc9BDQ==", "dev": true, "requires": { "@octokit/request": "2.4.2", @@ -9263,9 +9263,9 @@ } }, "macos-release": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz", - "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.1.0.tgz", + "integrity": "sha512-8TCbwvN1mfNxbBv0yBtfyIFMo3m1QsNbKHv7PYIp/abRBKVQBXN7ecu3aeGGgT18VC/Tf397LBDGZF9KBGJFFw==", "dev": true }, "make-dir": { diff --git a/package.json b/package.json index 7d24b2813e2..507c3bebbd4 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@condenast/bundlesize": "0.18.1", - "@octokit/rest": "16.19.0", + "@octokit/rest": "16.20.0", "@types/benchmark": "1.0.31", "@types/graphql": "14.0.7", "@types/isomorphic-fetch": "0.0.35", From d563d8feca9ddca6c4c0fd044fc429f2d5edbf37 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Mar 2019 07:31:59 +0000 Subject: [PATCH 160/230] chore(deps): update dependency @types/react-dom to v16.8.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07f942f4fed..961a93354fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1403,9 +1403,9 @@ } }, "@types/react-dom": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.2.tgz", - "integrity": "sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw==", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.3.tgz", + "integrity": "sha512-HF5hD5YR3z9Mn6kXcW1VKe4AQ04ZlZj1EdLBae61hzQ3eEWWxMgNLUbIxeZp40BnSxqY1eAYLsH9QopQcxzScA==", "dev": true, "requires": { "@types/react": "*" diff --git a/package.json b/package.json index 507c3bebbd4..2f12424a7f5 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@types/lodash": "4.14.123", "@types/node": "10.14.1", "@types/react": "16.8.8", - "@types/react-dom": "16.8.2", + "@types/react-dom": "16.8.3", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", From f3fdb4ecae2bad85172dac3391fe10352559a265 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Mar 2019 08:37:12 +0000 Subject: [PATCH 161/230] chore(deps): update dependency rollup to v1.7.0 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 961a93354fc..5c646e5e849 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11910,9 +11910,9 @@ } }, "rollup": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.6.0.tgz", - "integrity": "sha512-qu9iWyuiOxAuBM8cAwLuqPclYdarIpayrkfQB7aTGTiyYPbvx+qVF33sIznfq4bxZCiytQux/FvZieUBAXivCw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.0.tgz", + "integrity": "sha512-hjuWSCgoQsFSTsmsNP4AH1l1kfkFqW82gW00V9nL81Zr3JtnKn3rvxh18jUAAEMb7qNoHj21PR5SqbK2mhBgMg==", "dev": true, "requires": { "@types/estree": "0.0.39", @@ -11921,9 +11921,9 @@ }, "dependencies": { "@types/node": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz", - "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.5.tgz", + "integrity": "sha512-pz6wNe/XwyesgfVX7P6B0hY3TnTAYXk6KSTLdpQfbuq3be+hnMoCuFzE+yLTskPdBwmNiGRL2TAsnF09aRugvQ==", "dev": true }, "acorn": { diff --git a/package.json b/package.json index 2f12424a7f5..7dba9128d23 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "prettier": "1.16.4", "react": "16.8.4", "react-dom": "16.8.4", - "rollup": "1.6.0", + "rollup": "1.7.0", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", From 61639bcf44981a879f20c6196f74a7f7244bfda4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Mar 2019 09:51:14 +0000 Subject: [PATCH 162/230] chore(deps): update dependency typescript to v3.3.4000 --- docs/package-lock.json | 6 +++--- docs/package.json | 2 +- package-lock.json | 6 +++--- package.json | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 4f1e3fffe2e..76c2c1d3ac5 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -7875,9 +7875,9 @@ "dev": true }, "typescript": { - "version": "3.3.3333", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", - "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", + "version": "3.3.4000", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", + "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", "dev": true }, "ua-parser-js": { diff --git a/docs/package.json b/docs/package.json index 87270ba7cc7..acce070930b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,7 +21,7 @@ "poke-site": "1.3.1", "start-server-and-test": "1.7.12", "typedoc": "0.14.2", - "typescript": "3.3.3333" + "typescript": "3.3.4000" }, "scripts": { "start": "npm run build && chexo apollo-hexo-config -- server", diff --git a/package-lock.json b/package-lock.json index 5c646e5e849..568b76418a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14176,9 +14176,9 @@ "dev": true }, "typescript": { - "version": "3.3.3333", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", - "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", + "version": "3.3.4000", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", + "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 7dba9128d23..6ff9c29d2e9 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "tsc-watch": "^2.1.2", "tslib": "1.9.3", "tslint": "5.14.0", - "typescript": "3.3.3333", + "typescript": "3.3.4000", "uglify-js": "3.4.10", "webpack": "3.12.0", "webpack-bundle-analyzer": "3.1.0" From c2b421688c1fdf6d7c3a09a2634a556263d07017 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 23 Mar 2019 05:35:39 +0000 Subject: [PATCH 163/230] chore(deps): update dependency @types/node to v10.14.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 568b76418a3..c0afa869180 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1381,9 +1381,9 @@ "dev": true }, "@types/node": { - "version": "10.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.1.tgz", - "integrity": "sha512-Rymt08vh1GaW4vYB6QP61/5m/CFLGnFZP++bJpWbiNxceNa6RBipDmb413jvtSf/R1gg5a/jQVl2jY4XVRscEA==", + "version": "10.14.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.3.tgz", + "integrity": "sha512-2lhc7S28vo8FwR3Jv3Ifyd77AxEsx+Nl9ajWiac6/eWuvZ84zPK4RE05pfqcn3acIzlZDpQj5F1rIKQZX3ptLQ==", "dev": true }, "@types/prop-types": { diff --git a/package.json b/package.json index 6ff9c29d2e9..ed49c322a6d 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.123", - "@types/node": "10.14.1", + "@types/node": "10.14.3", "@types/react": "16.8.8", "@types/react-dom": "16.8.3", "benchmark": "2.1.4", From 38d99e800547ee75617b8c4863dd0a1b28b7b11b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Mar 2019 08:34:26 +0000 Subject: [PATCH 164/230] chore(deps): update dependency react to v16.8.5 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0afa869180..b42e6cadacd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11189,21 +11189,21 @@ } }, "react": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz", - "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==", + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.5.tgz", + "integrity": "sha512-daCb9TD6FZGvJ3sg8da1tRAtIuw29PbKZW++NN4wqkbEvxL+bZpaaYb4xuftW/SpXmgacf1skXl/ddX6CdOlDw==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.4" + "scheduler": "^0.13.5" }, "dependencies": { "scheduler": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", - "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", + "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index ed49c322a6d..59238c5642a 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", - "react": "16.8.4", + "react": "16.8.5", "react-dom": "16.8.4", "rollup": "1.7.0", "rollup-plugin-invariant": "0.4.2", From 9c0803e03ed0fff593289202e0c3d1fdb3a10e0f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Mar 2019 09:43:51 +0000 Subject: [PATCH 165/230] chore(deps): update dependency react-dom to v16.8.5 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b42e6cadacd..746faea5793 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11213,15 +11213,15 @@ } }, "react-dom": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz", - "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==", + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.5.tgz", + "integrity": "sha512-VIEIvZLpFafsfu4kgmftP5L8j7P1f0YThfVTrANMhZUFMDOsA6e0kfR6wxw/8xxKs4NB59TZYbxNdPCDW34x4w==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.4" + "scheduler": "^0.13.5" } }, "react-is": { @@ -12790,9 +12790,9 @@ "dev": true }, "scheduler": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", - "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", + "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index 59238c5642a..dc985d7936c 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "pre-commit": "1.2.2", "prettier": "1.16.4", "react": "16.8.5", - "react-dom": "16.8.4", + "react-dom": "16.8.5", "rollup": "1.7.0", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", From 744c2d398238b5a4d4ec5f27edc792be3080723a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Mar 2019 10:44:03 +0000 Subject: [PATCH 166/230] chore(deps): update dependency uglify-js to v3.5.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 746faea5793..23da984974c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14182,9 +14182,9 @@ "dev": true }, "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", + "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", "dev": true, "requires": { "commander": "~2.19.0", diff --git a/package.json b/package.json index dc985d7936c..cae7238778c 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "tslib": "1.9.3", "tslint": "5.14.0", "typescript": "3.3.4000", - "uglify-js": "3.4.10", + "uglify-js": "3.5.2", "webpack": "3.12.0", "webpack-bundle-analyzer": "3.1.0" }, From bd156411fd52fbc555014b47c2d25ef8aff1ec9e Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 4 Mar 2019 15:44:06 -0800 Subject: [PATCH 167/230] Move from hexo to gatsby --- docs/.gitignore | 3 +- docs/_config.yml | 71 ------------------------------ docs/gatsby-config.js | 60 +++++++++++++++++++++++++ docs/package.json | 32 +++----------- docs/{public => static}/_redirects | 9 ++++ 5 files changed, 76 insertions(+), 99 deletions(-) delete mode 100644 docs/_config.yml create mode 100644 docs/gatsby-config.js rename docs/{public => static}/_redirects (68%) diff --git a/docs/.gitignore b/docs/.gitignore index 09ea3a62866..4849e0abeeb 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1 +1,2 @@ -_multiconfig.yml +.cache +public diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index b70f14ac7a5..00000000000 --- a/docs/_config.yml +++ /dev/null @@ -1,71 +0,0 @@ -github_repo: apollographql/apollo-client -title: Apollo Client -propertytitle: Using GraphQL with Apollo Client -subtitle: React Guide -description: A guide to using the Apollo GraphQL Client with React. -versions: - - '2.5' - - '2.4' -versioned-netlify-redirects: - netlify_site_id: apollo-client-docs - -content_root: docs/source -public_dir: public/docs/react - -url: https://www.apollographql.com/docs/react/ -root: /docs/react/ - -typescript_api_box: - data_file: docs.json - filepath_prefix: packages/apollo-client/src/ - -# This setting also defines the page order used to generate the -# Previous/Next links at the bottom of each page -sidebar_categories: - # Basics - null: - - index - - why-apollo - - integrations - - react-apollo-migration - Essentials: - - essentials/get-started - - essentials/queries - - essentials/mutations - - essentials/local-state - Features: - - features/error-handling - - features/pagination - - features/optimistic-ui - - features/server-side-rendering - - features/developer-tooling - - features/defer-support - Advanced: - - advanced/boost-migration - - advanced/subscriptions - - advanced/network-layer - - advanced/caching - - advanced/fragments - Recipes: - - recipes/authentication - - recipes/testing - - recipes/static-typing - - recipes/performance - - recipes/react-native - - recipes/babel - - recipes/webpack - - recipes/meteor - - recipes/recompose - - recipes/2.0-migration - API: - - api/apollo-client - - api/react-apollo - -redirects: - /docs/react/essentials/get-started.html#api: docs/react/api/react-apollo.html - /docs/react/essentials/queries.html#api: docs/react/api/react-apollo.html#graphql-query-options - /docs/react/basics/mutations.html#api: docs/react/api/react-apollo.html#graphql-mutation-options - /docs/react/recipes/simple-example.html: docs/react/essentials/get-started.html - /docs/react/api/apollo-client.html#FetchPolicy: docs/react/api/react-apollo.html#graphql-config-options-fetchPolicy - /docs/react/api/apollo-client.html#ErrorPolicy: docs/react/api/react-apollo.html#graphql-config-options-errorPolicy - /docs/react/features/performance.html: /docs/react/recipes/performance.html diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js new file mode 100644 index 00000000000..2dea9075111 --- /dev/null +++ b/docs/gatsby-config.js @@ -0,0 +1,60 @@ +module.exports = { + __experimentalThemes: [ + { + resolve: 'gatsby-theme-apollo-docs', + options: { + root: __dirname, + subtitle: 'Apollo Client', + description: 'A guide to using the Apollo GraphQL Client with React', + contentDir: 'source', + basePath: '/docs/react', + githubRepo: 'apollographql/apollo-client', + sidebarCategories: { + null: [ + 'index', + 'why-apollo', + 'integrations', + 'react-apollo-migration' + ], + Essentials: [ + 'essentials/get-started', + 'essentials/queries', + 'essentials/mutations', + 'essentials/local-state' + ], + Features: [ + 'features/error-handling', + 'features/pagination', + 'features/optimistic-ui', + 'features/server-side-rendering', + 'features/developer-tooling', + 'features/defer-support' + ], + Advanced: [ + 'advanced/boost-migration', + 'advanced/subscriptions', + 'advanced/network-layer', + 'advanced/caching', + 'advanced/fragments' + ], + Recipes: [ + 'recipes/authentication', + 'recipes/testing', + 'recipes/static-typing', + 'recipes/performance', + 'recipes/react-native', + 'recipes/babel', + 'recipes/webpack', + 'recipes/meteor', + 'recipes/recompose', + 'recipes/2.0-migration' + ], + API: [ + 'api/apollo-client', + 'api/react-apollo' + ] + } + } + } + ] +}; diff --git a/docs/package.json b/docs/package.json index acce070930b..7caf71cff65 100644 --- a/docs/package.json +++ b/docs/package.json @@ -2,33 +2,11 @@ "name": "hexo-site", "version": "0.0.0", "private": true, - "hexo": { - "version": "3.8.0" - }, - "devDependencies": { - "apollo-hexo-config": "1.0.8", - "chexo": "1.0.7", - "hexo": "3.8.0", - "hexo-browsersync": "0.3.0", - "hexo-prism-plus": "1.1.0", - "hexo-renderer-ejs": "0.3.1", - "hexo-renderer-less": "0.2.0", - "hexo-renderer-marked": "0.3.2", - "hexo-server": "0.3.3", - "hexo-typescript-api-box": "0.9.2", - "hexo-versioned-netlify-redirects": "^1.1.0", - "meteor-theme-hexo": "2.0.1", - "poke-site": "1.3.1", - "start-server-and-test": "1.7.12", - "typedoc": "0.14.2", - "typescript": "3.3.4000" - }, "scripts": { - "start": "npm run build && chexo apollo-hexo-config -- server", - "types": "cd ../packages/apollo-client && typedoc --json ../../docs/docs.json --ignoreCompilerErrors ./src/index.ts", - "build": "npm run types && chexo apollo-hexo-config -- generate", - "clean": "hexo clean", - "ci": "npm run clean; start-server-and-test start http-get://localhost:4000 test", - "test": "poke http://localhost:4000 --retry https://www.apollographql.com --shallow --method get --skip-images --skip-duplicates" + "start": "gatsby develop" + }, + "dependencies": { + "gatsby": "^2.1.21", + "gatsby-theme-apollo-docs": "0.0.82" } } diff --git a/docs/public/_redirects b/docs/static/_redirects similarity index 68% rename from docs/public/_redirects rename to docs/static/_redirects index 9364e0358e7..a1386478c04 100644 --- a/docs/public/_redirects +++ b/docs/static/_redirects @@ -24,3 +24,12 @@ /docs/react/recipes/prefetching.html /docs/react/features/performance.html#prefetching /docs/react/recipes/server-side-rendering.html /docs/react/features/server-side-rendering.html /docs/react/recipes/fragment-matching.html /docs/react/advanced/fragments.html + +# Ported from old _config.yml +/docs/react/essentials/get-started.html#api docs/react/api/react-apollo.html +/docs/react/essentials/queries.html#api docs/react/api/react-apollo.html#graphql-query-options +/docs/react/basics/mutations.html#api docs/react/api/react-apollo.html#graphql-mutation-options +/docs/react/recipes/simple-example.html docs/react/essentials/get-started.html +/docs/react/api/apollo-client.html#FetchPolicy docs/react/api/react-apollo.html#graphql-config-options-fetchPolicy +/docs/react/api/apollo-client.html#ErrorPolicy docs/react/api/react-apollo.html#graphql-config-options-errorPolicy +/docs/react/features/performance.html /docs/react/recipes/performance.html From c0f24ad79e46c5d84c20b5a772db631ddbb1af14 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 4 Mar 2019 15:47:36 -0800 Subject: [PATCH 168/230] Prettier changes --- docs/gatsby-config.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 2dea9075111..22610eee16b 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -14,13 +14,13 @@ module.exports = { 'index', 'why-apollo', 'integrations', - 'react-apollo-migration' + 'react-apollo-migration', ], Essentials: [ 'essentials/get-started', 'essentials/queries', 'essentials/mutations', - 'essentials/local-state' + 'essentials/local-state', ], Features: [ 'features/error-handling', @@ -28,14 +28,14 @@ module.exports = { 'features/optimistic-ui', 'features/server-side-rendering', 'features/developer-tooling', - 'features/defer-support' + 'features/defer-support', ], Advanced: [ 'advanced/boost-migration', 'advanced/subscriptions', 'advanced/network-layer', 'advanced/caching', - 'advanced/fragments' + 'advanced/fragments', ], Recipes: [ 'recipes/authentication', @@ -47,14 +47,11 @@ module.exports = { 'recipes/webpack', 'recipes/meteor', 'recipes/recompose', - 'recipes/2.0-migration' + 'recipes/2.0-migration', ], - API: [ - 'api/apollo-client', - 'api/react-apollo' - ] - } - } - } - ] + API: ['api/apollo-client', 'api/react-apollo'], + }, + }, + }, + ], }; From 43fcc3c488012e7901f75eeaea13320ca145fed4 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 4 Mar 2019 15:47:50 -0800 Subject: [PATCH 169/230] Prefix paths in development --- docs/package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/package.json b/docs/package.json index 7caf71cff65..ca5dbda0fc4 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,9 +1,6 @@ { - "name": "hexo-site", - "version": "0.0.0", - "private": true, "scripts": { - "start": "gatsby develop" + "start": "gatsby develop --prefix-paths" }, "dependencies": { "gatsby": "^2.1.21", From 78a01fcf03e622db8bed41a4a40821495009ea63 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 4 Mar 2019 16:18:36 -0800 Subject: [PATCH 170/230] Add netlify config --- netlify.toml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 netlify.toml diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 00000000000..94f46e9fd3b --- /dev/null +++ b/netlify.toml @@ -0,0 +1,6 @@ +[build] + base = "docs/" + publish = "docs/public/" + command = "gatsby build --prefix-paths && mkdir -p docs/react && mv public/* docs/react && mv docs public/" +[build.environment] + NPM_VERSION = "6" From 3f2baccf2a5735e9b6001f14fa9d3640f2a594a5 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 5 Mar 2019 13:35:20 -0800 Subject: [PATCH 171/230] Upgrade theme again --- docs/gatsby-config.js | 1 + docs/package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 22610eee16b..186b7150ed9 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -9,6 +9,7 @@ module.exports = { contentDir: 'source', basePath: '/docs/react', githubRepo: 'apollographql/apollo-client', + versions: ['2.4', '2.5'], sidebarCategories: { null: [ 'index', diff --git a/docs/package.json b/docs/package.json index ca5dbda0fc4..744605e2872 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "0.0.82" + "gatsby-theme-apollo-docs": "^0.1.3" } } From 88615b01b160a9e7dc270332299b362da95fb36d Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 7 Mar 2019 14:57:43 -0800 Subject: [PATCH 172/230] Upgrade docs theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 744605e2872..ab6f72eb080 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.1.3" + "gatsby-theme-apollo-docs": "^0.1.21" } } From 487892a48a92209aee2c6114a524517894999cf2 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 7 Mar 2019 16:42:49 -0800 Subject: [PATCH 173/230] Upgrade theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index ab6f72eb080..cf563ba59a7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.1.21" + "gatsby-theme-apollo-docs": "^0.1.24" } } From ef605c1bd0f6607253a11d618d2ebeae662b104d Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 8 Mar 2019 13:33:04 -0800 Subject: [PATCH 174/230] Upgrade theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index cf563ba59a7..174081a082a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.1.24" + "gatsby-theme-apollo-docs": "^0.1.25" } } From 77076623d684a89b9a7e3ec86a4504dd77c40dbe Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 8 Mar 2019 14:20:25 -0800 Subject: [PATCH 175/230] Upgrade theme and update contentDir --- docs/gatsby-config.js | 2 +- docs/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 186b7150ed9..523b9b76f47 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -6,7 +6,7 @@ module.exports = { root: __dirname, subtitle: 'Apollo Client', description: 'A guide to using the Apollo GraphQL Client with React', - contentDir: 'source', + contentDir: 'docs/source', basePath: '/docs/react', githubRepo: 'apollographql/apollo-client', versions: ['2.4', '2.5'], diff --git a/docs/package.json b/docs/package.json index 174081a082a..91f14723a31 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.1.25" + "gatsby-theme-apollo-docs": "^0.2.0" } } From 529196eb31469f662f084a8b141bd28ced6e01ab Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 8 Mar 2019 15:17:04 -0800 Subject: [PATCH 176/230] Upgrade theme to fix images and dangerous markup --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 91f14723a31..ce407c80486 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.0" + "gatsby-theme-apollo-docs": "^0.2.2" } } From 3d5cca52f8a243ebd6fdb70f8cb1f0cbbc22938d Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 8 Mar 2019 15:26:06 -0800 Subject: [PATCH 177/230] Upgrade theme to fix sanitization rules --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index ce407c80486..4ae389f73ce 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.2" + "gatsby-theme-apollo-docs": "^0.2.3" } } From 13159f9d477eb878d77ec8873f756b22ec31fced Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 11 Mar 2019 15:43:28 -0700 Subject: [PATCH 178/230] Upgrade theme to 0.2.5 --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 4ae389f73ce..c3d583f6ec9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.3" + "gatsby-theme-apollo-docs": "^0.2.5" } } From 48fd61e1939355f31ef5c84d21892247cfa4e27c Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 12 Mar 2019 11:55:22 -0700 Subject: [PATCH 179/230] Upgrade theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index c3d583f6ec9..94e1db5a8fd 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.5" + "gatsby-theme-apollo-docs": "^0.2.8" } } From c16c23b97ef9d5efdd790855c3dcb51295fe0246 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 12 Mar 2019 13:40:54 -0700 Subject: [PATCH 180/230] Upgrade theme for new mobile styles --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 94e1db5a8fd..c9830acd4cf 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.8" + "gatsby-theme-apollo-docs": "^0.2.9" } } From 1915edaddc38c022573bfe0791469e7aabd8cdef Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 12 Mar 2019 16:30:06 -0700 Subject: [PATCH 181/230] Upgrade theme for nav select fixes --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index c9830acd4cf..cff14cb716b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,6 +4,6 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.9" + "gatsby-theme-apollo-docs": "^0.2.11" } } From 0da2b1ea684753271845465986a1b00487c34dda Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 13 Mar 2019 16:31:29 -0700 Subject: [PATCH 182/230] Generate types before build --- .gitignore | 1 - docs/gatsby-config.js | 3 ++- docs/package.json | 9 +++++++-- netlify.toml | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 3f0ad0fdb36..a19fb5a15e0 100644 --- a/.gitignore +++ b/.gitignore @@ -51,7 +51,6 @@ db.json docs.json *.log docs/public/* -!docs/public/_redirects .idea/ junit.xml diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 523b9b76f47..6088db321aa 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -4,6 +4,7 @@ module.exports = { resolve: 'gatsby-theme-apollo-docs', options: { root: __dirname, + docs: require('./docs.json'), subtitle: 'Apollo Client', description: 'A guide to using the Apollo GraphQL Client with React', contentDir: 'docs/source', @@ -54,5 +55,5 @@ module.exports = { }, }, }, - ], + ] }; diff --git a/docs/package.json b/docs/package.json index cff14cb716b..7b0b299c7d5 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,9 +1,14 @@ { "scripts": { - "start": "gatsby develop --prefix-paths" + "start": "gatsby develop --prefix-paths", + "types": "cd ../packages/apollo-client && typedoc --json ../../docs/docs.json --ignoreCompilerErrors ./src/index.ts" }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.11" + "gatsby-theme-apollo-docs": "^0.2.14" + }, + "devDependencies": { + "typedoc": "^0.14.2", + "typescript": "^3.3.3333" } } diff --git a/netlify.toml b/netlify.toml index 94f46e9fd3b..7809aa2c45c 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,6 @@ [build] base = "docs/" publish = "docs/public/" - command = "gatsby build --prefix-paths && mkdir -p docs/react && mv public/* docs/react && mv docs public/" + command = "npm run types && gatsby build --prefix-paths && mkdir -p docs/react && mv public/* docs/react && mv docs public/" [build.environment] NPM_VERSION = "6" From 80f94e40e79a06ff56e9d1136bc249f6a64ac640 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 13 Mar 2019 16:31:49 -0700 Subject: [PATCH 183/230] Prettier change --- docs/gatsby-config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 6088db321aa..1ed0871580d 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -55,5 +55,5 @@ module.exports = { }, }, }, - ] + ], }; From e3e79107a94e39aa6c47151b9b76f6a4edaf3b02 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 13 Mar 2019 18:51:58 -0700 Subject: [PATCH 184/230] upgrade theme for tsapibox markdown formatting --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 7b0b299c7d5..d19c0abee21 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.14" + "gatsby-theme-apollo-docs": "^0.2.16" }, "devDependencies": { "typedoc": "^0.14.2", From 73fa212e0e429923509671aa063ead18a79ed58b Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 15 Mar 2019 14:42:12 -0700 Subject: [PATCH 185/230] Upgrade theme to fix tsdoc filepaths and delete hexo files --- docs/assets/theme-colors.less | 1 - docs/gatsby-config.js | 3 +++ docs/package.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) delete mode 100644 docs/assets/theme-colors.less diff --git a/docs/assets/theme-colors.less b/docs/assets/theme-colors.less deleted file mode 100644 index 9ec5223f237..00000000000 --- a/docs/assets/theme-colors.less +++ /dev/null @@ -1 +0,0 @@ -@color-primary: #22A699; diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 1ed0871580d..2a6d8ec5fea 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -11,6 +11,9 @@ module.exports = { basePath: '/docs/react', githubRepo: 'apollographql/apollo-client', versions: ['2.4', '2.5'], + typescriptApiBox: { + filepathPrefix: 'packages/apollo-client/src/' + }, sidebarCategories: { null: [ 'index', diff --git a/docs/package.json b/docs/package.json index d19c0abee21..4ee8622daec 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.16" + "gatsby-theme-apollo-docs": "^0.2.24" }, "devDependencies": { "typedoc": "^0.14.2", From 60ff61d608ac3844cc82049cf242ab3cdae07682 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 18 Mar 2019 12:07:25 -0700 Subject: [PATCH 186/230] Add tsapibox options and page nav --- docs/gatsby-config.js | 2 +- docs/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gatsby-config.js b/docs/gatsby-config.js index 2a6d8ec5fea..8ad51f2c3d5 100644 --- a/docs/gatsby-config.js +++ b/docs/gatsby-config.js @@ -12,7 +12,7 @@ module.exports = { githubRepo: 'apollographql/apollo-client', versions: ['2.4', '2.5'], typescriptApiBox: { - filepathPrefix: 'packages/apollo-client/src/' + filepathPrefix: 'packages/apollo-client/src/', }, sidebarCategories: { null: [ diff --git a/docs/package.json b/docs/package.json index 4ee8622daec..62a836b0d06 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.24" + "gatsby-theme-apollo-docs": "^0.2.27" }, "devDependencies": { "typedoc": "^0.14.2", From cde79a7ddaf7d085c87f79f5228b38aab5053bc8 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 18 Mar 2019 13:09:34 -0700 Subject: [PATCH 187/230] Upgrade theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 62a836b0d06..5418665e611 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.27" + "gatsby-theme-apollo-docs": "^0.2.28" }, "devDependencies": { "typedoc": "^0.14.2", From 22ddb68e6ad1201227f3746951cf86da8df66b90 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 20 Mar 2019 12:08:25 -0700 Subject: [PATCH 188/230] Upgrade theme --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 5418665e611..8fc31075a30 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.28" + "gatsby-theme-apollo-docs": "^0.2.30" }, "devDependencies": { "typedoc": "^0.14.2", From bc271e76a63b540aa78b4a3d410655444017c6ff Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 21 Mar 2019 16:49:37 -0700 Subject: [PATCH 189/230] Upgrade theme --- docs/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/package.json b/docs/package.json index 8fc31075a30..2732a22c396 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,8 +4,8 @@ "types": "cd ../packages/apollo-client && typedoc --json ../../docs/docs.json --ignoreCompilerErrors ./src/index.ts" }, "dependencies": { - "gatsby": "^2.1.21", - "gatsby-theme-apollo-docs": "^0.2.30" + "gatsby": "^2.2.6", + "gatsby-theme-apollo-docs": "^0.2.34" }, "devDependencies": { "typedoc": "^0.14.2", From 0c2bb88d2a520b070d70b15b7b1dcc50c6b210af Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 25 Mar 2019 14:59:08 -0700 Subject: [PATCH 190/230] Upgrade theme and other deps --- docs/package-lock.json | 18957 +++++++++++++++++++++++++-------------- docs/package.json | 4 +- package-lock.json | 41 +- 3 files changed, 12125 insertions(+), 6877 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 76c2c1d3ac5..577c3f528e2 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1,8361 +1,13590 @@ { - "name": "hexo-site", - "version": "0.0.0", - "lockfileVersion": 1, "requires": true, + "lockfileVersion": 1, "dependencies": { - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", - "dev": true + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.0.tgz", + "integrity": "sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.0", + "@babel/helpers": "^7.4.0", + "@babel/parser": "^7.4.0", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } + } }, - "@types/fs-extra": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", - "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", - "dev": true, + "@babel/generator": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", + "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", "requires": { - "@types/node": "*" + "@babel/types": "^7.4.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } } }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" + "@babel/types": "^7.0.0" } }, - "@types/handlebars": { - "version": "4.0.40", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.40.tgz", - "integrity": "sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w==", - "dev": true - }, - "@types/highlight.js": { - "version": "9.12.3", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", - "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.119", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", - "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==", - "dev": true - }, - "@types/marked": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz", - "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==", - "dev": true + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "requires": { + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" + } }, - "@types/node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.0.tgz", - "integrity": "sha512-dmYIvoQEZWnyQfgrwPCoxztv/93NYQGEiOoQhuI56rJahv9de6Q2apZl3bufV46YJ0OAXdaktIuw4RIRl4DTeA==", - "dev": true + "@babel/helper-call-delegate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", + "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" + } }, - "@types/shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-1lQw+48BuVgp6c1+z8EMipp18IdnV2dLh6KQGwOm+kJy9nPjEkaqRKmwbDNEYf//EKBvKcwOC6V2cDrNxVoQeQ==", - "dev": true, + "@babel/helper-create-class-features-plugin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz", + "integrity": "sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw==", "requires": { - "@types/glob": "*", - "@types/node": "*" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0" } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, + "@babel/helper-define-map": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", + "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.4.0", + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } } }, - "a-sync-waterfall": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", - "dev": true + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "@babel/types": "^7.0.0" } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true + "@babel/helper-hoist-variables": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", + "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", + "requires": { + "@babel/types": "^7.4.0" + } }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "@babel/types": "^7.0.0" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "@babel/types": "^7.0.0" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.2.2", + "@babel/types": "^7.2.2", + "lodash": "^4.17.10" + } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "requires": { + "@babel/types": "^7.0.0" + } }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "lodash": "^4.17.10" } }, - "apollo-hexo-config": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/apollo-hexo-config/-/apollo-hexo-config-1.0.8.tgz", - "integrity": "sha512-YEAjUt/w9LFIX3kQtB4O0732d64ZZcmuwHiaV2r993oWlIjF4VXcumhE/oS0H5O+OSUFZGbFSk+UU7E9SdUx3w==", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true + "@babel/helper-replace-supers": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", + "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" + } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "requires": { - "sprintf-js": "~1.0.2" + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, + "@babel/helper-split-export-declaration": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", + "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", "requires": { - "arr-flatten": "^1.0.1" + "@babel/types": "^7.4.0" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "@babel/helpers": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.2.tgz", + "integrity": "sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg==", + "requires": { + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" + } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true + "@babel/parser": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", + "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==" }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, + "@babel/plugin-proposal-class-properties": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz", + "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==", "requires": { - "safer-buffer": "~2.1.0" + "@babel/helper-create-class-features-plugin": "^7.4.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz", + "integrity": "sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } }, - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", + "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.5.4" + } }, - "async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", - "dev": true + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "@babel/plugin-syntax-class-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", + "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "@babel/plugin-syntax-flow": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", + "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "axios": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", - "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", - "dev": true, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "requires": { - "follow-redirects": "^1.2.5", - "is-buffer": "^1.1.5" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "dev": true, + "@babel/plugin-transform-async-to-generator": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", + "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, + "@babel/plugin-transform-block-scoping": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", + "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.11" }, "dependencies": { - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" } } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, + "@babel/plugin-transform-classes": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz", + "integrity": "sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg==", "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.4.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0", + "globals": "^11.1.0" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, + "@babel/plugin-transform-destructuring": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz", + "integrity": "sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ==", "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "@babel/plugin-transform-dotall-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", + "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "@babel/plugin-transform-duplicate-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", + "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz", + "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0" } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true + "@babel/plugin-transform-for-of": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz", + "integrity": "sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "dev": true, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "requires": { - "safe-buffer": "5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, + "@babel/plugin-transform-modules-amd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", + "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", "requires": { - "tweetnacl": "^0.14.3" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz", + "integrity": "sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw==", "requires": { - "callsite": "1.0.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" } }, - "bhttp": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bhttp/-/bhttp-1.2.4.tgz", - "integrity": "sha1-/tDCT3ZbNa/ElAsIqzIUgT44848=", - "dev": true, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", + "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", "requires": { - "bluebird": "^2.8.2", - "concat-stream": "^1.4.7", - "debug": "^2.1.1", - "dev-null": "^0.1.1", - "errors": "^0.2.0", - "extend": "^2.0.0", - "form-data2": "^1.0.0", - "form-fix-array": "^1.0.0", - "lodash": "^2.4.1", - "stream-length": "^1.0.2", - "string": "^3.0.0", - "through2-sink": "^1.0.0", - "through2-spy": "^1.2.0", - "tough-cookie": "^2.3.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "extend": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz", - "integrity": "sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } + "@babel/helper-hoist-variables": "^7.4.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz", + "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==", + "requires": { + "regexp-tree": "^0.1.0" + } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true + "@babel/plugin-transform-new-target": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", + "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" + } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "optional": true, + "@babel/plugin-transform-parameters": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz", + "integrity": "sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA==", "requires": { - "hoek": "2.x.x" + "@babel/helper-call-delegate": "^7.4.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", + "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "broken-link-checker": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/broken-link-checker/-/broken-link-checker-0.7.8.tgz", - "integrity": "sha512-/zH4/nLMNKDeDH5nVuf/R6WYd0Yjnar1NpcdAO2+VlwjGKzJa6y42C03UO+imBSHwe6BefSkVi82fImE2Rb7yg==", - "dev": true, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", "requires": { - "bhttp": "^1.2.1", - "calmcard": "~0.1.1", - "chalk": "^1.1.3", - "char-spinner": "^1.0.1", - "condense-whitespace": "^1.0.0", - "default-user-agent": "^1.0.0", - "errno": "~0.1.4", - "extend": "^3.0.0", - "http-equiv-refresh": "^1.0.0", - "humanize-duration": "^3.9.1", - "is-stream": "^1.0.1", - "is-string": "^1.0.4", - "limited-request-queue": "^2.0.0", - "link-types": "^1.1.0", - "maybe-callback": "^2.1.0", - "nopter": "~0.3.0", - "parse5": "^3.0.2", - "robot-directives": "~0.3.0", - "robots-txt-guard": "~0.1.0", - "robots-txt-parse": "~0.0.4", - "urlcache": "~0.7.0", - "urlobj": "0.0.11" - }, - "dependencies": { - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "browser-fingerprint": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz", - "integrity": "sha1-jfPNyiW/fVs1QtYVRdcwBT/OYEo=", - "dev": true + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } }, - "browser-sync": { - "version": "2.24.7", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.7.tgz", - "integrity": "sha512-NqXek0cPNEayQm77VGnD+qrwcVBTKMIQ9bdP6IWDRUTU1Bk7tZeq5QR3OG5Rr36Rao1t+Vx1QnfolHvvr5qsTA==", - "dev": true, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", "requires": { - "browser-sync-ui": "v1.0.1", - "bs-recipes": "1.3.4", - "chokidar": "1.7.0", - "connect": "3.6.6", - "connect-history-api-fallback": "^1.5.0", - "dev-ip": "^1.0.1", - "easy-extender": "^2.3.4", - "eazy-logger": "3.0.2", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "1.15.2", - "immutable": "3.8.2", - "localtunnel": "1.9.0", - "micromatch": "2.3.11", - "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "2.1.1", - "ua-parser-js": "0.7.17", - "yargs": "6.4.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true - }, - "yargs": { - "version": "6.4.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.1.0" - } - } + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "browser-sync-ui": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", - "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", - "dev": true, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", "requires": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "^1.1.0", - "immutable": "^3.7.6", - "server-destroy": "1.0.1", - "socket.io-client": "2.0.4", - "stream-throttle": "^0.1.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", - "dev": true + "@babel/plugin-transform-regenerator": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz", + "integrity": "sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw==", + "requires": { + "regenerator-transform": "^0.13.4" + } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "@babel/plugin-transform-runtime": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.0.tgz", + "integrity": "sha512-1uv2h9wnRj98XX3g0l4q+O3jFM6HfayKup7aIu4pnnlzGz0H+cYckGBC74FZIWJXJSXAmeJ9Yu5Gg2RQpS4hWg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", "requires": { - "callsites": "^0.2.0" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "calmcard": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/calmcard/-/calmcard-0.1.1.tgz", - "integrity": "sha1-NawrZkkrDtOa0GqJOg/25hEk5Ek=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "@babel/polyfill": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.0.tgz", + "integrity": "sha512-bVsjsrtsDflIHp5I6caaAa2V25Kzn50HKPL6g3X0P0ni1ks+58cPB8Mz6AOKVuRPgaVdq/OwEUc/1vKqX+Mo4A==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/preset-env": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.2.tgz", + "integrity": "sha512-OEz6VOZaI9LW08CWVS3d9g/0jZA6YCn1gsKIy/fut7yZCJti5Lm1/Hi+uo/U+ODm7g4I6gULrCP+/+laT8xAsA==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.4.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.4.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.4.0", + "@babel/plugin-transform-classes": "^7.4.0", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.4.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.4.0", + "@babel/plugin-transform-modules-systemjs": "^7.4.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", + "@babel/plugin-transform-new-target": "^7.4.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.4.0", + "@babel/plugin-transform-regenerator": "^7.4.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "@babel/types": "^7.4.0", + "browserslist": "^4.4.2", + "core-js-compat": "^3.0.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", + "requires": { + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" + } + } } }, - "char-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz", - "integrity": "sha1-5upnvSR+EHESmDt6sEee02KAAIE=", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", - "dev": true - }, - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dev": true, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - } - }, - "chexo": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/chexo/-/chexo-1.0.7.tgz", - "integrity": "sha512-7ScGKzHsZDLpCZhzIypwbK+hkx1fkWZjeLemEkmnreThGLNWhLRDC4gJ/Wu04jAbH0zYR/ev0QPAACEnaYXrcA==", - "dev": true, + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/runtime": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.2.tgz", + "integrity": "sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA==", "requires": { - "hexo-cli": "^1.1.0", - "minimist": "^1.2.0" + "regenerator-runtime": "^0.13.2" } }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, + "@babel/template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", + "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.0", + "@babel/types": "^7.4.0" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, + "@babel/traverse": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.0.tgz", + "integrity": "sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==", "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.0", + "@babel/parser": "^7.4.0", + "@babel/types": "^7.4.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "is-descriptor": "^0.1.0" + "ms": "^2.1.1" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" } } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, + "@babel/types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", + "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", "requires": { - "restore-cursor": "^2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } } }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, + "@emotion/babel-plugin-jsx-pragmatic": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin-jsx-pragmatic/-/babel-plugin-jsx-pragmatic-0.1.2.tgz", + "integrity": "sha512-BapTL0I1flAB+qrfOmltOdLORBtz8dvtKjcHZmYYWdiGsn+2bZxaZDra+S0jDLd1tnhvPvhHoGv3140WR8PAow==", "requires": { - "colors": "1.0.3" + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "cli-truncate": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-1.1.0.tgz", - "integrity": "sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA==", - "dev": true, + "@emotion/babel-preset-css-prop": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@emotion/babel-preset-css-prop/-/babel-preset-css-prop-10.0.9.tgz", + "integrity": "sha512-fETOWFEe734RlJZTuq6+NeHTzl+Kge4yRm3yrQC+Y2I+KxZjYiU5XUPdbylr0EATbkSzFXgVGKppciZfA5j1mw==", "requires": { - "slice-ansi": "^1.0.0", - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "@babel/plugin-transform-react-jsx": "^7.1.6", + "@emotion/babel-plugin-jsx-pragmatic": "^0.1.2", + "babel-plugin-emotion": "^10.0.9", + "object-assign": "^4.1.1" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, + "@emotion/cache": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.9.tgz", + "integrity": "sha512-f7MblpE2xoimC4fCMZ9pivmsIn7hyWRIvY75owMDi8pdOSeh+w5tH3r4hBJv/LLrwiMM7cTQURqTPcYoL5pWnw==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "@emotion/sheet": "0.9.2", + "@emotion/stylis": "0.8.3", + "@emotion/utils": "0.11.1", + "@emotion/weak-memoize": "0.2.2" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "@emotion/core": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.10.tgz", + "integrity": "sha512-U1aE2cOWUscjc8ZJ3Cx32udOzLeRoJwGxBH93xQD850oQFpwPKZARzdUtdc9SByUOwzSFYxhDhrpXnV34FJmWg==", + "requires": { + "@emotion/cache": "^10.0.9", + "@emotion/css": "^10.0.9", + "@emotion/serialize": "^0.11.6", + "@emotion/sheet": "0.9.2", + "@emotion/utils": "0.11.1" + } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "@emotion/css": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.9.tgz", + "integrity": "sha512-jtHhUSWw+L7yxYgNtC+KJ3Ory90/jiAtpG1qT+gTQQ/RR5AMiigs9/lDHu/vnwljaq2S48FoKb/FZZMlJcC4bw==", + "requires": { + "@emotion/serialize": "^0.11.6", + "@emotion/utils": "0.11.1", + "babel-plugin-emotion": "^10.0.9" + } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "@emotion/hash": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.1.tgz", + "integrity": "sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA==" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, + "@emotion/is-prop-valid": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz", + "integrity": "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "@emotion/memoize": "0.7.1" } }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, + "@emotion/memoize": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz", + "integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==" + }, + "@emotion/serialize": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.6.tgz", + "integrity": "sha512-n4zVv2qGLmspF99jaEUwnMV0fnEGsyUMsC/8KZKUSUTZMYljHE+j+B6rSD8PIFtaUIhHaxCG2JawN6L+OgLN0Q==", "requires": { - "color-name": "1.1.1" + "@emotion/hash": "0.7.1", + "@emotion/memoize": "0.7.1", + "@emotion/unitless": "0.7.3", + "@emotion/utils": "0.11.1", + "csstype": "^2.5.7" } }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true + "@emotion/sheet": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.2.tgz", + "integrity": "sha512-pVBLzIbC/QCHDKJF2E82V2H/W/B004mDFQZiyo/MSR+VC4pV5JLG0TF/zgQDFvP3fZL/5RTPGEmXlYJBMUuJ+A==" }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, + "@emotion/styled": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.10.tgz", + "integrity": "sha512-k4p5WxwYJUVYKBlwOmfpqxeSwdPHqUycLHJY9ftleEvMfphYLB8lt9oPEkEty5XH4URh/wyUfZ2wW2ojrHODWA==", "requires": { - "delayed-stream": "~1.0.0" + "@emotion/styled-base": "^10.0.10", + "babel-plugin-emotion": "^10.0.9" } }, - "combined-stream2": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/combined-stream2/-/combined-stream2-1.1.2.tgz", - "integrity": "sha1-9uFLegFWZvjHsKH6xQYkAWSsNXA=", - "dev": true, + "@emotion/styled-base": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.10.tgz", + "integrity": "sha512-uZwKrBfcH7jCRAQi5ZxsEGIZ+1Zr9/lof4TMsIolC0LSwpnWkQ+JRJLy+p4ZyATee9SdmyCV0sG/VTngVSnrpA==", "requires": { - "bluebird": "^2.8.1", - "debug": "^2.1.1", - "stream-length": "^1.0.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - } + "@emotion/is-prop-valid": "0.7.3", + "@emotion/serialize": "^0.11.6", + "@emotion/utils": "0.11.1", + "object-assign": "^4.1.1" } }, - "command-exists": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.7.tgz", - "integrity": "sha512-doWDvhXCcW5LK0cIUWrOQ8oMFXJv3lEQCkJpGVjM8v9SV0uhqYXB943538tEA2CiaWqSyuYUGAm5ezDwEx9xlw==", - "dev": true - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true + "@emotion/stylis": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.3.tgz", + "integrity": "sha512-M3nMfJ6ndJMYloSIbYEBq6G3eqoYD41BpDOxreE8j0cb4fzz/5qvmqU9Mb2hzsXcCnIlGlWhS03PCzVGvTAe0Q==" }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "@emotion/unitless": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.3.tgz", + "integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg==" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true + "@emotion/utils": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.1.tgz", + "integrity": "sha512-8M3VN0hetwhsJ8dH8VkVy7xo5/1VoBsDOk/T4SJOeXwTO1c4uIqVNx2qyecLFnnUWD5vvUqHQ1gASSeUN6zcTg==" }, - "compressible": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", - "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", - "dev": true, + "@emotion/weak-memoize": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz", + "integrity": "sha512-n/VQ4mbfr81aqkx/XmVicOLjviMuy02eenSdJY33SVA7S2J42EU0P1H0mOogfYedb3wXA0d/LVtBrgTSm04WEA==" + }, + "@gatsbyjs/relay-compiler": { + "version": "2.0.0-printer-fix.2", + "resolved": "https://registry.npmjs.org/@gatsbyjs/relay-compiler/-/relay-compiler-2.0.0-printer-fix.2.tgz", + "integrity": "sha512-7GeCCEQ7O15lMTT/SXy9HuRde4cv5vs465ZnLK2QCajSDLior+20yrMqHn1PGsJYK6nNZH7p3lw9qTCpqmuc7Q==", + "requires": { + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.1.2", + "chalk": "^2.4.1", + "fast-glob": "^2.2.2", + "fb-watchman": "^2.0.0", + "fbjs": "^1.0.0", + "immutable": "~3.7.6", + "nullthrows": "^1.1.0", + "relay-runtime": "2.0.0", + "signedsource": "^1.0.0", + "yargs": "^9.0.0" + } + }, + "@mapbox/hast-util-table-cell-style": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.1.3.tgz", + "integrity": "sha512-QsEsh5YaDvHoMQ2YHdvZy2iDnU3GgKVBTcHf6cILyoWDZtPSdlG444pL/ioPYO/GpXSfODBb9sefEetfC4v9oA==", "requires": { - "mime-db": ">= 1.34.0 < 2" + "unist-util-visit": "^1.3.0" } }, - "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "dev": true, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.14", - "debug": "2.6.9", - "on-headers": "~1.0.1", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, + "@pieh/friendly-errors-webpack-plugin": { + "version": "1.7.0-chalk-2", + "resolved": "https://registry.npmjs.org/@pieh/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0-chalk-2.tgz", + "integrity": "sha512-65+vYGuDkHBCWWjqzzR/Ck318+d6yTI00EqII9qe3aPD1J3Olhvw0X38uM5moQb1PK/ksDXwSoPGt/5QhCiotw==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "chalk": "^2.4.2", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0", + "strip-ansi": "^3" } }, - "condense-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/condense-whitespace/-/condense-whitespace-1.0.0.tgz", - "integrity": "sha1-g3bZjvAo5sss0kaOKM5CxcZasak=", - "dev": true - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, + "@reach/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.2.1.tgz", + "integrity": "sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ==", "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" + "create-react-context": "^0.2.1", + "invariant": "^2.2.3", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "warning": "^3.0.0" } }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz", + "integrity": "sha512-PDvHV2WhSGCSExp+eIMEKxYd1Q0SBvXLb4gAOXbdh0dswHFFgXWzxGjCmx5aln4qGrhkuN81khzYzR/44DYaMA==" }, - "connect-injector": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/connect-injector/-/connect-injector-0.4.4.tgz", - "integrity": "sha1-qBlZwx7PXKoPPcwyXCjtkLgwqpA=", - "dev": true, - "requires": { - "debug": "^2.0.0", - "q": "^1.0.1", - "stream-buffers": "^0.2.3", - "uberproto": "^1.1.0" - } + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz", + "integrity": "sha512-fpG7AzzJxz1tc8ITYS1jCAt1cq4ydK2R+sx//BMTJgvOjfk91M5GiqFolP8aYTzLcum92IGNAVFS3zEcucOQEA==" }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz", + "integrity": "sha512-nBGVl6LzXTdk1c6w3rMWcjq3mYGz+syWc5b3CdqAiEeY/nswYDoW/cnGUKKC8ofD6/LaG+G/IUnfv3jKoHz43A==" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz", + "integrity": "sha512-ejQqpTfORy6TT5w1x/2IQkscgfbtNFjitcFDu63GRz7qfhVTYhMdiJvJ1+Aw9hmv9bO4tXThGQDr1IF5lIvgew==" }, - "core-decorators": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.11.2.tgz", - "integrity": "sha1-GyQzFZQa598a8938tX3+6mPIsXE=", - "dev": true + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz", + "integrity": "sha512-OE6GT9WRKWqd0Dk6NJ5TYXTF5OxAyn74+c/D+gTLbCXnK2A0luEXuwMbe5zR5Px4A/jow2OeEBboTENl4vtuQg==" }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz", + "integrity": "sha512-QeDRGHXfjYEBTXxV0TsjWmepsL9Up5BOOlMFD557x2JrSiVGUn2myNxHIrHiVW0+nnWnaDcrkjg/jUvbJ5nKCg==" }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz", + "integrity": "sha512-c6eE6ovs14k6dmHKoy26h7iRFhjWNnwYVrDWIPfouVm/gcLIeMw/ME4i91O5LEfaDHs6kTRCcVpbAVbNULZOtw==" }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, + "@svgr/babel-plugin-transform-svg-component": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz", + "integrity": "sha512-uulxdx2p3nrM2BkrtADQHK8IhEzCxdUILfC/ddvFC8tlFWuKiA3ych8C6q0ulyQHq34/3hzz+3rmUbhWF9redg==" + }, + "@svgr/babel-preset": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.1.0.tgz", + "integrity": "sha512-Nat5aJ3VO3LE8KfMyIbd3sGWnaWPiFCeWIdEV+lalga0To/tpmzsnPDdnrR9fNYhvSSLJbwhU/lrLYt9wXY0ZQ==", "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "@svgr/babel-plugin-add-jsx-attribute": "^4.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.0.3", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^4.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.0.0", + "@svgr/babel-plugin-transform-svg-component": "^4.1.0" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, + "@svgr/core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.1.0.tgz", + "integrity": "sha512-ahv3lvOKuUAcs0KbQ4Jr5fT5pGHhye4ew8jZVS4lw8IQdWrbG/o3rkpgxCPREBk7PShmEoGQpteeXVwp2yExuQ==", "requires": { - "boom": "2.x.x" + "@svgr/plugin-jsx": "^4.1.0", + "camelcase": "^5.0.0", + "cosmiconfig": "^5.0.7" + }, + "dependencies": { + "camelcase": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" + } } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, + "@svgr/hast-util-to-babel-ast": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz", + "integrity": "sha512-tdkEZHmigYYiVhIEzycAMKN5aUSpddUnjr6v7bPwaNTFuSyqGUrpCg1JlIGi7PUaaJVHbn6whGQMGUpKOwT5nw==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "@babel/types": "^7.1.6" } }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cuid": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz", - "integrity": "sha1-S4deCWm612T37AcGz0T1+wgx9rc=", - "dev": true, + "@svgr/plugin-jsx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz", + "integrity": "sha512-xwu+9TGziuN7cu7p+vhCw2EJIfv8iDNMzn2dR0C7fBYc8q+SRtYTcg4Uyn8ZWh6DM+IZOlVrS02VEMT0FQzXSA==", "requires": { - "browser-fingerprint": "0.0.1", - "core-js": "^1.1.1", - "node-fingerprint": "0.0.2" + "@babel/core": "^7.1.6", + "@svgr/babel-preset": "^4.1.0", + "@svgr/hast-util-to-babel-ast": "^4.1.0", + "rehype-parse": "^6.0.0", + "unified": "^7.0.2", + "vfile": "^3.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, + "@svgr/plugin-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz", + "integrity": "sha512-MgL1CrlxvNe+1tQjPUc2bIJtsdJOIE5arbHlPgW+XVWGjMZTUcyNNP8R7/IjM2Iyrc98UJY+WYiiWHrinnY9ZQ==", "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "cosmiconfig": "^5.0.7", + "merge-deep": "^3.0.2", + "svgo": "^1.1.1" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "@svgr/webpack": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", + "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", "requires": { - "ms": "2.0.0" + "@babel/core": "^7.1.6", + "@babel/plugin-transform-react-constant-elements": "^7.0.0", + "@babel/preset-env": "^7.1.6", + "@babel/preset-react": "^7.0.0", + "@svgr/core": "^4.1.0", + "@svgr/plugin-jsx": "^4.1.0", + "@svgr/plugin-svgo": "^4.0.3", + "loader-utils": "^1.1.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "@types/configstore": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-2.1.1.tgz", + "integrity": "sha1-zR6FU2M60xhcPy8jns/10mQ+krY=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "@types/debug": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.29.tgz", + "integrity": "sha1-oeUUrfvZLwOiJLpU1pMRHb8fN1Q=" }, - "default-user-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", - "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", - "dev": true, - "requires": { - "os-name": "~1.0.3" - } + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "@types/fs-extra": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", + "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", "dev": true, "requires": { - "clone": "^1.0.2" + "@types/node": "*" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "@types/get-port": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-0.0.4.tgz", + "integrity": "sha1-62u3Qj2fiItjJmDcfS/T5po1ZD4=" + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "@types/handlebars": { + "version": "4.0.40", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.40.tgz", + "integrity": "sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w==", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "@types/highlight.js": { + "version": "9.12.3", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", + "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", "dev": true }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "@types/history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", + "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==" }, - "dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "@types/lodash": { + "version": "4.14.119", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", + "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==", "dev": true }, - "dev-null": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz", - "integrity": "sha1-WiBc48Ky73e2I41roXnrdMag6Bg=", + "@types/marked": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz", + "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==", "dev": true }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/mkdirp": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.3.29.tgz", + "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=" + }, + "@types/node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.0.tgz", + "integrity": "sha512-dmYIvoQEZWnyQfgrwPCoxztv/93NYQGEiOoQhuI56rJahv9de6Q2apZl3bufV46YJ0OAXdaktIuw4RIRl4DTeA==" + }, + "@types/prop-types": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz", + "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==" + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" + }, + "@types/reach__router": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.2.3.tgz", + "integrity": "sha512-Zp0AdVhoJXjwsgp8pDPVEMnAH5eHU64hi5EnPT1Jerddqwiy0O87KFrnZKd1DKdO87cU120n2d3SnKKPtf4wFA==", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "@types/history": "*", + "@types/react": "*" } }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, + "@types/react": { + "version": "16.8.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.8.tgz", + "integrity": "sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==", "requires": { - "domelementtype": "1" + "@types/prop-types": "*", + "csstype": "^2.2.0" } }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "@types/shelljs": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-1lQw+48BuVgp6c1+z8EMipp18IdnV2dLh6KQGwOm+kJy9nPjEkaqRKmwbDNEYf//EKBvKcwOC6V2cDrNxVoQeQ==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "@types/glob": "*", + "@types/node": "*" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true + "@types/tmp": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.32.tgz", + "integrity": "sha1-DTyzECL4Qn6ljACK8yuA2hJspOM=" }, - "easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", "requires": { - "lodash": "^4.17.10" + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" } }, - "eazy-logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", - "dev": true, + "@types/vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", "requires": { - "tfunk": "^3.0.1" + "@types/node": "*", + "@types/unist": "*" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==" }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", "requires": { - "once": "^1.4.0" + "@webassemblyjs/wast-printer": "1.7.11" } }, - "engine.io": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", - "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", - "dev": true, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==" + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" } }, - "engine.io-client": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", - "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", - "dev": true, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "@xtuc/ieee754": "^1.2.0" } }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "dev": true, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "~1.0.2" + "@xtuc/long": "4.2.1" } }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "eol": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.2.0.tgz", - "integrity": "sha1-L22whqJDpG4+Xb0OE0Ncfr6/Cd0=", - "dev": true + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==" }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", "requires": { - "prr": "~1.0.1" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", "requires": { - "is-arrayish": "^0.2.1" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, - "errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/errors/-/errors-0.2.0.tgz", - "integrity": "sha1-D1Hoidqj4RsZ5xhtEfEEqmbrJAM=", - "dev": true + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==" }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - }, - "dependencies": { - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - } + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "acorn": "^5.0.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" } } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "requires": { - "is-extglob": "^1.0.0" + "string-width": "^2.0.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "color-convert": "^1.9.0" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, + "apollo-link": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", + "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "apollo-utilities": "^1.2.1", + "ts-invariant": "^0.3.2", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.18" } }, - "follow-redirects": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz", - "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==", - "dev": true, + "apollo-utilities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", + "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", "requires": { - "debug": "=3.1.0" + "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.2.1", + "tslib": "^1.9.3" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "ts-invariant": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", + "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", "requires": { - "ms": "2.0.0" + "tslib": "^1.9.3" } } } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" } }, - "form-data2": { + "array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/form-data2/-/form-data2-1.0.3.tgz", - "integrity": "sha1-y6XiNgGmlE2Vq31xEf+Tl6XLKk0=", - "dev": true, + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { - "bluebird": "^2.8.2", - "combined-stream2": "^1.0.2", - "debug": "^2.1.1", - "lodash": "^2.4.1", - "mime": "^1.2.11", - "uuid": "^2.0.1" + "util": "0.10.3" }, "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } } } }, - "form-fix-array": { + "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/form-fix-array/-/form-fix-array-1.0.0.tgz", - "integrity": "sha1-oTR6R+UxF6t7zb8+Lz7JHGZ2m8g=", - "dev": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, - "fragment-cache": { + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async-each": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", + "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.0.tgz", + "integrity": "sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ==", + "requires": { + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000947", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.14", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", + "requires": { + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" + }, + "babel-eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", + "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "babel-loader": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", + "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" + } + }, + "babel-plugin-add-module-exports": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", + "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=" + }, + "babel-plugin-dynamic-import-node": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz", + "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==", "requires": { - "map-cache": "^0.2.2" + "babel-plugin-syntax-dynamic-import": "^6.18.0" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "babel-plugin-emotion": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.9.tgz", + "integrity": "sha512-IfWP12e9/wHtWHxVTzD692Nbcmrmcz2tip7acp6YUqtrP7slAyr5B+69hyZ8jd55GsyNSZwryNnmuDEVe0j+7w==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.7.1", + "@emotion/memoize": "0.7.1", + "@emotion/serialize": "^0.11.6", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true + "babel-plugin-macros": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.0.tgz", + "integrity": "sha512-BWw0lD0kVZAXRD3Od1kMrdmfudqzDzYv2qrN3l2ISR1HVp1EgLKfbOrYV9xmY5k3qx3RIu5uPAUZZZHpo0o5Iw==", + "requires": { + "cosmiconfig": "^5.0.5", + "resolve": "^1.8.1" + } }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, + "babel-plugin-remove-graphql-queries": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.6.2.tgz", + "integrity": "sha512-JrYM0ACSMmt27PeMtwp+5N5c8S1pJkCYWI+Jt+12ERqW3bYKWGCJsdEky2lQRLezLFCiJE7+mXANc91yMGf+HQ==" + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-preset-fbjs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz", + "integrity": "sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-gatsby": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.1.10.tgz", + "integrity": "sha512-Fe85p1k6B6wJFrlZaD8DYyHBxN3y+91s3vFuRxR/HkYeMtf17o3dTGn1vgJ7ANa+sPAIV3hlO94EgP1rhcV2pg==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/preset-env": "^7.4.1", + "@babel/preset-react": "^7.0.0", + "babel-plugin-macros": "^2.4.2" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } } }, - "fs.realpath": { + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" + }, + "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "is-descriptor": "^1.0.0" } }, - "balanced-match": { + "is-accessor-descriptor": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "ms": "2.0.0" + "kind-of": "^6.0.0" } }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { + "is-data-descriptor": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "minipass": "^2.2.1" + "kind-of": "^6.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "better-opn": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-0.1.4.tgz", + "integrity": "sha512-7V92EnOdjWOB9lKsVsthCcu1FdFT5qNJVTiOgGy5wPuTsSptMMxm2G1FGHgWu22MyX3tyDRzTWk4lxY2Ppdu7A==", + "requires": { + "opn": "^5.4.0" + } + }, + "better-queue": { + "version": "3.8.10", + "resolved": "https://registry.npmjs.org/better-queue/-/better-queue-3.8.10.tgz", + "integrity": "sha512-e3gwNZgDCnNWl0An0Tz6sUjKDV9m6aB+K9Xg//vYeo8+KiH8pWhLFxkawcXhm6FpM//GfD9IQv/kmvWCAVVpKA==", + "requires": { + "better-queue-memory": "^1.0.1", + "node-eta": "^0.9.0", + "uuid": "^3.0.0" + } + }, + "better-queue-memory": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/better-queue-memory/-/better-queue-memory-1.0.3.tgz", + "integrity": "sha512-QLFkfV+k/7e4L4FR7kqkXKtRi22kl68c/3AaBs0ArDSz0iiuAl0DjVlb6gM220jW7izLE5TRy7oXOd4Cxa0wog==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ms": "2.0.0" } }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "minimatch": "^3.0.4" + "safer-buffer": ">= 2.1.2 < 3" } }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "is-extendable": "^0.1.0" } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", + "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { - "number-is-nan": "^1.0.0" + "yallist": "^3.0.2" } }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-manager": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-2.9.0.tgz", + "integrity": "sha1-Xh9jF8oaJeQN3zZacWJ1evFSNT4=", + "requires": { + "async": "1.5.2", + "lru-cache": "4.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "lru-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", + "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", "requires": { - "brace-expansion": "^1.1.7" + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "cache-manager-fs-hash": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/cache-manager-fs-hash/-/cache-manager-fs-hash-0.0.6.tgz", + "integrity": "sha512-p1nmcCQH4/jyKqEqUqPSDDcCo0PjFdv56OvtSdUrSIB7s8rAfwETLZ0CHXWdAPyg0QaER/deTvl1dCXyjZ5xAA==", + "requires": { + "es6-promisify": "^6.0.0", + "lockfile": "^1.0.4" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "caniuse-lite": { + "version": "1.0.30000951", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000951.tgz", + "integrity": "sha512-eRhP+nQ6YUkIcNQ6hnvdhMkdc7n3zadog0KXNRxAZTT2kHjUb1yGn71OrPhSn8MOvlX97g5CR97kGVj8fMsXWg==" + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "ccount": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + }, + "character-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==" + }, + "character-entities-html4": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==" + }, + "character-entities-legacy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==" + }, + "character-reference-invalid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "chokidar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "minipass": "^2.2.1" + "is-descriptor": "^0.1.0" } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "clipboard": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", + "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "minimist": "0.0.8" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collapse-white-space": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", + "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "optional": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz", + "integrity": "sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA==", + "requires": { + "trim": "0.0.1" + } + }, + "command-exists": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", + "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compass-vertical-rhythm": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/compass-vertical-rhythm/-/compass-vertical-rhythm-1.4.5.tgz", + "integrity": "sha512-bJo3IYX7xmmZCDYjrT2XolaiNjGZ4E2JvUGxpdU0ecbH4ZLK786wvc8aHKVrGrKct9JlkmJbUi8YLrQWvOc+uA==", + "requires": { + "convert-css-length": "^1.0.1", + "object-assign": "^4.1.0", + "parse-unit": "^1.0.1" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "requires": { + "mime-db": ">= 1.38.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" } }, "ms": { "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "pify": "^3.0.0" } }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "confusing-browser-globals": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz", + "integrity": "sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "^0.1.4" + } + }, + "console-polyfill": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.1.2.tgz", + "integrity": "sha1-ls/tUcr3gYn2mVcubxgnHcN8DjA=" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-css-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/convert-css-length/-/convert-css-length-1.0.2.tgz", + "integrity": "sha512-ecV7j3hXyXN1X2XfJBzhMR0o1Obv0v3nHmn0UiS3ACENrzbxE/EknkiunS/fCwQva0U62X1GChi8GaPh4oTlLg==", + "requires": { + "console-polyfill": "^0.1.2", + "parse-unit": "^1.0.1" + } + }, + "convert-hrtime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-2.0.0.tgz", + "integrity": "sha1-Gb+yyRYvnhHC8Ewsed4rfoCVxic=" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copyfiles": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-1.2.0.tgz", + "integrity": "sha1-qNo6xBqiIgrim9PFi2mEKU8sWTw=", + "requires": { + "glob": "^7.0.5", + "ltcdr": "^2.2.1", + "minimatch": "^3.0.3", + "mkdirp": "^0.5.1", + "noms": "0.0.0", + "through2": "^2.0.1" + } + }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + }, + "core-js-compat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.0.tgz", + "integrity": "sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==", + "requires": { + "browserslist": "^4.5.1", + "core-js": "3.0.0", + "core-js-pure": "3.0.0", + "semver": "^5.6.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, + "core-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", + "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==" + } + } + }, + "core-js-pure": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.0.tgz", + "integrity": "sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.0", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } + } + } + }, + "cross-fetch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", + "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "wrappy": "1" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "jsesc": "~0.5.0" } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", "requires": { - "glob": "^7.0.5" + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } + } + }, + "csstype": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz", + "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } }, - "string-width": { + "is-descriptor": { "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecated-decorator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", + "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detab": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.1.tgz", + "integrity": "sha512-/hhdqdQc5thGrqzjyO/pz76lDZ5GSuAs6goxOaKTsvPk7HNnzAyFN5lyHgqpX4/s1i66K8qMGj+VhA9504x7DQ==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "safe-buffer": "~5.1.0" + "ms": "2.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "devcert-san": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/devcert-san/-/devcert-san-0.3.3.tgz", + "integrity": "sha1-qnckR0Gy2DF3HAEfIu4l45atS6k=", + "requires": { + "@types/configstore": "^2.1.1", + "@types/debug": "^0.0.29", + "@types/get-port": "^0.0.4", + "@types/glob": "^5.0.30", + "@types/mkdirp": "^0.3.29", + "@types/node": "^7.0.11", + "@types/tmp": "^0.0.32", + "command-exists": "^1.2.2", + "configstore": "^3.0.0", + "debug": "^2.6.3", + "eol": "^0.8.1", + "get-port": "^3.0.0", + "glob": "^7.1.1", + "mkdirp": "^0.5.1", + "tmp": "^0.0.31", + "tslib": "^1.6.0" + }, + "dependencies": { + "@types/glob": { + "version": "5.0.36", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.36.tgz", + "integrity": "sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==", "requires": { - "ansi-regex": "^2.0.0" + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + "@types/node": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.5.tgz", + "integrity": "sha512-RYkagUUbxQBss46ElbEa+j4q4X3GR12QwB7a/PM5hmVuVkYoW1jENT1+taspKUv8ibwW8cw+kRFbOaTc/Key3w==" }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "ms": "2.0.0" } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domready": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", + "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=" + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.119.tgz", + "integrity": "sha512-3mtqcAWa4HgG+Djh/oNXlPH0cOH6MmtwxN1nHSaReb9P0Vn51qYPqYwLeoSuAX9loU1wrOBhFbiX3CkeIxPfgg==" + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~6.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "envinfo": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-5.12.1.tgz", + "integrity": "sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w==" + }, + "eol": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.8.1.tgz", + "integrity": "sha1-3vwyJJkMfspzuzRGGlbPncJHYdA=" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "requires": { + "stackframe": "^1.0.4" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promisify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.3.tgz", + "integrity": "sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-config-react-app": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", + "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", + "requires": { + "confusing-browser-globals": "^1.0.6" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-loader": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", + "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "requires": { + "lodash": "^4.17.10" + } + }, + "eslint-plugin-graphql": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-2.1.1.tgz", + "integrity": "sha512-JT2paUyu3e9ZDnroSshwUMc6pKcnkfXTsZInX1+/rPotvqOLVLtdrx/cmfb7PTJwjiEAshwcpm3/XPdTpsKJPw==", + "requires": { + "graphql-config": "^2.0.1", + "lodash": "^4.11.1" + } + }, + "eslint-plugin-import": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "read-pkg-up": "^2.0.0", + "resolve": "^1.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", + "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", + "requires": { + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1" + } + }, + "eslint-plugin-react": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-source-polyfill": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-1.0.5.tgz", + "integrity": "sha512-PdStgZ3+G2o2gjqsBYbV4931ByVmwLwSrX7mFgawCL+9I1npo9dwAQTnWtNWXe5IY2P8+AbbPteeOueiEtRCUA==" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": ">=0.0.5" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express-graphql": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.6.12.tgz", + "integrity": "sha512-ouLWV0hRw4hnaLtXzzwhdC79ewxKbY2PRvm05mPc/zOH5W5WVCHDQ1SmNxEPBQdUeeSNh29aIqW9zEQkA3kMuA==", + "requires": { + "accepts": "^1.3.0", + "content-type": "^1.0.4", + "http-errors": "^1.3.0", + "raw-body": "^2.3.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + } + }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "requires": { + "debug": "^3.2.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=" + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gatsby": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.2.11.tgz", + "integrity": "sha512-112c4RyUhxePTZaxUqJByyC9IINHE7D2I0HqoAX+LDmUCEM4G/cCxMdpc/+pdvpPvD9Y7xENnnmFptywaKHuyA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@gatsbyjs/relay-compiler": "2.0.0-printer-fix.2", + "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", + "@reach/router": "^1.1.1", + "address": "1.0.3", + "autoprefixer": "^9.4.3", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "^9.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-dynamic-import-node": "^1.2.0", + "babel-plugin-remove-graphql-queries": "^2.6.2", + "babel-preset-gatsby": "^0.1.10", + "better-opn": "0.1.4", + "better-queue": "^3.8.6", + "bluebird": "^3.5.0", + "browserslist": "3.2.8", + "cache-manager": "^2.9.0", + "cache-manager-fs-hash": "^0.0.6", + "chalk": "^2.3.2", + "chokidar": "2.1.2", + "common-tags": "^1.4.0", + "compression": "^1.7.3", + "convert-hrtime": "^2.0.0", + "copyfiles": "^1.2.0", + "core-js": "^2.5.0", + "css-loader": "^1.0.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "detect-port": "^1.2.1", + "devcert-san": "^0.3.3", + "domready": "^1.0.8", + "dotenv": "^4.0.0", + "eslint": "^5.6.0", + "eslint-config-react-app": "^3.0.0", + "eslint-loader": "^2.1.0", + "eslint-plugin-flowtype": "^2.46.1", + "eslint-plugin-graphql": "^2.0.0", + "eslint-plugin-import": "^2.9.0", + "eslint-plugin-jsx-a11y": "^6.0.3", + "eslint-plugin-react": "^7.8.2", + "event-source-polyfill": "^1.0.5", + "express": "^4.16.3", + "express-graphql": "^0.6.12", + "fast-levenshtein": "~2.0.4", + "file-loader": "^1.1.11", + "flat": "^4.0.0", + "fs-exists-cached": "1.0.0", + "fs-extra": "^5.0.0", + "gatsby-cli": "^2.4.17", + "gatsby-link": "^2.0.16", + "gatsby-plugin-page-creator": "^2.0.11", + "gatsby-react-router-scroll": "^2.0.6", + "glob": "^7.1.1", + "graphql": "^14.1.1", + "graphql-compose": "^6.0.3", + "graphql-playground-middleware-express": "^1.7.10", + "graphql-relay": "^0.6.0", + "graphql-tools": "^3.0.4", + "hash-mod": "^0.0.5", + "invariant": "^2.2.4", + "is-relative": "^1.0.0", + "is-relative-url": "^2.0.0", + "is-wsl": "^1.1.0", + "jest-worker": "^23.2.0", + "joi": "12.x.x", + "json-loader": "^0.5.7", + "json-stringify-safe": "^5.0.1", + "kebab-hash": "^0.1.2", + "lodash": "^4.17.10", + "lokijs": "^1.5.6", + "md5": "^2.2.1", + "md5-file": "^3.1.1", + "mime": "^2.2.0", + "mini-css-extract-plugin": "^0.4.0", + "mitt": "^1.1.2", + "mkdirp": "^0.5.1", + "moment": "^2.21.0", + "name-all-modules-plugin": "^1.0.1", + "normalize-path": "^2.1.1", + "null-loader": "^0.1.1", + "opentracing": "^0.14.3", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "parseurl": "^1.3.2", + "physical-cpu-count": "^2.0.0", + "pnp-webpack-plugin": "^1.4.1", + "postcss-flexbugs-fixes": "^3.0.0", + "postcss-loader": "^2.1.3", + "prop-types": "^15.6.1", + "raw-loader": "^0.5.1", + "react-dev-utils": "^4.2.1", + "react-error-overlay": "^3.0.0", + "react-hot-loader": "^4.6.2", + "redux": "^4.0.0", + "request": "^2.85.0", + "semver": "^5.6.0", + "shallow-compare": "^1.2.2", + "sift": "^5.1.0", + "signal-exit": "^3.0.2", + "slash": "^1.0.0", + "socket.io": "^2.0.3", + "stack-trace": "^0.0.10", + "string-similarity": "^1.2.0", + "style-loader": "^0.21.0", + "terser-webpack-plugin": "^1.2.2", + "true-case-path": "^1.0.3", + "type-of": "^2.0.1", + "url-loader": "^1.0.1", + "uuid": "^3.1.0", + "v8-compile-cache": "^1.1.0", + "webpack": "~4.28.4", + "webpack-dev-middleware": "^3.0.1", + "webpack-dev-server": "^3.1.14", + "webpack-hot-middleware": "^2.21.0", + "webpack-merge": "^4.1.0", + "webpack-stats-plugin": "^0.1.5", + "yaml-loader": "^0.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "gatsby-cli": { + "version": "2.4.17", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.4.17.tgz", + "integrity": "sha512-qhhFqYy7N8G4d8hSJycdib5OeU2bHgQq+TUdMFs0wZ13Kmyr34EabdnHdSdhZdS/lUAjet6L2KugTZ6DnQFERw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.0", + "common-tags": "^1.4.0", + "convert-hrtime": "^2.0.0", + "core-js": "^2.5.0", + "envinfo": "^5.8.1", + "execa": "^0.8.0", + "fs-exists-cached": "^1.0.0", + "fs-extra": "^4.0.1", + "hosted-git-info": "^2.6.0", + "lodash": "^4.17.10", + "meant": "^1.0.1", + "opentracing": "^0.14.3", + "pretty-error": "^2.1.1", + "resolve-cwd": "^2.0.0", + "source-map": "^0.5.7", + "stack-trace": "^0.0.10", + "update-notifier": "^2.3.0", + "yargs": "^12.0.5", + "yurnalist": "^1.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "mem": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "gatsby-link": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.0.16.tgz", + "integrity": "sha512-2CWQeRtkidpi6uEMoq9KRkssqh66ybSWTeQ7W2as7uqldaFlZDOJxkpqf3C3n207iQxxcsY6vzvMgjtGzucv/Q==", + "requires": { + "@babel/runtime": "^7.0.0", + "@types/reach__router": "^1.0.0", + "prop-types": "^15.6.1" + } + }, + "gatsby-plugin-emotion": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.0.6.tgz", + "integrity": "sha512-cBCGVdNkULlrYMPsrCVDKrCxiKpZq4PL9n5qzQ538FWmg+XqBhQKWaH8dALwEzoDS5GyHXQy1hI7XHoWmDBJAQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@emotion/babel-preset-css-prop": "^10.0.5" + } + }, + "gatsby-plugin-google-analytics": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.0.17.tgz", + "integrity": "sha512-3YgF7BPtZqVQDiLmHxQqVNWU0bSIczpwD5zoBzcgkWJ5VvuAQ7K0iSXmm5rWGw4rj8VhGCbrK5NXppATlgRHbg==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "gatsby-plugin-less": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/gatsby-plugin-less/-/gatsby-plugin-less-2.0.12.tgz", + "integrity": "sha512-99/unXnBI9lrLbmMboOUUo23B8HvzMVzYUy0oiU5UbaowwhQp0ILAtOjmR2tiOLRcn7ZWlM4pdKz3EUu6B3kLQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "less-loader": "^4.1.0" + } + }, + "gatsby-plugin-page-creator": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.0.11.tgz", + "integrity": "sha512-ydvayo170L36JOJH+Y2GuwwTC9JEDO6EdQfpg217eEwIpZ24NKDRiMGA3rLIKEGlDShIXPNjZhHloStzBcGoAw==", + "requires": { + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.0", + "chokidar": "2.1.2", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.1", + "lodash": "^4.17.10", + "micromatch": "^3.1.10", + "parse-filepath": "^1.0.1", + "slash": "^1.0.0" + } + }, + "gatsby-plugin-react-helmet": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.0.11.tgz", + "integrity": "sha512-VBCO7qlQMBfFQadpNauvZO1CYKVF5aE52jiNEXMiYNuchJWLBEy3FXN/FHdCGo37KipKlkh0iDXCRLSGY00TqQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "gatsby-plugin-svgr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gatsby-plugin-svgr/-/gatsby-plugin-svgr-2.0.2.tgz", + "integrity": "sha512-54REIMe79qFBAwpcnWHBkvEE9CKoEVkefF9rDXai0k642r91SZ4UeWFuAmsegPG+sPVub7tHfHu/2LVXK1I9kg==" + }, + "gatsby-plugin-typography": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/gatsby-plugin-typography/-/gatsby-plugin-typography-2.2.10.tgz", + "integrity": "sha512-sg9UkDrn3C3EN+yBSrUNzbGIlw1k1Qc6rYZWuXeqNEuQfdWJfqJMVzVhhriBDz2sC2bU6Wh/NnQ2vXVkRs4bKw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "gatsby-react-router-scroll": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.0.6.tgz", + "integrity": "sha512-Cn9Jlf3ikBQL4xRyxP/7Kl4WMNwqIO/kN8aHuvZd9wGYwI7AHylukkw3p7WJPNSqYWy3b76QggEvA7qzpJrglA==", + "requires": { + "@babel/runtime": "^7.0.0", + "scroll-behavior": "^0.9.9", + "warning": "^3.0.0" + } + }, + "gatsby-theme-apollo": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.9.tgz", + "integrity": "sha512-7/InzbHXAUYysYDFs+6+a354bCsjJqqmGbtPo8cooRV+OBAt04zxfRLtDMPRInb3hh01HqykJFLLGaWV6WGV5A==", + "requires": { + "@emotion/core": "^10.0.7", + "@emotion/styled": "^10.0.7", + "@svgr/webpack": "^4.1.0", + "gatsby": "^2.0.91", + "gatsby-plugin-emotion": "^4.0.3", + "gatsby-plugin-react-helmet": "^3.0.2", + "gatsby-plugin-svgr": "^2.0.1", + "gatsby-plugin-typography": "^2.2.2", + "polished": "^2.3.3", + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-dom": "^16.6.3", + "react-helmet": "^5.2.0", + "react-icons": "^3.3.0", + "react-typography": "^0.16.13", + "store": "^2.0.12", + "typography": "^0.16.17" + } + }, + "gatsby-theme-apollo-docs": { + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.36.tgz", + "integrity": "sha512-BjCa/E4Cs4fN7Md/6SnX620S16Rae1Dz3xNnEr+KDeAwQK0wiB1f9OwdMk4tqHWajMZT3RkOVlnUTpuNhuZ04g==", + "requires": { + "detab": "^2.0.1", + "gatsby": "^2.2.6", + "gatsby-plugin-google-analytics": "^2.0.17", + "gatsby-plugin-less": "^2.0.12", + "gatsby-theme-apollo": "^0.1.9", + "gray-matter": "^4.0.1", + "handlebars": "^4.1.0", + "hast-util-is-element": "^1.0.2", + "hexo-typescript-api-box": "^0.9.2", + "js-yaml": "^3.13.0", + "less": "^3.9.0", + "lodash": "^4.17.11", + "polished": "^2.3.3", + "prismjs": "^1.15.0", + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-dom": "^16.6.3", + "react-helmet": "^5.2.0", + "react-icons": "^3.3.0", + "recompose": "^0.30.0", + "rehype-autolink-headings": "^2.0.4", + "rehype-raw": "^4.0.0", + "rehype-react": "^3.1.0", + "rehype-sanitize": "^2.0.2", + "rehype-slug": "^2.0.2", + "remark": "^10.0.1", + "remark-rehype": "^4.0.0", + "semver": "^5.6.0", + "semver-match": "^0.1.1", + "showdown": "^1.9.0", + "simple-git": "^1.107.0", + "unist-builder": "^1.0.3", + "unist-util-visit": "^1.4.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "github-slugger": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.1.tgz", + "integrity": "sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ==", + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + }, + "dependencies": { + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + } + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graphql": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", + "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", + "requires": { + "iterall": "^1.2.2" + } + }, + "graphql-compose": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/graphql-compose/-/graphql-compose-6.0.3.tgz", + "integrity": "sha512-QpywEtNvlEQS0a5VIseMA/tk67QmEN9NNUx1B1tzGR/p7MePyus9wvci2cIP/mwdDrvLRRbwpmidSKQXFD3SEA==", + "requires": { + "graphql-type-json": "^0.2.1", + "object-path": "^0.11.4" + } + }, + "graphql-config": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", + "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "requires": { + "graphql-import": "^0.7.1", + "graphql-request": "^1.5.0", + "js-yaml": "^3.10.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.4" + } + }, + "graphql-import": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz", + "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==", + "requires": { + "lodash": "^4.17.4", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "graphql-playground-html": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz", + "integrity": "sha512-yOYFwwSMBL0MwufeL8bkrNDgRE7eF/kTHiwrqn9FiR9KLcNIl1xw9l9a+6yIRZM56JReQOHpbQFXTZn1IuSKRg==" + }, + "graphql-playground-middleware-express": { + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.12.tgz", + "integrity": "sha512-17szgonnVSxWVrgblLRHHLjWnMUONfkULIwSunaMvYx8k5oG3yL86cyGCbHuDFUFkyr2swLhdfYl4mDfDXuvOA==", + "requires": { + "graphql-playground-html": "1.6.12" + } + }, + "graphql-relay": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.6.0.tgz", + "integrity": "sha512-OVDi6C9/qOT542Q3KxZdXja3NrDvqzbihn1B44PH8P/c5s0Q90RyQwT6guhGqXqbYEH6zbeLJWjQqiYvcg2vVw==", + "requires": { + "prettier": "^1.16.0" + } + }, + "graphql-request": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", + "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", + "requires": { + "cross-fetch": "2.2.2" + } + }, + "graphql-tools": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.1.1.tgz", + "integrity": "sha512-yHvPkweUB0+Q/GWH5wIG60bpt8CTwBklCSzQdEHmRUgAdEQKxw+9B7zB3dG7wB3Ym7M7lfrS4Ej+jtDZfA2UXg==", + "requires": { + "apollo-link": "^1.2.2", + "apollo-utilities": "^1.0.1", + "deprecated-decorator": "^0.1.6", + "iterall": "^1.1.3", + "uuid": "^3.1.0" + } + }, + "graphql-type-json": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/graphql-type-json/-/graphql-type-json-0.2.2.tgz", + "integrity": "sha512-srKbRJWxvZ8J6b7P3F0PrOtKgWg3pxlUPb1xbSIB+aMdK+UPKpp4aDzPV1A+IUTlea6lk9FWwI08UXQApC03lw==" + }, + "gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "requires": { + "js-yaml": "^3.11.0", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "gray-percentage": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gray-percentage/-/gray-percentage-2.0.0.tgz", + "integrity": "sha1-tyonTRsTeRBKAFC2OyB9xT/lb5k=" + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "^0.1.1" + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "handlebars": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-mod": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/hash-mod/-/hash-mod-0.0.5.tgz", + "integrity": "sha1-2vHklzqRFmQ0Z9VO52kLQ++ALsw=" + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-6.0.0.tgz", + "integrity": "sha512-QnJbXddVGNJ5v3KegK1MY6luTkNDBcJnCQZcekt7AkES2z4tYy85pbFUXx7Mb0iXZBKfwoVdgfxU12GbmlwbbQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.2.1", + "unist-util-is": "^2.0.0", + "web-namespaces": "^1.1.2" + } + }, + "hast-util-from-parse5": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz", + "integrity": "sha512-A7ev5OseS/J15214cvDdcI62uwovJO2PB60Xhnq7kaxvvQRFDEccuqbkrFXU03GPBGopdPqlpQBRqIcDS/Fjbg==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "hast-util-has-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.2.tgz", + "integrity": "sha512-EBzRiKIIe9wouLSjqun5ti0oYcEe5U1eEpuOPtcihmP3KvFRovOmmXypf1B/QalQr9S4YoVgLOSg6gW98ihRbA==" + }, + "hast-util-is-element": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.0.2.tgz", + "integrity": "sha512-4MEtyofNi3ZunPFrp9NpTQdNPN24xvLX3M+Lr/RGgPX6TLi+wR4/DqeoyQ7lwWcfUp4aevdt4RR0r7ZQPFbHxw==" + }, + "hast-util-parse-selector": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz", + "integrity": "sha512-Xyh0v+nHmQvrOqop2Jqd8gOdyQtE8sIP9IQf7mlVDqp924W4w/8Liuguk2L2qei9hARnQSG2m+wAOCxM7npJVw==" + }, + "hast-util-raw": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.0.tgz", + "integrity": "sha512-X8sogDDaCkqj+Ghia0+TRD2AQDXeNRpYDTm9Z2mJ1Pzy/Nb4p20YJVfbPwIRU0U7XXU0GrhPhEMZvnfV69/igA==", + "requires": { + "hast-util-from-parse5": "^5.0.0", + "hast-util-to-parse5": "^5.0.0", + "html-void-elements": "^1.0.1", + "parse5": "^5.0.0", + "unist-util-position": "^3.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.1", + "zwitch": "^1.0.0" + } + }, + "hast-util-sanitize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.3.0.tgz", + "integrity": "sha512-rQeetoD08jHmDOUYN6h9vTuE0hQN4wymhtkQZ6whHtcjaLpjw5RYAbcdxx9cMgMWERDsSs79UpqHuBLlUHKeOw==", + "requires": { + "xtend": "^4.0.1" + } + }, + "hast-util-to-parse5": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-5.0.0.tgz", + "integrity": "sha512-1BG07SLp9RHnAy/A2Fugza5YCo45Ter8csOGbxL7a7f9Rvq9aE64/4hlqc083M8yLLp7J5tYxmiFWYbD0zQJnA==", + "requires": { + "hast-to-hyperscript": "^6.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.1", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.1.tgz", + "integrity": "sha512-EC6awGe0ZMUNYmS2hMVaKZxvjVtQA4RhXjtgE20AxGG49MM7OUUfaHc6VcVYv2YwzNlrZQGe5teimCxW1Rk+fA==" + }, + "hastscript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.0.0.tgz", + "integrity": "sha512-xJtuJ8D42Xtq5yJrnDg/KAIxl2cXBXKoiIJwmWX9XMf8113qHTGl/Bf7jEsxmENJ4w6q4Tfl8s/Y6mEZo8x8qw==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.2.0", + "property-information": "^5.0.1", + "space-separated-tokens": "^1.0.0" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "hexo-typescript-api-box": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/hexo-typescript-api-box/-/hexo-typescript-api-box-0.9.2.tgz", + "integrity": "sha512-xAe0uUna/GNcXYrZ2+ZOZfqfVetSwJ2SkDJoSUVy8L02eH6rVsE5cUvbaMuP4+VfwZAPTZDqRLSQlSh+E/UrIQ==", + "requires": { + "handlebars": "^4.0.5", + "lodash": "^4.13.1", + "showdown": "^1.4.2" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-void-elements": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.3.tgz", + "integrity": "sha512-SaGhCDPXJVNrQyKMtKy24q6IMdXg5FCPN3z+xizxw9l+oXQw5fOoaj/ERU5KqWhSYhXtW5bWthlDbTDLBhJQrA==" + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-parser-js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "optional": true + }, + "immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "string-width": "^1.0.2" + "ansi-regex": "^4.1.0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true } } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "internal-ip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.2.0.tgz", + "integrity": "sha512-ZY8Rk+hlvFeuMmG5uH1MXhhdeMntmIaxaInvAmzMq/SHV8rv4Kh+6GiQNNDQd0wZFrcO+FiTBo8lui/osKOyJw==", + "requires": { + "default-gateway": "^4.0.1", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, - "get-stream": { + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-alphabetical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==" + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" + }, + "is-alphanumerical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.0.0.tgz", + "integrity": "sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw==", + "requires": { + "builtin-modules": "^3.0.0" + } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "requires": { - "assert-plus": "^1.0.0" + "ci-info": "^1.5.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "optional": true, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "number-is-nan": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-relative-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-2.0.0.tgz", + "integrity": "sha1-cpAtf+BLPUeS59sV+duEtyBMnO8=", + "requires": { + "is-absolute-url": "^2.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "unc-path-regex": "^0.1.2" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, + "is-whitespace-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", "requires": { - "is-glob": "^2.0.0" + "punycode": "2.x.x" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, + "iterall": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", + "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" + "merge-stream": "^1.0.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, + "joi": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-12.0.0.tgz", + "integrity": "sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ==", "requires": { - "ansi-regex": "^2.0.0" + "hoek": "4.x.x", + "isemail": "3.x.x", + "topo": "2.x.x" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "minimist": "^1.2.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "graceful-fs": "^4.1.6" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "help": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/help/-/help-3.0.2.tgz", - "integrity": "sha1-luGQ1KCkU7icLLSwWrOOOo+f2t0=", - "dev": true + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "requires": { + "array-includes": "^3.0.3" + } }, - "hexo": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/hexo/-/hexo-3.8.0.tgz", - "integrity": "sha512-qMk0TZ+ErKMD25R+HMHFvbyTAcKszmGZYtQHT2pzVnZgitkJCShZ7b2qDbedtWBBizhutNbKkhQ4D3Dqivaviw==", - "dev": true, + "kebab-hash": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/kebab-hash/-/kebab-hash-0.1.2.tgz", + "integrity": "sha512-BTZpq3xgISmQmAVzkISy4eUutsUA7s4IEFlCwOBJjvSFOwyR7I+fza+tBc/rzYWK/NrmFHjfU1IhO3lu29Ib/w==", "requires": { - "abbrev": "^1.0.7", - "archy": "^1.0.0", - "bluebird": "^3.4.0", - "chalk": "^2.3.1", - "cheerio": "0.22.0", - "hexo-cli": "^1.1.0", - "hexo-front-matter": "^0.2.2", - "hexo-fs": "^0.2.0", - "hexo-i18n": "^0.2.1", - "hexo-log": "^0.2.0", - "hexo-util": "^0.6.3", - "js-yaml": "^3.6.1", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "moment": "^2.19.4", - "moment-timezone": "^0.5.14", - "nunjucks": "^3.1.2", - "pretty-hrtime": "^1.0.2", - "resolve": "^1.5.0", - "strip-ansi": "^4.0.0", - "strip-indent": "^2.0.0", - "swig-extras": "0.0.1", - "swig-templates": "^2.0.2", - "text-table": "^0.2.0", - "tildify": "^1.2.0", - "titlecase": "^1.1.2", - "warehouse": "^2.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "hexo-cli": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/hexo-cli/-/hexo-cli-1.1.0.tgz", - "integrity": "sha512-IWQPppwgmj1iBUcP5mpcMg3Tre6a8Qlr8ejXw6naZiJNSepSgh4mS3KiNPKDa2qQIgPDqJYJzNVFLw+RLA9CkA==", - "dev": true, - "requires": { - "abbrev": "^1.0.7", - "bluebird": "^3.4.0", - "chalk": "^1.1.3", - "command-exists": "^1.2.0", - "hexo-fs": "^0.2.0", - "hexo-log": "^0.2.0", - "hexo-util": "^0.6.0", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "resolve": "^1.5.0", - "tildify": "^1.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "lodash.kebabcase": "^4.1.1" } }, - "hexo-browsersync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/hexo-browsersync/-/hexo-browsersync-0.3.0.tgz", - "integrity": "sha512-5grkDUG/jci1LgImUFHTGMhXRYFKYuBVVf1L62UAhd/IC/L3EfGtKXyPVqvxyVb4Pc5STY5tQR46xoBJLlWJNw==", - "dev": true, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "browser-sync": "^2.18.13", - "connect-injector": "^0.4.4" + "is-buffer": "^1.1.5" } }, - "hexo-bunyan": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexo-bunyan/-/hexo-bunyan-1.0.0.tgz", - "integrity": "sha512-RymT8Ck+K77mLt9BEYNb4uyfC7RIQnU5N3laXowMrS28jj2h89VHJCOnhV00mmta4fHRqNa07kP1Hrn17nvMkQ==", - "dev": true, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "requires": { - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" } }, - "hexo-cli": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/hexo-cli/-/hexo-cli-1.1.0.tgz", - "integrity": "sha512-IWQPppwgmj1iBUcP5mpcMg3Tre6a8Qlr8ejXw6naZiJNSepSgh4mS3KiNPKDa2qQIgPDqJYJzNVFLw+RLA9CkA==", - "dev": true, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { - "abbrev": "^1.0.7", - "bluebird": "^3.4.0", - "chalk": "^1.1.3", - "command-exists": "^1.2.0", - "hexo-fs": "^0.2.0", - "hexo-log": "^0.2.0", - "hexo-util": "^0.6.0", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "resolve": "^1.5.0", - "tildify": "^1.2.0" + "package-json": "^4.0.0" } }, - "hexo-front-matter": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hexo-front-matter/-/hexo-front-matter-0.2.3.tgz", - "integrity": "sha1-x8qO9CDqNr2F6ECKLoyb9J76YF4=", - "dev": true, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "js-yaml": "^3.6.1" + "invert-kv": "^1.0.0" } }, - "hexo-fs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.3.tgz", - "integrity": "sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==", - "dev": true, + "less": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "requires": { - "bluebird": "^3.4.0", - "chokidar": "^1.5.2", - "escape-string-regexp": "^1.0.5", - "graceful-fs": "^4.1.4" + "clone": "^2.1.2", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } } }, - "hexo-i18n": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/hexo-i18n/-/hexo-i18n-0.2.1.tgz", - "integrity": "sha1-hPFBQyvwnYtVjth4xygWS20c1t4=", - "dev": true, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "requires": { - "sprintf-js": "^1.0.2" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } } }, - "hexo-inject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexo-inject/-/hexo-inject-1.0.0.tgz", - "integrity": "sha1-pTVXVgUdWrJ5yCtzfacrEzx+Ju0=", - "dev": true, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-polyfill": "^6.7.2", - "bluebird": "^3.3.4", - "core-decorators": "^0.11.0", - "underscore": "^1.8.3" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "hexo-log": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/hexo-log/-/hexo-log-0.2.0.tgz", - "integrity": "sha512-fzoc+GQexxPPILTjoOQILnA3ZG2MFgqMBVel4xvJ11pXptw9+f97ynTgDAExXafyp9Nz2ChXRuqlCYgPtZSlxQ==", - "dev": true, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { - "chalk": "^1.1.1", - "hexo-bunyan": "^1.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, - "hexo-prism-plus": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hexo-prism-plus/-/hexo-prism-plus-1.1.0.tgz", - "integrity": "sha512-lkDJRZDVN3iNpYtuwrI+JFLj3rSa4PeMwz1OlVfUOkY6CyjD/D3dGtW7cTpcxYejr3/JWjusIqWVnUTLpKr4Yw==", - "dev": true, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", "requires": { - "hexo-fs": "^1.0.0", - "hexo-inject": "^1.0.0", - "hexo-util": "^0.6.3", - "lodash": "^4.17.11" + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, - "hexo-fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-1.0.0.tgz", - "integrity": "sha512-eFfF2Yb2SRW2quTywtjV49KsAOinVDYkW5ZZ9bmD3ycSHmH2M2NmjGaE8XoNI/4pYGMmrLWxsOMWnZBsBz1lZg==", - "dev": true, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "bluebird": "^3.5.1", - "chokidar": "^2.0.4", - "escape-string-regexp": "^1.0.5", - "graceful-fs": "^4.1.11" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "kind-of": "^6.0.0" + "pinkie-promise": "^2.0.0" } }, - "is-data-descriptor": { + "pkg-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "find-up": "^1.0.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "minimist": "^1.2.0" } } } }, - "hexo-renderer-ejs": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/hexo-renderer-ejs/-/hexo-renderer-ejs-0.3.1.tgz", - "integrity": "sha512-XN8pYJU+Wr3dT8ipqEPRlOBySJpd1C5NUBBzgZpVSVBC/6L36O0YZI/Qd5NxQqwfGfSuKQ8N5iMyjmRXSR1MdA==", - "dev": true, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.every": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", + "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=" + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.maxby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", + "integrity": "sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=" + }, + "lokijs": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.6.tgz", + "integrity": "sha512-xJoDXy8TASTjmXMKr4F8vvNUCu4dqlwY5gmn0g5BajGt1GM3goDCafNiGAh/sfrWgkfWu1J4OfsxWm8yrWweJA==" + }, + "longest-streak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "ltcdr": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltcdr/-/ltcdr-2.2.1.tgz", + "integrity": "sha1-Wrh60dTB2rjowIu/A37gwZAih88=" + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "requires": { - "ejs": "^2.3.4", - "object-assign": "^4.0.1" + "p-defer": "^1.0.0" } }, - "hexo-renderer-less": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/hexo-renderer-less/-/hexo-renderer-less-0.2.0.tgz", - "integrity": "sha1-6N1/fPY8ekeubLYKBy8e4OE0soE=", - "dev": true, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "less": "^2.5.1" + "object-visit": "^1.0.0" } }, - "hexo-renderer-marked": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/hexo-renderer-marked/-/hexo-renderer-marked-0.3.2.tgz", - "integrity": "sha512-joSLeHB0YRkuViIPQlRz4A+zfJKPNHT+rABFgPHiT1zL9eeTUPxoLL4h7kcgOwRLAontVScaxP2Sie15mNitFg==", - "dev": true, + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==" + }, + "markdown-table": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==" + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "requires": { - "hexo-util": "^0.6.2", - "marked": "^0.3.9", - "object-assign": "^4.1.1", - "strip-indent": "^2.0.0" + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" } }, - "hexo-server": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/hexo-server/-/hexo-server-0.3.3.tgz", - "integrity": "sha512-70zQaf4Z+bj37Kvq7tEyn9WHH+Xj7uqbvOlGp8pHaOzWLp/riX3rMq3nnQKA2P8dKkBaM0/72IqjJPWu2Zt2WA==", - "dev": true, + "md5-file": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", + "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", "requires": { - "bluebird": "^3.5.1", - "chalk": "^1.1.3", - "compression": "^1.7.3", - "connect": "^3.6.6", - "mime": "^1.6.0", - "morgan": "^1.9.0", - "object-assign": "^4.1.1", - "opn": "^5.3.0", - "serve-static": "^1.13.2" + "buffer-alloc": "^1.1.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-compact": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", + "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "mdast-util-definitions": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.3.tgz", + "integrity": "sha512-P6wpRO8YVQ1iv30maMc93NLh7COvufglBE8/ldcOyYmk5EbfF0YeqlLgtqP/FOBU501Kqar1x5wYWwB3Nga74g==", + "requires": { + "unist-util-visit": "^1.0.0" + } + }, + "mdast-util-to-hast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-4.0.0.tgz", + "integrity": "sha512-yOTZSxR1aPvWRUxVeLaLZ1sCYrK87x2Wusp1bDM/Ao2jETBhYUKITI3nHvgy+HkZW54HuCAhHnS0mTcbECD5Ig==", + "requires": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, - "hexo-typescript-api-box": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/hexo-typescript-api-box/-/hexo-typescript-api-box-0.9.2.tgz", - "integrity": "sha512-xAe0uUna/GNcXYrZ2+ZOZfqfVetSwJ2SkDJoSUVy8L02eH6rVsE5cUvbaMuP4+VfwZAPTZDqRLSQlSh+E/UrIQ==", - "dev": true, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "handlebars": "^4.0.5", - "lodash": "^4.13.1", - "showdown": "^1.4.2" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "hexo-util": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-0.6.3.tgz", - "integrity": "sha512-zPxaqCWZz3/25SAB4FlrRtWktJ+Pr+vBiv/nyHpXKgXPt1m70liViKlRwWLqDmRjJ72x6/k4qCEeXHajvcGHUw==", - "dev": true, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "bluebird": "^3.4.0", - "camel-case": "^3.0.0", - "cross-spawn": "^4.0.0", - "highlight.js": "^9.4.0", - "html-entities": "^1.2.0", - "striptags": "^2.1.1" + "mime-db": "~1.38.0" } }, - "hexo-versioned-netlify-redirects": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hexo-versioned-netlify-redirects/-/hexo-versioned-netlify-redirects-1.1.0.tgz", - "integrity": "sha512-kfY19ZZDwBnRaZFA6KQgt5DhVBpTQG1yBoq01zaACFHIFuSd9OjhiHCkJ3it+TMvGl+JGTtgKhIwZoQUJHyv/g==", - "dev": true, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "requires": { - "url-join": "^4.0.0" + "dom-walk": "^0.1.0" } }, - "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", - "dev": true + "mini-css-extract-plugin": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", + "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true, - "optional": true + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, - "http-equiv-refresh": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", - "integrity": "sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=", - "dev": true + "mitt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", + "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==" }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "http-proxy": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", - "dev": true, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "modularscale": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/modularscale/-/modularscale-1.0.2.tgz", + "integrity": "sha1-So8TrzKl5SFPxuLPxSkGSr/X2Hc=", "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "lodash.isnumber": "^3.0.0" } }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, - "humanize-duration": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.15.1.tgz", - "integrity": "sha512-xfwsDoAinTTTNUAuYUGdeSPOUWEXzn9Xkep5LR0gpSw0gMKfpqLA7oxLWVRstYtZUarnCaeN0QqkOTC0TTPUpg==", - "dev": true + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "name-all-modules-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/name-all-modules-plugin/-/name-all-modules-plugin-1.0.1.tgz", + "integrity": "sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w=" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "requires": { - "kind-of": "^3.0.2" + "lodash.toarray": "^4.4.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node-eta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-eta/-/node-eta-0.9.0.tgz", + "integrity": "sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g=" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "binary-extensions": "^1.0.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, - "is-browser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.0.1.tgz", - "integrity": "sha1-i/C695mpxi/Z3lvO5M8zl8PnUpo=", - "dev": true + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "node-releases": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.11.tgz", + "integrity": "sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==", "requires": { - "builtin-modules": "^1.0.0" + "semver": "^5.3.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, + "noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", "requires": { - "kind-of": "^3.0.2" + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } } } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "is-primitive": "^2.0.0" + "path-key": "^2.0.0" } }, - "is-extendable": { + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "null-loader": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", + "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "number-is-nan": "^1.0.0" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "is-extglob": "^1.0.0" + "isobject": "^3.0.0" } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", "requires": { - "kind-of": "^3.0.2" + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" } }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "requires": { - "lodash.isfinite": "^3.3.2" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-stream": { + "object.values": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } }, - "is-windows": { + "on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } }, - "isbot": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-2.1.2.tgz", - "integrity": "sha512-y98+gTTU11BIKkyP8QvohQpURrRVH5nwQryw5GjyJIeWP7Q4NAnpBHSPHa6Tp1tcLj035YySYTO6XEye6SCy4w==", - "dev": true + "opentracing": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.3.tgz", + "integrity": "sha1-I+OtAp+mamU5Jq2+V+g0Rp+FUKo=" }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "requires": { - "punycode": "2.x.x" + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" } } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", "requires": { - "isarray": "1.0.0" + "cssnano": "^4.1.0", + "last-call-webpack-plugin": "^3.0.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" } } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "url-parse": "^1.4.3" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "jsonify": "~0.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "p-try": "^1.0.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "is-buffer": "^1.1.5" + "p-limit": "^1.1.0" } }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", - "dev": true - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" }, - "lcid": { + "p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "dev": true, - "requires": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.2.11", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "2.81.0", - "source-map": "^0.5.3" - }, - "dependencies": { - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - } - } - }, - "limited-request-queue": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/limited-request-queue/-/limited-request-queue-2.0.0.tgz", - "integrity": "sha1-FMfBILE4BgsZoqEDCrr2aTVyZQ0=", - "dev": true, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { - "is-browser": "^2.0.1", - "parse-domain": "~0.2.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, - "limiter": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", - "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==", - "dev": true - }, - "link-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/link-types/-/link-types-1.1.0.tgz", - "integrity": "sha1-r2XlnbUucMH/sYrEw8sFa/55aDA=", - "dev": true + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" }, - "load-json-file": { + "parallel-transform": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, - "localtunnel": { - "version": "1.9.0", - "resolved": "http://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", - "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", - "dev": true, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", "requires": { - "axios": "0.17.1", - "debug": "2.6.8", - "openurl": "1.1.1", - "yargs": "6.6.0" + "callsites": "^3.0.0" }, "dependencies": { - "camelcase": { + "callsites": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==" } } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "parse-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.1.tgz", + "integrity": "sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", - "dev": true + "parse-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", + "integrity": "sha1-fhu21b7zh0wo45JSaiVBFwKR7s8=" }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", - "dev": true + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", - "dev": true + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", - "dev": true + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, - "longest": { + "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "path-root-regex": "^0.1.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "object-visit": "^1.0.0" + "pify": "^2.0.0" } }, - "markdown": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz", - "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=", - "dev": true, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { - "nopt": "~2.1.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true + "physical-cpu-count": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", + "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, - "maybe-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/maybe-callback/-/maybe-callback-2.1.0.tgz", - "integrity": "sha1-ivoLp7aRp6sSPn8S9l4yu10fgkM=", - "dev": true + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dev": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "mimic-fn": "^1.0.0" + "pinkie": "^2.0.0" } }, - "meteor-theme-hexo": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/meteor-theme-hexo/-/meteor-theme-hexo-2.0.1.tgz", - "integrity": "sha512-VOmIeIvWbeyjtOwNNI2qnujltrddFic49fvoJrOWPR09cDz2aMO3phAxXF7h7arlxo3YMkHisQxr2jnoM+wkGQ==", - "dev": true, - "dependencies": { - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "ms": "2.0.0" + "locate-path": "^3.0.0" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "p-try": "^2.0.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-limit": "^2.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "p-try": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==" + } + } + }, + "pnp-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-S4kz+5rvWvD0w1O63eTJeXIxW4JHK0wPRMO7GmPhbZXJnTePcfrWZlni4BoglIf7pLSY18xtqo3MSnVkoAFXKg==", + "requires": { + "ts-pnp": "^1.0.0" + } + }, + "polished": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/polished/-/polished-2.3.3.tgz", + "integrity": "sha512-59V4fDbdxtH4I1m9TWxFsoGJbC8nnOpUYo5uFmvMfKp9Qh+6suo4VMUle1TGIIUZIGxfkW+Rs485zPk0wcwR2Q==", + "requires": { + "@babel/runtime": "^7.2.0" + } + }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "ms": "2.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "graceful-fs": "^4.1.6" + "has-flag": "^3.0.0" } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + } + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "brace-expansion": "^1.1.7" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.1.tgz", + "integrity": "sha512-9y9kDDf2F9EjKX6x9ueNa5GARvsUbXw4ezH8vXItXHwKzljbu8awP7t5dCaabKYm18Vs1lo5bKQcnc0HkISt+w==", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "minimist": "0.0.8" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "requires": { - "wrappy": "1" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "resolve": "^1.1.6" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + } + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "path-parse": "^1.0.5" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "glob": "^7.0.5" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } }, - "shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } - }, - "simple-git": { - "version": "1.89.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.89.0.tgz", - "integrity": "sha1-71L+c01QYFZs4Yeyu6zjbCMj40w=", + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "debug": "^3.1.0" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } - }, - "tarball-extract": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tarball-extract/-/tarball-extract-0.0.6.tgz", - "integrity": "sha1-FQ5sAR3mdkeRn67CUDVhHGdh/RA=", + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "tar": "2.2.1", - "wget": "*" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "os-tmpdir": "~1.0.2" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "tmp-promise": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.0.4.tgz", - "integrity": "sha512-76r7LZhAvRJ3kLD/xrPSEGb3aq0tirzMLJKhcchKSkQIiEgXB+RouC0ygReuZX+oiA64taGo+j+1gHTKSG8/Mg==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "bluebird": "^3.5.0", - "tmp": "0.0.33" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "tunnel": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.2.tgz", - "integrity": "sha1-8jvNi3p7ioZCYbIIT2b5MZM5YzQ=" - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "wget": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/wget/-/wget-0.0.1.tgz", - "integrity": "sha1-i7ga8LjmC13yYtPIHlc34fSTHlM=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "tunnel": "0.0.2" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "dev": true, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "requires": { - "mime-db": "~1.35.0" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", + "requires": { + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" + } + } } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "requires": { - "brace-expansion": "^1.1.7" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "is-plain-object": "^2.0.4" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "optional": true, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "requires": { - "minimist": "0.0.8" + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" } } }, - "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", - "dev": true - }, - "moment-timezone": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", - "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", - "dev": true, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "requires": { - "moment": ">= 2.9.0" + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" } }, - "morgan": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "dev": true, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.1", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "mv": { + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prettier": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==" + }, + "pretty-error": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, + "prismjs": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.16.0.tgz", + "integrity": "sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "clipboard": "^2.0.0" } }, - "ncp": { + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "lower-case": "^1.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "node-fingerprint": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/node-fingerprint/-/node-fingerprint-0.0.2.tgz", - "integrity": "sha1-Mcur63GmeufdWn3AQuUcPHWGhQE=", - "dev": true + "property-information": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.0.1.tgz", + "integrity": "sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw==", + "requires": { + "xtend": "^4.0.1" + } }, - "nopt": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz", - "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=", - "dev": true, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "abbrev": "1" + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" } }, - "noptd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/noptd/-/noptd-2.0.1.tgz", - "integrity": "sha1-sDV66CLk1odjFvwveV5N1FauVxU=", - "dev": true, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { - "nopt": "~3.0.1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - } + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "nopter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/nopter/-/nopter-0.3.0.tgz", - "integrity": "sha1-uWkOb6uPJWs35OfM0j4rOEUMxx8=", - "dev": true, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { - "caller-path": "~0.1.0", - "camelcase": "^1.0.2", - "chalk": "~0.5.1", - "cli-table": "~0.3.1", - "eol": "~0.2.0", - "nopt": "^3.0.1", - "object-assign": "^2.0.0", - "splitargs": "~0.0.3" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "^0.2.0" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { - "ansi-regex": "^0.2.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true } } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, - "normalize-path": { + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "remove-trailing-separator": "^1.0.1" + "safe-buffer": "^5.1.0" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "path-key": "^2.0.0" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { - "boolbase": "~1.0.0" + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=" }, - "nunjucks": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.1.3.tgz", - "integrity": "sha512-UtlKKAzg9vdtvURdNy9DjGhiB7qYf2R7Ez+hsucOQG5gYJexSggXSSZ+9IpSDyKOlWu/4rMVPH2oVoANOSqNKA==", - "dev": true, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "chokidar": "^2.0.0", - "postinstall-build": "^5.0.1", - "yargs": "^3.32.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.5.tgz", + "integrity": "sha512-daCb9TD6FZGvJ3sg8da1tRAtIuw29PbKZW++NN4wqkbEvxL+bZpaaYb4xuftW/SpXmgacf1skXl/ddX6CdOlDw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.5" + } + }, + "react-dev-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.3.tgz", + "integrity": "sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ==", + "requires": { + "address": "1.0.3", + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "cross-spawn": "5.1.0", + "detect-port-alt": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.5.11", + "global-modules": "1.0.0", + "gzip-size": "3.0.0", + "inquirer": "3.3.0", + "is-root": "1.0.0", + "opn": "5.1.0", + "react-error-overlay": "^3.0.0", + "recursive-readdir": "2.2.1", + "shell-quote": "1.6.1", + "sockjs-client": "1.1.4", + "strip-ansi": "3.0.1", + "text-table": "0.2.0" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "ms": "2.0.0" } }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, + "detect-port-alt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", + "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "color-convert": "^1.9.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "is-descriptor": "^1.0.0" + "ansi-regex": "^3.0.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "is-extendable": "^0.1.0" + "has-flag": "^3.0.0" } } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", "requires": { - "kind-of": "^6.0.0" + "is-wsl": "^1.1.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "os-tmpdir": "~1.0.2" } + } + } + }, + "react-dom": { + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.5.tgz", + "integrity": "sha512-VIEIvZLpFafsfu4kgmftP5L8j7P1f0YThfVTrANMhZUFMDOsA6e0kfR6wxw/8xxKs4NB59TZYbxNdPCDW34x4w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.5" + } + }, + "react-error-overlay": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", + "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + }, + "react-helmet": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.0.tgz", + "integrity": "sha1-qBgR3yExOm1VxfBYxK66XW89l6c=", + "requires": { + "deep-equal": "^1.0.1", + "object-assign": "^4.1.1", + "prop-types": "^15.5.4", + "react-side-effect": "^1.1.0" + } + }, + "react-hot-loader": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.8.0.tgz", + "integrity": "sha512-HY9F0vITYSVmXhAR6tPkMk240nxmoH8+0rca9iO2B82KVguiCiBJkieS0Wb4CeSIzLWecYx3iOcq8dcbnp0bxA==", + "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.11", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.0.2", + "source-map": "^0.7.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "react-icons": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.5.0.tgz", + "integrity": "sha512-LuKUcavgPWjPrRkIdNbsGw8LqcnhfNN0AGCtU4Td1UkOenJSIWbYppSJrD6zi/TDZOHtTs9opu6ZKB/NFWk21g==" + }, + "react-is": { + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", + "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-side-effect": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz", + "integrity": "sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw==", + "requires": { + "exenv": "^1.2.1", + "shallowequal": "^1.0.1" + } + }, + "react-typography": { + "version": "0.16.19", + "resolved": "https://registry.npmjs.org/react-typography/-/react-typography-0.16.19.tgz", + "integrity": "sha512-kV2qLEsdm0x9P4YXQEDVc88tDb4Vg0h/vdVZGgbqaRn8ERvNzV76JHUeOby3vvcUYU5MPd5Kz5DPH9Bhp4I/iw==" + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "recompose": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", + "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", + "requires": { + "@babel/runtime": "^7.0.0", + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "react-lifecycles-compat": "^3.0.2", + "symbol-observable": "^1.0.4" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" } } }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "minimatch": "3.0.3" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", "requires": { - "is-descriptor": "^0.1.0" + "brace-expansion": "^1.0.0" } } } }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true + "redux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", "requires": { - "isobject": "^3.0.0" + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + }, + "regenerator-transform": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", + "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "requires": { + "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" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, + "rehype-autolink-headings": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-2.0.4.tgz", + "integrity": "sha512-qbAbjCsn1rB+0mYD3ynq7KeP0JK2eK4WBKwh3tjmRUGWHQ07NbhWq2APlWEaR8dUK7cFZHSPE4lbnh3v26wKKA==", "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "extend": "^3.0.1", + "hast-util-has-property": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "unist-util-visit": "^1.1.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, + "rehype-parse": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.0.tgz", + "integrity": "sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==", "requires": { - "isobject": "^3.0.1" + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.1" + } + }, + "rehype-raw": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-4.0.0.tgz", + "integrity": "sha512-3fc6EGO7+fumyD7vQrvThsc8xuz7AzPzoAoGnCaTjyZOy/Gc1TBBouYWSjzZxEbW9dit2vq+op2Zyw2EOR0b2A==", + "requires": { + "hast-util-raw": "^5.0.0" + } + }, + "rehype-react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-3.1.0.tgz", + "integrity": "sha512-7SiLiqNudSGkvhrePkdKqdUvngZqzG+PJhdR5EeIFELz2j2ek4aO5DHbxUXYvaZfqUiBDO2Aeq1OROUmxmu+Vg==", + "requires": { + "@mapbox/hast-util-table-cell-style": "^0.1.3", + "has": "^1.0.1", + "hast-to-hyperscript": "^5.0.0" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "hast-to-hyperscript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz", + "integrity": "sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.2.1", + "unist-util-is": "^2.0.0", + "web-namespaces": "^1.1.2" + } + }, + "property-information": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", + "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", + "requires": { + "xtend": "^4.0.1" + } } } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, + "rehype-sanitize": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-2.0.2.tgz", + "integrity": "sha512-HyuFctxWfGAwv6RTC1G/8c9Pw73WxfKUgxJaFt2G+Z6mZbiuKMtOykvYlaJzZ8vkUZKFI637CMztbXwrkCoM0g==", "requires": { - "ee-first": "1.1.1" + "hast-util-sanitize": "^1.1.0" } }, - "on-headers": { + "rehype-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-2.0.2.tgz", + "integrity": "sha512-CDCRfqx4qgfOSDG6t9KoyvrLejrICqhDJu0kNY2r5RhZLr2QHp9gG533nLzp6HLTVT0fSbZbdx8YvqLGpCBjPA==", + "requires": { + "github-slugger": "^1.1.1", + "hast-util-has-property": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-to-string": "^1.0.0", + "unist-util-visit": "^1.1.0" + } + }, + "relay-runtime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-2.0.0.tgz", + "integrity": "sha512-o/LPFHTI6+3FLJXM3Ec4N6hzkKYILVHYRJThNX0UQlMnqjTVPR6NO4qFE2QzzEiUS+lys+qfnvBzSmNbSh1zWQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "fbjs": "^1.0.0" + } + }, + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-rehype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-4.0.0.tgz", + "integrity": "sha512-SwrU3EhLbFSZCp8xFb56B7+LkN1aIdXmu4hEAwyX/27r65oZsNGSV4Rl7kJZl0oF7Gz+Z5iQXZl6tQxJNc4gYQ==", + "requires": { + "mdast-util-to-hast": "^4.0.0" + } + }, + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "requires": { - "wrappy": "1" + "path-parse": "^1.0.5" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "requires": { - "mimic-fn": "^1.0.0" + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, - "openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } + "glob": "^7.1.3" } }, - "ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", - "dev": true, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "lcid": "^1.0.0" + "is-promise": "^2.1.0" } }, - "os-name": { + "run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", - "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", - "dev": true, + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { - "osx-release": "^1.0.0", - "win-release": "^1.0.0" + "aproba": "^1.1.1" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" }, - "osx-release": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", - "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", - "dev": true, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "requires": { - "minimist": "^1.1.0" + "rx-lite": "*" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { - "p-try": "^1.0.0" + "tslib": "^1.9.0" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "p-limit": "^1.1.0" + "ret": "~0.1.10" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "parse-domain": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/parse-domain/-/parse-domain-0.2.2.tgz", - "integrity": "sha1-GImJseLnOYv/PE9P19yhV+tR+sE=", - "dev": true + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, + "scheduler": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", + "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "requires": { - "error-ex": "^1.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, + "scroll-behavior": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/scroll-behavior/-/scroll-behavior-0.9.10.tgz", + "integrity": "sha512-JVJQkBkqMLEM4ATtbHTKare97zhz/qlla9mNttFYY/bcpyOb4BuBGEQ/N9AQWXvshzf6zo9jP60TlphnJ4YPoQ==", "requires": { - "better-assert": "~1.0.0" + "dom-helpers": "^3.2.1", + "invariant": "^2.2.2" } }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "requires": { - "better-assert": "~1.0.0" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", "requires": { - "pinkie-promise": "^2.0.0" + "node-forge": "0.7.5" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "semver": "^5.0.3" } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, + "semver-match": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/semver-match/-/semver-match-0.1.1.tgz", + "integrity": "sha1-58yzH4P9Sg43fWY4ev2Mo6Mptfw=", "requires": { - "through": "~2.3" + "semver": "^5.1.0" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { - "pinkie": "^2.0.0" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "poke-site": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/poke-site/-/poke-site-1.3.1.tgz", - "integrity": "sha512-0ZbwtXviEsPuiYQStx/ZIsBU1McTuHAJzrniH1ciX21mKbHL7Sy7JqxBeHU8NHZhz1AEKB0wX01USVM2qocZYw==", - "dev": true, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "requires": { - "broken-link-checker": "^0.7.8", - "chalk": "^2.3.2", - "cli-truncate": "^1.1.0", - "commander": "^2.15.0", - "md5": "^2.2.1", - "ora": "^2.0.0", - "parse5": "^4.0.0", - "remote-file-size": "^3.0.4" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ms": "2.0.0" } }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", - "dev": true, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "async": "1.5.2", - "is-number-like": "^1.0.3" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postinstall-build": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", - "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", - "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "asap": "~2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", "requires": { - "event-stream": "=3.3.4" + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + } } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "shallow-compare": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/shallow-compare/-/shallow-compare-1.2.2.tgz", + "integrity": "sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg==" }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "shebang-regex": "^1.0.0" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } }, - "randomatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } } } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, + "showdown": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.0.tgz", + "integrity": "sha512-x7xDCRIaOlicbC57nMhGfKamu+ghwsdVkHMttyn+DelwzuHOx4OHCVL/UW/2QOLH7BxfCcCCVVUix3boKXJKXQ==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "yargs": "^10.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "requires": { + "camelcase": "^4.1.0" + } + } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } + "sift": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-5.1.0.tgz", + "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "signedsource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=" }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, + "simple-git": { + "version": "1.110.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.110.0.tgz", + "integrity": "sha512-UYY0rQkknk0P5eb+KW+03F4TevZ9ou0H+LoGaj7iiVgpnZH4wdj/HTViy/1tNNkmIPcmtxuBqXWiYt2YwlRKOQ==", "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "debug": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "resolve": "^1.1.6" + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } } }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } } }, - "remote-file-size": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/remote-file-size/-/remote-file-size-3.0.5.tgz", - "integrity": "sha512-wM0Djgzpd2ob7d79XeScnmRqr6ulJMeLrVJIiW/CYOkIjtvsYV3FPRxNP5HHh2wH/CeHGOWYAKrWEr93EUkSUg==", - "dev": true, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "help": "~3.0.2", - "noptd": "~2.0.0", - "pretty-bytes": "~5.1.0", - "request": "~2.87.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "ms": "2.0.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "is-extendable": "^0.1.0" } }, - "har-schema": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "is-descriptor": "^1.0.0" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "kind-of": "^6.0.0" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + } }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.3.1", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.2.0", + "socket.io-parser": "~3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "ms": "2.0.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "fast-deep-equal": { + "isarray": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" }, - "har-schema": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "websocket-driver": ">=0.5.1" } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, + } + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "ms": "2.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "resp-modifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", - "dev": true, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "debug": "^2.2.0", - "minimatch": "^3.0.2" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, + "source-map-support": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, + "space-separated-tokens": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz", + "integrity": "sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA==", "requires": { - "align-text": "^0.1.1" + "trim": "0.0.1" } }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "dev": true, - "optional": true, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { - "glob": "^6.0.1" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "robot-directives": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/robot-directives/-/robot-directives-0.3.0.tgz", - "integrity": "sha1-F0+x/8KpuXh3MB6HyJs5X0KdH2U=", - "dev": true, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "isbot": "^2.0.0", - "useragent": "^2.1.8" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "robots-txt-guard": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/robots-txt-guard/-/robots-txt-guard-0.1.1.tgz", - "integrity": "sha512-6+nGkE6c2dI9/dmhmNcoMKVwJxlA6sgN/XNo0rm6LLdA0hnj4YkpgrZdhMPl58gJkAqeiHlf4+8tJcLM1tv1Ew==", - "dev": true + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, - "robots-txt-parse": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/robots-txt-parse/-/robots-txt-parse-0.0.4.tgz", - "integrity": "sha1-99HzI/eZIdfpxsS70lBI9umBDXE=", - "dev": true, - "requires": { - "bluebird": "^2.3.5", - "split": "^0.3.0", - "stream-combiner": "^0.2.1", - "through": "^2.3.4" + "spdy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } } } }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true, - "optional": true + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "readable-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "ret": "~0.1.10" + "extend-shallow": "^3.0.0" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "figgy-pudding": "^3.5.1" } }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, - "server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", - "dev": true + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" }, - "set-immediate-shim": { + "state-toggle": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==" }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-extendable": "^0.1.0" + "is-descriptor": "^0.1.0" } } } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, + "store": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/store/-/store-2.0.12.tgz", + "integrity": "sha1-jFNOKguDH3K3X8XxEZhXxE711ZM=" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "requires": { - "shebang-regex": "^1.0.0" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "shebang-regex": { + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, + "string-similarity": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", + "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "lodash.every": "^4.6.0", + "lodash.flattendeep": "^4.4.0", + "lodash.foreach": "^4.5.0", + "lodash.map": "^4.6.0", + "lodash.maxby": "^4.6.0" } }, - "showdown": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.6.tgz", - "integrity": "sha1-kepO47elRIqspoIKTifmkMatdxw=", - "dev": true, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "yargs": "^10.0.3" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } } } }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } }, - "slice-ansi": { + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "style-loader": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", + "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "requires": { - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, + "style-to-object": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.2.tgz", + "integrity": "sha512-GcbtvfsqyKmIPpHeOHZ5Rmwsx2MDJct4W9apmTGcbPTbpA2FcgTFl2Z43Hm4Qb61MWGPNK8Chki7ITiY7lLOow==", "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "css": "2.2.4" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, + "browserslist": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "is-extendable": "^0.1.0" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.1", + "js-yaml": "^3.12.0", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "requires": { - "is-descriptor": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "kind-of": "^6.0.0" + "dom-serializer": "0", + "domelementtype": "1" } + } + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "table": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { - "kind-of": "^6.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "ansi-regex": "^4.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, + "tapable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "requires": { - "kind-of": "^3.2.0" + "execa": "^0.7.0" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "requires": { - "hoek": "2.x.x" + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, + "terser-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.16.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "socket.io-adapter": { + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "requires": { + "hoek": "4.x.x" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-lines": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.1.tgz", + "integrity": "sha512-X+eloHbgJGxczUk1WSjIvn7aC9oN3jVE3rQfRVKcgpavi3jxtCn0VVKtjOBj64Yop96UYn/ujJRpTbCdAF1vyg==" }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", - "dev": true, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "trim-trailing-lines": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==" + }, + "trough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==" + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~2.6.4", - "engine.io-client": "~3.1.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.1.1", - "to-array": "0.1.4" + "glob": "^7.1.2" + } + }, + "ts-invariant": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", + "requires": { + "tslib": "^1.9.3" + } + }, + "ts-pnp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.0.1.tgz", + "integrity": "sha512-Zzg9XH0anaqhNSlDRibNC8Kp+B9KNM0uRIpLpGkGyrgRIttA7zZBhotTSEoEyuDrz3QW2LGtu2dxuk34HzIGnQ==" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" } }, - "socket.io-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", - "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "type-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-of/-/type-of-2.0.1.tgz", + "integrity": "sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI=" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.14.2.tgz", + "integrity": "sha512-aEbgJXV8/KqaVhcedT7xG6d2r+mOvB5ep3eIz1KuB5sc4fDYXcepEEMdU7XSqLFO5hVPu0nllHi1QxX2h/QlpQ==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "has-binary2": "~1.0.2", - "isarray": "2.0.1" + "@types/fs-extra": "^5.0.3", + "@types/handlebars": "^4.0.38", + "@types/highlight.js": "^9.12.3", + "@types/lodash": "^4.14.110", + "@types/marked": "^0.4.0", + "@types/minimatch": "3.0.3", + "@types/shelljs": "^0.8.0", + "fs-extra": "^7.0.0", + "handlebars": "^4.0.6", + "highlight.js": "^9.13.1", + "lodash": "^4.17.10", + "marked": "^0.4.0", + "minimatch": "^3.0.0", + "progress": "^2.0.0", + "shelljs": "^0.8.2", + "typedoc-default-themes": "^0.5.0", + "typescript": "3.2.x" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "ms": "2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "highlight.js": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "marked": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", + "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", + "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", "dev": true } } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "typedoc-default-themes": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", + "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "typescript": { + "version": "3.3.4000", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", + "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", "dev": true }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, + "typography": { + "version": "0.16.19", + "resolved": "https://registry.npmjs.org/typography/-/typography-0.16.19.tgz", + "integrity": "sha512-zfsyjPPB1RaK8TzU3REta6EGDZa++YQ6g/CWw7hy/8xQK1qyzFWisMIw5J+Yg1KyiVgcchmxlgMcMA6JAJ9oew==", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "compass-vertical-rhythm": "^1.4.5", + "decamelize": "^1.2.0", + "gray-percentage": "^2.0.0", + "lodash": "^4.13.1", + "modularscale": "^1.0.2", + "object-assign": "^4.1.0", + "typography-normalize": "^0.16.19" } }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true + "typography-normalize": { + "version": "0.16.19", + "resolved": "https://registry.npmjs.org/typography-normalize/-/typography-normalize-0.16.19.tgz", + "integrity": "sha512-vtnSv/uGBZVbd4e/ZhZB9HKBgKKlWQUXw74+ADIHHxzKp27CEf8PSR8TX1zF2qSyQ9/qMdqLwXYz8yRQFq9JLQ==" }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, + "ua-parser-js": { + "version": "0.7.19", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", + "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" + }, + "uglify-js": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", + "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", + "optional": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } } }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, + "unherit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "requires": { - "through": "2" + "inherits": "^2.0.1", + "xtend": "^4.0.1" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "requires": { - "extend-shallow": "^3.0.0" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, - "splitargs": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", - "integrity": "sha1-/p965lc3GzOxDLgNoUPPgknPazs=", - "dev": true + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" } }, - "start-server-and-test": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.7.12.tgz", - "integrity": "sha512-ArW/prmdjQ6fwK4IQwVS1drKMZJ9hqK4ZdDh5k9qc+LZfFReYmwr4JjEvJ0lgLtTGQyJJr7xIWqXRKMsyxctvA==", - "dev": true, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "bluebird": "3.5.3", - "check-more-types": "2.24.0", - "debug": "4.1.1", - "execa": "0.11.0", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "3.2.0" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "execa": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.11.0.tgz", - "integrity": "sha512-k5AR22vCt1DcfeiRixW46U5tMLtBg44ssdJM9PiXw3D8Bn5qyxFCSnKY/eR22y+ctFDGPqafpaXg2G4Emyua4A==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "pump": "^3.0.0" + "is-extendable": "^0.1.0" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "is-descriptor": "^0.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, - "stream-buffers": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-0.2.6.tgz", - "integrity": "sha1-GBwI1bs2kARfaUAbmuanoM8zE/w=", - "dev": true + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dev": true, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" + "unique-slug": "^2.0.0" } }, - "stream-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-length/-/stream-length-1.0.2.tgz", - "integrity": "sha1-gnfzy+5JpNqrz9tOL0qbXp8snwA=", - "dev": true, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "requires": { - "bluebird": "^2.6.2" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - } + "imurmurhash": "^0.1.4" } }, - "stream-throttle": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", - "dev": true, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { - "commander": "^2.2.0", - "limiter": "^1.0.5" + "crypto-random-string": "^1.0.0" } }, - "string": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz", - "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, + "unist-builder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.3.tgz", + "integrity": "sha512-/KB8GEaoeHRyIqClL+Kam+Y5NWJ6yEiPsAfv1M+O1p+aKGgjR89WwoEHKTyOj17L6kAlqtKpAgv2nWvdbQDEig==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "object-assign": "^4.1.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "unist-util-generated": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.3.tgz", + "integrity": "sha512-qlPeDqnQnd84KIqwphzOR+l02cxjDzvEYEBl84EjmKRrX4eUmjyAo8xJv1SCDhJqNjyHRnBMZWNKAiBtXE6hBg==" + }, + "unist-util-is": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", + "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==" + }, + "unist-util-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.2.tgz", + "integrity": "sha512-npmFu92l/+b1Ao6uGP4I1WFz9hsKv7qleZ4aliw6x0RVu6A9A3tAf57NMpFfzQ02jxRtJZuRn+C8xWT7GWnH0g==" + }, + "unist-util-remove-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", + "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", "requires": { - "safe-buffer": "~5.1.0" + "unist-util-visit": "^1.1.0" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true, - "optional": true + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "unist-util-visit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", + "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", "requires": { - "ansi-regex": "^2.0.0" + "unist-util-visit-parents": "^2.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, + "unist-util-visit-parents": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", + "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", "requires": { - "is-utf8": "^0.2.0" + "unist-util-is": "^2.1.2" } }, - "strip-eof": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" }, - "striptags": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz", - "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI=", - "dev": true + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, - "swig-extras": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/swig-extras/-/swig-extras-0.0.1.tgz", - "integrity": "sha1-tQP+3jcqucJMasaMr2VrzvGHIyg=", - "dev": true, - "requires": { - "markdown": "~0.5.0" + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, - "swig-templates": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/swig-templates/-/swig-templates-2.0.3.tgz", - "integrity": "sha512-QojPTuZWdpznSZWZDB63/grsZuDwT/7geMeGlftbJXDoYBIZEnTcKvz4iwYDv3SwfPX9/B4RtGRSXNnm3S2wwg==", - "dev": true, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "optimist": "~0.6", - "uglify-js": "2.6.0" + "punycode": "^2.1.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, - "tfunk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", - "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", - "dev": true, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "requires": { - "chalk": "^1.1.1", - "object-path": "^0.9.0" + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", - "dev": true, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "requires": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, - "through2-sink": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/through2-sink/-/through2-sink-1.0.0.tgz", - "integrity": "sha1-XxBruh1zMNrTy6XAqxhjkjJWw5k=", - "dev": true, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "requires": { - "through2": "~0.5.1", - "xtend": "~3.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, - "through2-spy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/through2-spy/-/through2-spy-1.2.0.tgz", - "integrity": "sha1-nIkcqcpA4eHkzzHhrFf5TMnSSMs=", - "dev": true, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { - "through2": "~0.5.1", - "xtend": "~3.0.0" + "prepend-http": "^1.0.1" } }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { - "os-homedir": "^1.0.0" + "inherits": "2.0.3" } }, - "titlecase": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/titlecase/-/titlecase-1.1.2.tgz", - "integrity": "sha1-eBE9EQgIa4MmMxoyR96o9aSeqFM=", - "dev": true + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "requires": { - "os-tmpdir": "~1.0.2" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "kind-of": "^3.0.2" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" } } }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, + "vfile-location": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", + "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==" + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", - "dev": true - } + "unist-util-stringify-position": "^1.1.1" } }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "requires": { - "punycode": "^1.4.1" + "indexof": "0.0.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "safe-buffer": "^5.0.1" + "loose-envify": "^1.0.0" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } }, - "typedoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.14.2.tgz", - "integrity": "sha512-aEbgJXV8/KqaVhcedT7xG6d2r+mOvB5ep3eIz1KuB5sc4fDYXcepEEMdU7XSqLFO5hVPu0nllHi1QxX2h/QlpQ==", - "dev": true, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "requires": { - "@types/fs-extra": "^5.0.3", - "@types/handlebars": "^4.0.38", - "@types/highlight.js": "^9.12.3", - "@types/lodash": "^4.14.110", - "@types/marked": "^0.4.0", - "@types/minimatch": "3.0.3", - "@types/shelljs": "^0.8.0", - "fs-extra": "^7.0.0", - "handlebars": "^4.0.6", - "highlight.js": "^9.13.1", - "lodash": "^4.17.10", - "marked": "^0.4.0", - "minimatch": "^3.0.0", - "progress": "^2.0.0", - "shelljs": "^0.8.2", - "typedoc-default-themes": "^0.5.0", - "typescript": "3.2.x" + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.2.tgz", + "integrity": "sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==" + }, + "webpack": { + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", + "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" }, "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", - "dev": true + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "requires": { - "graceful-fs": "^4.1.6" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } - }, - "marked": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", - "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", - "dev": true - }, - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true } } }, - "typedoc-default-themes": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", - "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", - "dev": true - }, - "typescript": { - "version": "3.3.4000", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", - "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true - }, - "uberproto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", - "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=", - "dev": true + "webpack-dev-middleware": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz", + "integrity": "sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" + } }, - "uglify-js": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.0.tgz", - "integrity": "sha1-JeqhzDVQ45QQzu+v0c+7a20V8AE=", - "dev": true, + "webpack-dev-server": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", + "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", "requires": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^4.1.1", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "semver": "^5.6.0", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.5.1", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "xregexp": "4.0.0" } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "requires": { - "is-extendable": "^0.1.0" + "original": "^1.0.0" } }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "isarray": "1.0.0" + "ms": "^2.1.1" } } } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "requires": { + "camelcase": "^4.1.0" + } } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, - "urlcache": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/urlcache/-/urlcache-0.7.0.tgz", - "integrity": "sha512-xOW4t6wJDT07+VunsHwePemyXXRidCSOZ/1RIILJi2XnB+81FA5H0MRvS63/7joTWjGLajcJJGvR5odpbkV6hw==", - "dev": true, - "requires": { - "urlobj": "0.0.11" - } - }, - "urlobj": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/urlobj/-/urlobj-0.0.11.tgz", - "integrity": "sha512-Ncck0WWtuFBbZhSYwKjK1AU2V51V98P/KHUPkaEc+mFy4xkpAHFNyVQT+S5SgtsJAr94e4wiKUucJSfasV2kBw==", - "dev": true, + "webpack-hot-middleware": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.24.3.tgz", + "integrity": "sha512-pPlmcdoR2Fn6UhYjAhp1g/IJy1Yc9hD+T6O9mjRcWV2pFbBjIFoJXhP0CoD0xPOhWJuWXuZXGBga9ybbOdzXpg==", "requires": { - "is-object": "^1.0.1", - "is-string": "^1.0.4", - "object-assign": "^4.1.1" + "ansi-html": "0.0.7", + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "lodash": "^4.17.5" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "wait-on": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.2.0.tgz", - "integrity": "sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "joi": "^13.0.0", - "minimist": "^1.2.0", - "request": "^2.88.0", - "rx": "^4.1.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - } - } + "webpack-stats-plugin": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz", + "integrity": "sha1-KeXxLr/VMVjTHWVqETrB97hhedk=" }, - "warehouse": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/warehouse/-/warehouse-2.2.0.tgz", - "integrity": "sha1-XQnWSUKZK+Zn2PfIagnCuK6gQGI=", - "dev": true, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "requires": { - "JSONStream": "^1.0.7", - "bluebird": "^3.2.2", - "cuid": "~1.3.8", - "graceful-fs": "^4.1.3", - "is-plain-object": "^2.0.1", - "lodash": "^4.2.1" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "win-release": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", - "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", - "dev": true, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "requires": { - "semver": "^5.0.1" + "string-width": "^2.1.1" } }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "requires": { + "errno": "~0.1.7" + } }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", + "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "~1.0.0" } }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" }, "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml-loader": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.5.0.tgz", + "integrity": "sha512-p9QIzcFSNm4mCw/m5NdyMfN4RE4aFZJWRRb01ERVNGCym8VNbKtw3OYZXnvUIkim6U/EjqE/2yIh9F/msShH9A==", + "requires": { + "js-yaml": "^3.5.2" + } }, "yargs": { - "version": "3.32.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", + "camelcase": "^4.1.0", + "cliui": "^3.2.0", "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } + "camelcase": "^4.1.0" } }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yurnalist": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/yurnalist/-/yurnalist-1.0.5.tgz", + "integrity": "sha512-EuLjqX3Q15iVM0UtZa5Ju536uRmklKd2kKhdE5D5fIh8RZmh+pJ8c6wj2oGo0TA+T/Ii2o79cIHCTMfciW8jlA==", + "requires": { + "babel-runtime": "^6.26.0", + "chalk": "^2.1.0", + "cli-table3": "^0.5.1", + "debug": "^4.1.0", + "deep-equal": "^1.0.1", + "detect-indent": "^5.0.0", + "inquirer": "^6.2.0", + "invariant": "^2.2.0", + "is-builtin-module": "^3.0.0", + "is-ci": "^2.0.0", + "leven": "^2.0.0", + "loud-rejection": "^1.2.0", + "node-emoji": "^1.6.1", + "object-path": "^0.11.2", + "read": "^1.0.7", + "rimraf": "^2.5.0", + "semver": "^5.1.0", + "strip-ansi": "^5.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "zen-observable": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", + "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" + }, + "zen-observable-ts": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz", + "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", + "requires": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + }, + "zwitch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.3.tgz", + "integrity": "sha512-aynRpmJDw7JIq6X4NDWJoiK1yVSiG57ArWSg4HLC1SFupX5/bo0Cf4jpX0ifwuzBfxpYBuNSyvMlWNNRuy3cVA==" } } } diff --git a/docs/package.json b/docs/package.json index 2732a22c396..614d61c0e67 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,10 +5,10 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.34" + "gatsby-theme-apollo-docs": "^0.2.36" }, "devDependencies": { "typedoc": "^0.14.2", - "typescript": "^3.3.3333" + "typescript": "^3.3.4000" } } diff --git a/package-lock.json b/package-lock.json index 23da984974c..19f6b7ac326 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5564,7 +5564,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5585,12 +5586,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5605,17 +5608,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5732,7 +5738,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5744,6 +5751,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5758,6 +5766,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5765,12 +5774,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5789,6 +5800,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5869,7 +5881,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5881,6 +5894,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5966,7 +5980,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6002,6 +6017,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6021,6 +6037,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6064,12 +6081,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, From 4642385d043687d7a9a549f75302faf467ae1c72 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Mon, 25 Mar 2019 17:06:52 -0700 Subject: [PATCH 191/230] Upgrade docs theme for right nav improvments --- docs/package-lock.json | 6 +++--- docs/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 577c3f528e2..5b1179d029e 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -6219,9 +6219,9 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.36.tgz", - "integrity": "sha512-BjCa/E4Cs4fN7Md/6SnX620S16Rae1Dz3xNnEr+KDeAwQK0wiB1f9OwdMk4tqHWajMZT3RkOVlnUTpuNhuZ04g==", + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.37.tgz", + "integrity": "sha512-txJMGBplBrmEcYezxnMSL4Xn/y3ejcZEUD3mKUbEjkqFrcrwqIpcGZzb8Ew+8PGefQq2JFu/pKYzjrViAXWuwA==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", diff --git a/docs/package.json b/docs/package.json index 614d61c0e67..3bacac89389 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.36" + "gatsby-theme-apollo-docs": "^0.2.37" }, "devDependencies": { "typedoc": "^0.14.2", From 3484b65a423b91fd852b59337bcde881bdb2c77d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Mar 2019 05:31:07 +0000 Subject: [PATCH 192/230] chore(deps): update dependency @types/node to v10.14.4 --- package-lock.json | 47 ++++++++++++++--------------------------------- package.json | 2 +- 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19f6b7ac326..b6b614c9ca1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1381,9 +1381,9 @@ "dev": true }, "@types/node": { - "version": "10.14.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.3.tgz", - "integrity": "sha512-2lhc7S28vo8FwR3Jv3Ifyd77AxEsx+Nl9ajWiac6/eWuvZ84zPK4RE05pfqcn3acIzlZDpQj5F1rIKQZX3ptLQ==", + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==", "dev": true }, "@types/prop-types": { @@ -5564,8 +5564,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5586,14 +5585,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5608,20 +5605,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5738,8 +5732,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5751,7 +5744,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5766,7 +5758,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5774,14 +5765,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5800,7 +5789,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5881,8 +5869,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5894,7 +5881,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5980,8 +5966,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6017,7 +6002,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6037,7 +6021,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6081,14 +6064,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/package.json b/package.json index cae7238778c..c21250b2bec 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.123", - "@types/node": "10.14.3", + "@types/node": "10.14.4", "@types/react": "16.8.8", "@types/react-dom": "16.8.3", "benchmark": "2.1.4", From 8da31ae9aae8494dc88d369b2c13c88e4dd9b8c1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 Mar 2019 07:34:52 +0000 Subject: [PATCH 193/230] chore(deps): update dependency danger to v7.0.16 --- package-lock.json | 38 +++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6b614c9ca1..33f7dbd94f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,13 +32,21 @@ } }, "@babel/polyfill": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", - "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.0.tgz", + "integrity": "sha512-bVsjsrtsDflIHp5I6caaAa2V25Kzn50HKPL6g3X0P0ni1ks+58cPB8Mz6AOKVuRPgaVdq/OwEUc/1vKqX+Mo4A==", "dev": true, "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "dev": true + } } }, "@babel/runtime": { @@ -3850,9 +3858,9 @@ } }, "danger": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.15.tgz", - "integrity": "sha512-A4G3+5/JW19tsB9o+QWlEofRz9WJgzqhlzaCLWBbav8rc9Y2IEAJY6cnervPdeCR1JEjAq/RCXL2TChOCas6Dg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.16.tgz", + "integrity": "sha512-nbUy2LHmH0xnCz1gNcn5qxka8woHj2M6UgWzRcOUzBl5k8O8Q3ZzeM/Nhzr40upZECu0h7/Hv9PVf/CgP+KCRQ==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", @@ -3925,9 +3933,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", "dev": true }, "supports-color": { @@ -8212,12 +8220,12 @@ "dev": true }, "jsonwebtoken": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz", - "integrity": "sha512-IqEycp0znWHNA11TpYi77bVgyBO/pGESDh7Ajhas+u0ttkGkKYIIAjniL4Bw5+oVejVF+SYkaI7XKfwCCyeTuA==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, "requires": { - "jws": "^3.2.1", + "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", diff --git a/package.json b/package.json index c21250b2bec..a7e1d3decd2 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.15", + "danger": "7.0.16", "fetch-mock": "7.3.1", "flow-bin": "0.95.1", "graphql": "14.1.1", From 68f76a96f0f84e52d82b599408eb78ee9a6f1a1d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 Mar 2019 08:38:01 +0000 Subject: [PATCH 194/230] chore(deps): update dependency rollup to v1.7.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33f7dbd94f3..de0de084076 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11918,20 +11918,20 @@ } }, "rollup": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.0.tgz", - "integrity": "sha512-hjuWSCgoQsFSTsmsNP4AH1l1kfkFqW82gW00V9nL81Zr3JtnKn3rvxh18jUAAEMb7qNoHj21PR5SqbK2mhBgMg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.3.tgz", + "integrity": "sha512-U3/HaZujvGofNZQldfIknKoaNFNRS+j8/uCS/jSy3FrxF9t0FBsgZW4+VXLHG7l1daTgE6+jEy0Dv7cVCB2NPg==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "^11.9.5", + "@types/node": "^11.11.6", "acorn": "^6.1.1" }, "dependencies": { "@types/node": { - "version": "11.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.5.tgz", - "integrity": "sha512-pz6wNe/XwyesgfVX7P6B0hY3TnTAYXk6KSTLdpQfbuq3be+hnMoCuFzE+yLTskPdBwmNiGRL2TAsnF09aRugvQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.12.0.tgz", + "integrity": "sha512-Lg00egj78gM+4aE0Erw05cuDbvX9sLJbaaPwwRtdCdAMnIudqrQZ0oZX98Ek0yiSK/A2nubHgJfvII/rTT2Dwg==", "dev": true }, "acorn": { diff --git a/package.json b/package.json index a7e1d3decd2..d78c54007b6 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "prettier": "1.16.4", "react": "16.8.5", "react-dom": "16.8.5", - "rollup": "1.7.0", + "rollup": "1.7.3", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", From fdbaeeadd54822ab39f1c012352daa8a922c52ef Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 26 Mar 2019 17:00:52 -0700 Subject: [PATCH 195/230] Upgrade docs theme --- docs/package-lock.json | 20 ++++++++++---------- docs/package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 5b1179d029e..a5ae7f13b20 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -6131,9 +6131,9 @@ } }, "gatsby-plugin-google-analytics": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.0.17.tgz", - "integrity": "sha512-3YgF7BPtZqVQDiLmHxQqVNWU0bSIczpwD5zoBzcgkWJ5VvuAQ7K0iSXmm5rWGw4rj8VhGCbrK5NXppATlgRHbg==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.0.18.tgz", + "integrity": "sha512-fW2WKo7onfxr9sVUCKKtDRUVqleVHBp9CMz7xVWnNpiM3+u4KgYWj7VzmjKPr00zgmp/AOEu1L7SUjYMDys0QA==", "requires": { "@babel/runtime": "^7.0.0" } @@ -6195,9 +6195,9 @@ } }, "gatsby-theme-apollo": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.9.tgz", - "integrity": "sha512-7/InzbHXAUYysYDFs+6+a354bCsjJqqmGbtPo8cooRV+OBAt04zxfRLtDMPRInb3hh01HqykJFLLGaWV6WGV5A==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.10.tgz", + "integrity": "sha512-fMPPa+2HEh2ADEpbnMozNZbWSZEVppFTIXpG20pTHzUMPmgMyOeZjQ1jeVSfLozIYg+L+iKbskg3RBbBUVgIlQ==", "requires": { "@emotion/core": "^10.0.7", "@emotion/styled": "^10.0.7", @@ -6219,15 +6219,15 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.37.tgz", - "integrity": "sha512-txJMGBplBrmEcYezxnMSL4Xn/y3ejcZEUD3mKUbEjkqFrcrwqIpcGZzb8Ew+8PGefQq2JFu/pKYzjrViAXWuwA==", + "version": "0.2.39", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.39.tgz", + "integrity": "sha512-AKmWScjcxWklp6bVmYAjZSCSm6jt1mxpZ24OzUqNdpeBv7Wu6Co0PE3LBpO/z6a+MUjNogubqwqkqtOgwlLPhg==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", "gatsby-plugin-google-analytics": "^2.0.17", "gatsby-plugin-less": "^2.0.12", - "gatsby-theme-apollo": "^0.1.9", + "gatsby-theme-apollo": "^0.1.10", "gray-matter": "^4.0.1", "handlebars": "^4.1.0", "hast-util-is-element": "^1.0.2", diff --git a/docs/package.json b/docs/package.json index 3bacac89389..f62e759c9bb 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.37" + "gatsby-theme-apollo-docs": "^0.2.39" }, "devDependencies": { "typedoc": "^0.14.2", From 287bc7c940838fd08b72d4a40bf4e636e6de8a28 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Tue, 26 Mar 2019 17:09:00 -0700 Subject: [PATCH 196/230] Upgrade docs theme --- docs/package-lock.json | 6 +++--- docs/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index a5ae7f13b20..1eca3f8443b 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -6219,9 +6219,9 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.39", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.39.tgz", - "integrity": "sha512-AKmWScjcxWklp6bVmYAjZSCSm6jt1mxpZ24OzUqNdpeBv7Wu6Co0PE3LBpO/z6a+MUjNogubqwqkqtOgwlLPhg==", + "version": "0.2.40", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.40.tgz", + "integrity": "sha512-mjwxveRCrMsVhmmpZd2YZW89CVAWnWgqwfcQp7LOYDybDV/BcmFG3U8FxtzC/heaGVQZ68u/JtmY5h26DxLwsQ==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", diff --git a/docs/package.json b/docs/package.json index f62e759c9bb..1a24743833d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.39" + "gatsby-theme-apollo-docs": "^0.2.40" }, "devDependencies": { "typedoc": "^0.14.2", From 67425b8886400d7959b442dc95f895d2d1208ce7 Mon Sep 17 00:00:00 2001 From: Laurent Sehabiague Date: Wed, 27 Mar 2019 11:24:44 -0400 Subject: [PATCH 197/230] Convert broken markdown to html --- docs/source/essentials/queries.md | 70 +++++++++++++++---------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/source/essentials/queries.md b/docs/source/essentials/queries.md index 8345fb4e5f2..74d284cfebc 100644 --- a/docs/source/essentials/queries.md +++ b/docs/source/essentials/queries.md @@ -243,34 +243,34 @@ If you're looking for an overview of all the props `Query` accepts and its rende The Query component accepts the following props. Only `query` and `children` are **required**.
-
`query`: DocumentNode
-
A GraphQL query document parsed into an AST by `graphql-tag`. **Required**
-
`children`: (result: QueryResult) => React.ReactNode
-
A function returning the UI you want to render based on your query result. **Required**
-
`variables`: { [key: string]: any }
+
query: DocumentNode
+
A GraphQL query document parsed into an AST by graphql-tag. Required
+
children: (result: QueryResult) => React.ReactNode
+
A function returning the UI you want to render based on your query result. Required
+
variables: { [key: string]: any }
An object containing all of the variables your query needs to execute
-
`pollInterval`: number
+
pollInterval: number
Specifies the interval in ms at which you want your component to poll for data. Defaults to 0 (no polling).
-
`notifyOnNetworkStatusChange`: boolean
+
notifyOnNetworkStatusChange: boolean
Whether updates to the network status or network error should re-render your component. Defaults to false.
-
`fetchPolicy`: FetchPolicy
+
fetchPolicy: FetchPolicy
How you want your component to interact with the Apollo cache. Defaults to "cache-first".
-
`errorPolicy`: ErrorPolicy
+
errorPolicy: ErrorPolicy
How you want your component to handle network and GraphQL errors. Defaults to "none", which means we treat GraphQL errors as runtime errors.
-
`ssr`: boolean
+
ssr: boolean
Pass in false to skip your query during server-side rendering.
-
`displayName`: string
+
displayName: string
The name of your component to be displayed in React DevTools. Defaults to 'Query'.
-
`skip`: boolean
+
skip: boolean
If skip is true, the query will be skipped entirely.
-
`onCompleted`: (data: TData | {}) => void
+
onCompleted: (data: TData | {}) => void
A callback executed once your query successfully completes.
-
`onError`: (error: ApolloError) => void
+
onError: (error: ApolloError) => void
A callback executed in the event of an error.
-
`context`: Record
-
Shared context between your Query component and your network interface (Apollo Link). Useful for setting headers from props or sending information to the `request` function of Apollo Boost.
-
`partialRefetch`: boolean
-
If `true`, perform a query `refetch` if the query result is marked as being partial, and the returned data is reset to an empty Object by the Apollo Client `QueryManager` (due to a cache miss). The default value is `false` for backwards-compatibility's sake, but should be changed to true for most use-cases.
+
context: Record
+
Shared context between your Query component and your network interface (Apollo Link). Useful for setting headers from props or sending information to the request function of Apollo Boost.
+
partialRefetch: boolean
+
If true, perform a query refetch if the query result is marked as being partial, and the returned data is reset to an empty Object by the Apollo Client QueryManager (due to a cache miss). The default value is false for backwards-compatibility's sake, but should be changed to true for most use-cases.

Render prop function

@@ -278,30 +278,30 @@ The Query component accepts the following props. Only `query` and `children` are The render prop function that you pass to the `children` prop of `Query` is called with an object (`QueryResult`) that has the following properties. This object contains your query result, plus some helpful functions for refetching, dynamic polling, and pagination.

Next steps

From d0ed6538a017fa081674c0ddc5113e88d2522989 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 27 Mar 2019 14:24:01 -0700 Subject: [PATCH 198/230] Upgrade docs theme to 0.2.41 --- docs/package-lock.json | 14 +++++++------- docs/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 1eca3f8443b..b9623fbc322 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -6195,9 +6195,9 @@ } }, "gatsby-theme-apollo": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.10.tgz", - "integrity": "sha512-fMPPa+2HEh2ADEpbnMozNZbWSZEVppFTIXpG20pTHzUMPmgMyOeZjQ1jeVSfLozIYg+L+iKbskg3RBbBUVgIlQ==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.11.tgz", + "integrity": "sha512-4c+ofzunYWiKBP+muKqYG3GT9bkiVN9Ch18RTa8we3eeorofJQDUTGmFy9Z6XEPyGv0XfsaGwJhVYIqvv7gagQ==", "requires": { "@emotion/core": "^10.0.7", "@emotion/styled": "^10.0.7", @@ -6219,15 +6219,15 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.40", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.40.tgz", - "integrity": "sha512-mjwxveRCrMsVhmmpZd2YZW89CVAWnWgqwfcQp7LOYDybDV/BcmFG3U8FxtzC/heaGVQZ68u/JtmY5h26DxLwsQ==", + "version": "0.2.41", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.41.tgz", + "integrity": "sha512-Ql2WjNYtScjQmhjt4Rdu1wULnlAjUDZNowUkFxnNmlES65TIXmmhbdtH899WQTAH1PgozQ6yXFji18hZZEJgCA==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", "gatsby-plugin-google-analytics": "^2.0.17", "gatsby-plugin-less": "^2.0.12", - "gatsby-theme-apollo": "^0.1.10", + "gatsby-theme-apollo": "^0.1.11", "gray-matter": "^4.0.1", "handlebars": "^4.1.0", "hast-util-is-element": "^1.0.2", diff --git a/docs/package.json b/docs/package.json index 1a24743833d..c3e2d3bf3d5 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.40" + "gatsby-theme-apollo-docs": "^0.2.41" }, "devDependencies": { "typedoc": "^0.14.2", From 774abe0183a646c52ad7554e65376c6b47bdf9a5 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Thu, 28 Mar 2019 15:17:19 -0700 Subject: [PATCH 199/230] Upgrade docs theme to 0.2.43 --- docs/package-lock.json | 28 ++++++++++++++-------------- docs/package.json | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index b9623fbc322..ac12bccc651 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -6219,9 +6219,9 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.41", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.41.tgz", - "integrity": "sha512-Ql2WjNYtScjQmhjt4Rdu1wULnlAjUDZNowUkFxnNmlES65TIXmmhbdtH899WQTAH1PgozQ6yXFji18hZZEJgCA==", + "version": "0.2.43", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.43.tgz", + "integrity": "sha512-JFARnV28jXiju6vRt65j6muBfCh9EWcH4tFGXnwyNc/WZ7I0oVEIJuS0JnbBkOt58nhffLtOHmhPyEFJuB5nnA==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", @@ -10064,14 +10064,14 @@ } }, "react": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.5.tgz", - "integrity": "sha512-daCb9TD6FZGvJ3sg8da1tRAtIuw29PbKZW++NN4wqkbEvxL+bZpaaYb4xuftW/SpXmgacf1skXl/ddX6CdOlDw==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.5" + "scheduler": "^0.13.6" } }, "react-dev-utils": { @@ -10239,14 +10239,14 @@ } }, "react-dom": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.5.tgz", - "integrity": "sha512-VIEIvZLpFafsfu4kgmftP5L8j7P1f0YThfVTrANMhZUFMDOsA6e0kfR6wxw/8xxKs4NB59TZYbxNdPCDW34x4w==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.5" + "scheduler": "^0.13.6" } }, "react-error-overlay": { @@ -10911,9 +10911,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", - "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" diff --git a/docs/package.json b/docs/package.json index c3e2d3bf3d5..618c04f2bea 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.41" + "gatsby-theme-apollo-docs": "^0.2.43" }, "devDependencies": { "typedoc": "^0.14.2", From 84205dd2b15aa18620a719b5b7d26593622cca0c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Mar 2019 05:32:40 +0000 Subject: [PATCH 200/230] chore(deps): update dependency @types/react to v16.8.10 --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index de0de084076..554f19ab8cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1401,9 +1401,9 @@ "dev": true }, "@types/react": { - "version": "16.8.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.8.tgz", - "integrity": "sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==", + "version": "16.8.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.10.tgz", + "integrity": "sha512-7bUQeZKP4XZH/aB4i7k1i5yuwymDu/hnLMhD9NjVZvQQH7ZUgRN3d6iu8YXzx4sN/tNr0bj8jgguk8hhObzGvA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -11197,21 +11197,21 @@ } }, "react": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.5.tgz", - "integrity": "sha512-daCb9TD6FZGvJ3sg8da1tRAtIuw29PbKZW++NN4wqkbEvxL+bZpaaYb4xuftW/SpXmgacf1skXl/ddX6CdOlDw==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.5" + "scheduler": "^0.13.6" }, "dependencies": { "scheduler": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", - "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index d78c54007b6..a0c8d0a6dbf 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.123", "@types/node": "10.14.4", - "@types/react": "16.8.8", + "@types/react": "16.8.10", "@types/react-dom": "16.8.3", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", @@ -86,7 +86,7 @@ "lodash": "4.17.11", "pre-commit": "1.2.2", "prettier": "1.16.4", - "react": "16.8.5", + "react": "16.8.6", "react-dom": "16.8.5", "rollup": "1.7.3", "rollup-plugin-invariant": "0.4.2", From 25a9c36e792e71e7dcb861f69867fe92386e49f8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 Mar 2019 07:29:46 +0000 Subject: [PATCH 201/230] chore(deps): update dependency danger to v7.0.17 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 554f19ab8cb..d94e77c91f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3858,9 +3858,9 @@ } }, "danger": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.16.tgz", - "integrity": "sha512-nbUy2LHmH0xnCz1gNcn5qxka8woHj2M6UgWzRcOUzBl5k8O8Q3ZzeM/Nhzr40upZECu0h7/Hv9PVf/CgP+KCRQ==", + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.17.tgz", + "integrity": "sha512-p/IHC6FE5HAC/LSsQp7Eb/KQ+DjSUYmBZQmANcegCuQNpJh4y6KfS6h2n8WmoOPBdHY950lzSdkPM0icABIg4g==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", diff --git a/package.json b/package.json index a0c8d0a6dbf..8f931a53bcc 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.2.0", - "danger": "7.0.16", + "danger": "7.0.17", "fetch-mock": "7.3.1", "flow-bin": "0.95.1", "graphql": "14.1.1", From 8ca53c13e09144eac4cb9a7f6a849a83a24d4dbd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 Mar 2019 08:32:32 +0000 Subject: [PATCH 202/230] chore(deps): update dependency react-dom to v16.8.6 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d94e77c91f8..20dd2060362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11221,15 +11221,15 @@ } }, "react-dom": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.5.tgz", - "integrity": "sha512-VIEIvZLpFafsfu4kgmftP5L8j7P1f0YThfVTrANMhZUFMDOsA6e0kfR6wxw/8xxKs4NB59TZYbxNdPCDW34x4w==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.5" + "scheduler": "^0.13.6" } }, "react-is": { @@ -12798,9 +12798,9 @@ "dev": true }, "scheduler": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", - "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", diff --git a/package.json b/package.json index 8f931a53bcc..0ed6c5836d6 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "pre-commit": "1.2.2", "prettier": "1.16.4", "react": "16.8.6", - "react-dom": "16.8.5", + "react-dom": "16.8.6", "rollup": "1.7.3", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", From 166f28f5ae9846cfb2ca863b3302f64a23731f54 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 Mar 2019 09:30:56 +0000 Subject: [PATCH 203/230] chore(deps): update dependency rollup to v1.7.4 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 20dd2060362..05bc49c483d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11918,9 +11918,9 @@ } }, "rollup": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.3.tgz", - "integrity": "sha512-U3/HaZujvGofNZQldfIknKoaNFNRS+j8/uCS/jSy3FrxF9t0FBsgZW4+VXLHG7l1daTgE6+jEy0Dv7cVCB2NPg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.4.tgz", + "integrity": "sha512-nc86fETLHdozhRWlW/uNVIQ7ODuA1vU2/L8znAxP9TNMx1NA6GTth3llqoxxCle2kkyui+OfGzbKaQxD60NJjA==", "dev": true, "requires": { "@types/estree": "0.0.39", @@ -11929,9 +11929,9 @@ }, "dependencies": { "@types/node": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.12.0.tgz", - "integrity": "sha512-Lg00egj78gM+4aE0Erw05cuDbvX9sLJbaaPwwRtdCdAMnIudqrQZ0oZX98Ek0yiSK/A2nubHgJfvII/rTT2Dwg==", + "version": "11.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.12.2.tgz", + "integrity": "sha512-c82MtnqWB/CqqK7/zit74Ob8H1dBdV7bK+BcErwtXbe0+nUGkgzq5NTDmRW/pAv2lFtmeNmW95b0zK2hxpeklg==", "dev": true }, "acorn": { diff --git a/package.json b/package.json index 0ed6c5836d6..2dcf795eea4 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "prettier": "1.16.4", "react": "16.8.6", "react-dom": "16.8.6", - "rollup": "1.7.3", + "rollup": "1.7.4", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", From e4ae7fc5d56579f3e08693c543b584cf8819d292 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Apr 2019 07:36:03 +0000 Subject: [PATCH 204/230] chore(deps): update dependency @types/graphql to v14.2.0 --- package-lock.json | 65 ++++++++++++++++++++++++++++++++--------------- package.json | 4 +-- 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05bc49c483d..65c3ebb9c90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1365,9 +1365,9 @@ "dev": true }, "@types/graphql": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.0.7.tgz", - "integrity": "sha512-BoLDjdvLQsXPZLJux3lEZANwGr3Xag56Ngy0U3y8uoRSDdeLcn43H3oBcgZlnd++iOQElBpaRVDHPzEDekyvXQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.2.0.tgz", + "integrity": "sha512-lELg5m6eBOmATWyCZl8qULEOvnPIUG6B443yXKj930glXIgwQirIBPp5rthP2amJW0YSzUg2s5sfgba4mRRCNw==", "dev": true }, "@types/isomorphic-fetch": { @@ -1915,7 +1915,8 @@ "dependencies": { "ts-invariant": { "version": "0.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } @@ -1941,7 +1942,8 @@ "dependencies": { "ts-invariant": { "version": "0.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } @@ -1964,7 +1966,8 @@ "dependencies": { "ts-invariant": { "version": "0.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } @@ -2023,7 +2026,8 @@ "dependencies": { "ts-invariant": { "version": "0.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", + "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", "requires": { "tslib": "^1.9.3" } @@ -5572,7 +5576,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5593,12 +5598,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5613,17 +5620,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5740,7 +5750,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5752,6 +5763,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5766,6 +5778,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5773,12 +5786,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5797,6 +5812,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5877,7 +5893,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5889,6 +5906,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5974,7 +5992,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6010,6 +6029,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6029,6 +6049,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6072,12 +6093,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6563,9 +6586,9 @@ "dev": true }, "graphql": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", - "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.2.1.tgz", + "integrity": "sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==", "dev": true, "requires": { "iterall": "^1.2.2" diff --git a/package.json b/package.json index 2dcf795eea4..68b12718254 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@condenast/bundlesize": "0.18.1", "@octokit/rest": "16.20.0", "@types/benchmark": "1.0.31", - "@types/graphql": "14.0.7", + "@types/graphql": "14.2.0", "@types/isomorphic-fetch": "0.0.35", "@types/jest": "23.3.14", "@types/lodash": "4.14.123", @@ -76,7 +76,7 @@ "danger": "7.0.17", "fetch-mock": "7.3.1", "flow-bin": "0.95.1", - "graphql": "14.1.1", + "graphql": "14.2.1", "graphql-tag": "2.10.1", "isomorphic-fetch": "2.2.1", "jest": "23.6.0", From 0b1788216ed289d02387d155c8011ab48c820db3 Mon Sep 17 00:00:00 2001 From: patrikniebur <1nibi8@gmail.com> Date: Wed, 3 Apr 2019 14:51:42 +1300 Subject: [PATCH 205/230] Update local-state.md (#4632) Fix field reference word --- docs/source/essentials/local-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index 9e51f5a90ca..f4cbb9e89f4 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -589,7 +589,7 @@ export default function Launch({ launchId }) { } ``` -In the above example we're using a React Apollo `Query` component to run the `GET_LAUNCH_DETAILS` query. The `@client` based `isInClient` field is configured to pull its data from the following resolver: +In the above example we're using a React Apollo `Query` component to run the `GET_LAUNCH_DETAILS` query. The `@client` based `isInCart` field is configured to pull its data from the following resolver: ```js import { GET_CART_ITEMS } from './pages/cart'; From 778b6b633040d195e43043870187e6dda07375af Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Wed, 3 Apr 2019 11:22:14 -0700 Subject: [PATCH 206/230] Upgrade docs theme to 0.2.44 (#4657) --- docs/package-lock.json | 12 ++++++------ docs/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index ac12bccc651..959a8988b10 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1162,9 +1162,9 @@ }, "dependencies": { "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.0.tgz", + "integrity": "sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg==" } } }, @@ -6219,9 +6219,9 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.43", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.43.tgz", - "integrity": "sha512-JFARnV28jXiju6vRt65j6muBfCh9EWcH4tFGXnwyNc/WZ7I0oVEIJuS0JnbBkOt58nhffLtOHmhPyEFJuB5nnA==", + "version": "0.2.44", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.44.tgz", + "integrity": "sha512-Pd1pKn6owxqMgNn2DC6GV8WhcVdizlf/LgfgzgIvqhgLIronXRapob5tkc4T5TBh20OLFDK8oe4ex5cKsN/unQ==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", diff --git a/docs/package.json b/docs/package.json index 618c04f2bea..de1c5a18129 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.43" + "gatsby-theme-apollo-docs": "^0.2.44" }, "devDependencies": { "typedoc": "^0.14.2", From fb22b760ea57ecd1b80a59784b45355d0491ac48 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Apr 2019 06:31:38 +0000 Subject: [PATCH 207/230] chore(deps): update dependency @octokit/rest to v16.23.2 --- package-lock.json | 19 +++++++++++++------ package.json | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 65c3ebb9c90..57fa4f5a3da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1313,12 +1313,13 @@ } }, "@octokit/rest": { - "version": "16.20.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.20.0.tgz", - "integrity": "sha512-tN5j64P6QymlMzKo94DG1LRNHCwMnLg5poZlVhsCfkHhEWKpofZ1qBDr2/0w6qDLav4EA1XXMmZdNpvGhc9BDQ==", + "version": "16.23.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.23.2.tgz", + "integrity": "sha512-ZxiZMaCuqBG/IsbgNRVfGwYsvBb5DjHuMGjJgOrinT+/b+1j1U7PiGyRkHDJdjTGA6N/PsMC2lP2ZybX9579iA==", "dev": true, "requires": { "@octokit/request": "2.4.2", + "atob-lite": "^2.0.0", "before-after-hook": "^1.4.0", "btoa-lite": "^1.0.0", "deprecation": "^1.0.1", @@ -2261,6 +2262,12 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -9294,9 +9301,9 @@ } }, "macos-release": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.1.0.tgz", - "integrity": "sha512-8TCbwvN1mfNxbBv0yBtfyIFMo3m1QsNbKHv7PYIp/abRBKVQBXN7ecu3aeGGgT18VC/Tf397LBDGZF9KBGJFFw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz", + "integrity": "sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==", "dev": true }, "make-dir": { diff --git a/package.json b/package.json index 68b12718254..6b3d46bc512 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@condenast/bundlesize": "0.18.1", - "@octokit/rest": "16.20.0", + "@octokit/rest": "16.23.2", "@types/benchmark": "1.0.31", "@types/graphql": "14.2.0", "@types/isomorphic-fetch": "0.0.35", From c1a1a65870d2d4ae2d014252c67c4215e9d10887 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 08:34:39 +0000 Subject: [PATCH 208/230] chore(deps): update dependency @types/react to v16.8.12 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57fa4f5a3da..b6467fbf68d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1402,9 +1402,9 @@ "dev": true }, "@types/react": { - "version": "16.8.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.10.tgz", - "integrity": "sha512-7bUQeZKP4XZH/aB4i7k1i5yuwymDu/hnLMhD9NjVZvQQH7ZUgRN3d6iu8YXzx4sN/tNr0bj8jgguk8hhObzGvA==", + "version": "16.8.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.12.tgz", + "integrity": "sha512-MZZiv11BQhsxFp5DHDmRKBi6Nv3jwOhRiFFDE7ZJ1+rb52gdOd9y/qY0+5wyV/PQVK9926wFMjpQj3BJ18pb4Q==", "dev": true, "requires": { "@types/prop-types": "*", diff --git a/package.json b/package.json index 6b3d46bc512..cf392e288a4 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@types/jest": "23.3.14", "@types/lodash": "4.14.123", "@types/node": "10.14.4", - "@types/react": "16.8.10", + "@types/react": "16.8.12", "@types/react-dom": "16.8.3", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", From ffdcc2e7849f711f4e4a7fd8432d49a7e95f1fbf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 09:36:10 +0000 Subject: [PATCH 209/230] chore(deps): update dependency codecov to v3.3.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6467fbf68d..0f507195408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3442,9 +3442,9 @@ "dev": true }, "codecov": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.2.0.tgz", - "integrity": "sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.3.0.tgz", + "integrity": "sha512-S70c3Eg9SixumOvxaKE/yKUxb9ihu/uebD9iPO2IR73IdP4i6ZzjXEULj3d0HeyWPr0DqBfDkjNBWxURjVO5hw==", "dev": true, "requires": { "argv": "^0.0.2", diff --git a/package.json b/package.json index cf392e288a4..8a06d3bd757 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@types/react-dom": "16.8.3", "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", - "codecov": "3.2.0", + "codecov": "3.3.0", "danger": "7.0.17", "fetch-mock": "7.3.1", "flow-bin": "0.95.1", From 6a1714124d13a06b192479d274db1e6054279b78 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 10:35:37 +0000 Subject: [PATCH 210/230] chore(deps): update dependency danger to v7.0.19 --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f507195408..ebb9a78a81e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,9 +32,9 @@ } }, "@babel/polyfill": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.0.tgz", - "integrity": "sha512-bVsjsrtsDflIHp5I6caaAa2V25Kzn50HKPL6g3X0P0ni1ks+58cPB8Mz6AOKVuRPgaVdq/OwEUc/1vKqX+Mo4A==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.3.tgz", + "integrity": "sha512-rkv8WIvJshA5Ev8iNMGgz5WZkRtgtiPexiT7w5qevGTuT7ZBfM3de9ox1y9JR5/OXb/sWGBbWlHNa7vQKqku3Q==", "dev": true, "requires": { "core-js": "^2.6.5", @@ -3869,9 +3869,9 @@ } }, "danger": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.17.tgz", - "integrity": "sha512-p/IHC6FE5HAC/LSsQp7Eb/KQ+DjSUYmBZQmANcegCuQNpJh4y6KfS6h2n8WmoOPBdHY950lzSdkPM0icABIg4g==", + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/danger/-/danger-7.0.19.tgz", + "integrity": "sha512-vqV3kF71asWTxa/YvOfDg379SS20MwAp33uoHKz+hcd8zlmLSpA90V+ZonNsNbQkbsuTTjQGtLVlGVBVezL5DA==", "dev": true, "requires": { "@babel/polyfill": "^7.2.5", @@ -3944,9 +3944,9 @@ } }, "p-try": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "supports-color": { diff --git a/package.json b/package.json index 8a06d3bd757..01cb4b054ad 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "benchmark": "2.1.4", "check-if-folder-contents-changed-in-git-commit-range": "1.0.0", "codecov": "3.3.0", - "danger": "7.0.17", + "danger": "7.0.19", "fetch-mock": "7.3.1", "flow-bin": "0.95.1", "graphql": "14.2.1", From d129aee1296e325e202c655a99df9c643d801c01 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 11:36:22 +0000 Subject: [PATCH 211/230] chore(deps): update dependency flow-bin to v0.96.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ebb9a78a81e..8942c804505 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5414,9 +5414,9 @@ } }, "flow-bin": { - "version": "0.95.1", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.95.1.tgz", - "integrity": "sha512-06IOC/pqPMNRYtC6AMZEWYR9Fi6UdBC7gImGinPuNUpPZFnP5E9/0cBCl3DWrH4zz/gSM2HdDilU7vPGpYIr2w==", + "version": "0.96.0", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.96.0.tgz", + "integrity": "sha512-OSxERs0EdhVxEVCst/HmlT/RcnXsQQIRqcfK9J9wC8/93JQj+xQz4RtlsmYe1PSRYaozuDLyPS5pIA81Zwzaww==", "dev": true }, "flush-write-stream": { diff --git a/package.json b/package.json index 01cb4b054ad..e711e8e2e73 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "codecov": "3.3.0", "danger": "7.0.19", "fetch-mock": "7.3.1", - "flow-bin": "0.95.1", + "flow-bin": "0.96.0", "graphql": "14.2.1", "graphql-tag": "2.10.1", "isomorphic-fetch": "2.2.1", From a0d88d3a0225141d62bc1f982dbcee80f82c06ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 12:37:08 +0000 Subject: [PATCH 212/230] chore(deps): update dependency rollup to v1.9.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8942c804505..abdf5a3ed10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11948,20 +11948,20 @@ } }, "rollup": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.7.4.tgz", - "integrity": "sha512-nc86fETLHdozhRWlW/uNVIQ7ODuA1vU2/L8znAxP9TNMx1NA6GTth3llqoxxCle2kkyui+OfGzbKaQxD60NJjA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.9.0.tgz", + "integrity": "sha512-cNZx9MLpKFMSaObdVFeu8nXw8gfw6yjuxWjt5mRCJcBZrAJ0NHAYwemKjayvYvhLaNNkf3+kS2DKRKS5J6NRVg==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "^11.11.6", + "@types/node": "^11.13.0", "acorn": "^6.1.1" }, "dependencies": { "@types/node": { - "version": "11.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.12.2.tgz", - "integrity": "sha512-c82MtnqWB/CqqK7/zit74Ob8H1dBdV7bK+BcErwtXbe0+nUGkgzq5NTDmRW/pAv2lFtmeNmW95b0zK2hxpeklg==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", + "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==", "dev": true }, "acorn": { diff --git a/package.json b/package.json index e711e8e2e73..ea72511b0f5 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "prettier": "1.16.4", "react": "16.8.6", "react-dom": "16.8.6", - "rollup": "1.7.4", + "rollup": "1.9.0", "rollup-plugin-invariant": "0.4.2", "rollup-plugin-local-resolve": "1.0.7", "rollup-plugin-node-resolve": "4.0.1", From 2355711505fe4eb0d711f95414e89175706c20b0 Mon Sep 17 00:00:00 2001 From: Trevor Blades Date: Fri, 5 Apr 2019 15:00:09 -0700 Subject: [PATCH 213/230] Upgrade docs theme to 0.2.45 (#4675) --- docs/package-lock.json | 26 +++++++++++++------------- docs/package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 959a8988b10..0ffb65cf025 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -1162,9 +1162,9 @@ }, "dependencies": { "camelcase": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.0.tgz", - "integrity": "sha512-Y05ICatFYPAfykDIB7VdwSJ0LUl1yq/BwO2OpyGGLjiRe1fgzTwVypPiWnzkGFOVFHXrCXUNBl86bpjBhZWSJg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" } } }, @@ -6164,9 +6164,9 @@ } }, "gatsby-plugin-react-helmet": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.0.11.tgz", - "integrity": "sha512-VBCO7qlQMBfFQadpNauvZO1CYKVF5aE52jiNEXMiYNuchJWLBEy3FXN/FHdCGo37KipKlkh0iDXCRLSGY00TqQ==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.0.12.tgz", + "integrity": "sha512-x1DXKceTuEDePN9HcQymzQ+oBgmT3PKVQLSFbxrOECiC71cQRp03FJK0i/ClAkMJ3IJNLCGJDvi7dKydkc6dvw==", "requires": { "@babel/runtime": "^7.0.0" } @@ -6195,9 +6195,9 @@ } }, "gatsby-theme-apollo": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.11.tgz", - "integrity": "sha512-4c+ofzunYWiKBP+muKqYG3GT9bkiVN9Ch18RTa8we3eeorofJQDUTGmFy9Z6XEPyGv0XfsaGwJhVYIqvv7gagQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo/-/gatsby-theme-apollo-0.1.12.tgz", + "integrity": "sha512-pNA7OIzJheLsVfu1T7GZEan691AhA6HbdNyqKReu0Z+ktc2FEFhlmNRrohdFkziCm1gQ6f0f+M+rPYrzaktCmA==", "requires": { "@emotion/core": "^10.0.7", "@emotion/styled": "^10.0.7", @@ -6219,15 +6219,15 @@ } }, "gatsby-theme-apollo-docs": { - "version": "0.2.44", - "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.44.tgz", - "integrity": "sha512-Pd1pKn6owxqMgNn2DC6GV8WhcVdizlf/LgfgzgIvqhgLIronXRapob5tkc4T5TBh20OLFDK8oe4ex5cKsN/unQ==", + "version": "0.2.45", + "resolved": "https://registry.npmjs.org/gatsby-theme-apollo-docs/-/gatsby-theme-apollo-docs-0.2.45.tgz", + "integrity": "sha512-FtOg03mxC+eFUlI2JWeE5l3iQj8jcTGxqSFQ7ot+04AlEaOccAA4qnJ+WSgnxz4bG5pC2lPqIyf4RS84Cuy5dQ==", "requires": { "detab": "^2.0.1", "gatsby": "^2.2.6", "gatsby-plugin-google-analytics": "^2.0.17", "gatsby-plugin-less": "^2.0.12", - "gatsby-theme-apollo": "^0.1.11", + "gatsby-theme-apollo": "^0.1.12", "gray-matter": "^4.0.1", "handlebars": "^4.1.0", "hast-util-is-element": "^1.0.2", diff --git a/docs/package.json b/docs/package.json index de1c5a18129..ccde53c244e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "gatsby": "^2.2.6", - "gatsby-theme-apollo-docs": "^0.2.44" + "gatsby-theme-apollo-docs": "^0.2.45" }, "devDependencies": { "typedoc": "^0.14.2", From caf7b1132116276cdbe731119d1df39d66425b7c Mon Sep 17 00:00:00 2001 From: Danny Hurlburt Date: Fri, 5 Apr 2019 17:51:27 -0600 Subject: [PATCH 214/230] Fix minor typo in why-apollo.md (#4598) --- docs/source/why-apollo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/why-apollo.md b/docs/source/why-apollo.md index b88bd637275..001b7fc6623 100644 --- a/docs/source/why-apollo.md +++ b/docs/source/why-apollo.md @@ -126,7 +126,7 @@ This flexibility makes it simple to create your dream client by building extensi - [apollo-storybook-decorator](https://github.com/abhiaiyer91/apollo-storybook-decorator): Wrap your React Storybook stories with Apollo Client ([@abhiaiyer91](https://github.com/abhiaiyer91)) - [AppSync by AWS](https://blog.apollographql.com/aws-appsync-powered-by-apollo-df61eb706183): Amazon's real-time GraphQL client uses Apollo Client under the hood -When you choose Apollo to manage your data, you also gain the support of our amazing community. There are thousands ov developers in our [Apollo Spectrum community](https://spectrum.chat/apollo) for you to share ideas with. You can also read articles on best practices and our announcements on the [Apollo blog](https://blog.apollographql.com/), updated weekly. +When you choose Apollo to manage your data, you also gain the support of our amazing community. There are thousands of developers in our [Apollo Spectrum community](https://spectrum.chat/apollo) for you to share ideas with. You can also read articles on best practices and our announcements on the [Apollo blog](https://blog.apollographql.com/), updated weekly.

Case studies

From a2d89d8efb8dffaf2f789a3b6d900d5fba21a320 Mon Sep 17 00:00:00 2001 From: Marius Craciunoiu Date: Fri, 5 Apr 2019 17:57:16 -0600 Subject: [PATCH 215/230] Fix apollo-boost PresetConfig.uri type to accept string | UriFunction (#4612) --- packages/apollo-boost/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/apollo-boost/src/index.ts b/packages/apollo-boost/src/index.ts index e0813e2935d..43634ce91b4 100644 --- a/packages/apollo-boost/src/index.ts +++ b/packages/apollo-boost/src/index.ts @@ -4,7 +4,7 @@ export * from 'apollo-link'; export * from 'apollo-cache-inmemory'; import { Operation, ApolloLink, Observable } from 'apollo-link'; -import { HttpLink } from 'apollo-link-http'; +import { HttpLink, UriFunction } from 'apollo-link-http'; import { onError, ErrorLink } from 'apollo-link-error'; import { ApolloCache } from 'apollo-cache'; import { InMemoryCache, CacheResolverMap } from 'apollo-cache-inmemory'; @@ -28,7 +28,7 @@ type ClientStateConfig = { export interface PresetConfig { request?: (operation: Operation) => Promise; - uri?: string; + uri?: string | UriFunction; credentials?: string; headers?: any; fetch?: GlobalFetch['fetch']; From 42814b5c97e865d95133620815e539474971d2f2 Mon Sep 17 00:00:00 2001 From: Tom B Date: Fri, 5 Apr 2019 19:03:53 -0500 Subject: [PATCH 216/230] Add missing `graphql-tag` dependency (#4605) Migration from apollo-boost is missing `graphql-tag` as a dependency that provides the same default as Apollo Boost. --- docs/source/advanced/boost-migration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/advanced/boost-migration.md b/docs/source/advanced/boost-migration.md index 203f3fda7fd..693cee4601f 100644 --- a/docs/source/advanced/boost-migration.md +++ b/docs/source/advanced/boost-migration.md @@ -28,7 +28,7 @@ const client = new ApolloClient({ To create a basic client with the same defaults as Apollo Boost, first you need to install some packages: ```bash -npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link-error apollo-link --save +npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link-error apollo-link graphql-tag --save ``` To complete the process, you'll need to manually attach your `cache` and `link` to the client: @@ -121,7 +121,7 @@ const client = new ApolloClient({ To create a client with the same defaults as Apollo Boost, first you need to install some packages: ```bash -npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link apollo-link-state apollo-link-error --save +npm install apollo-client apollo-cache-inmemory apollo-link-http apollo-link apollo-link-state apollo-link-error graphql-tag --save ``` Here's how we would create our new client using the configuration options above from Apollo Boost: From 5a52c230369d1d5c9079861c1616f71ae1e29804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars-J=C3=B8rgen=20Kristiansen?= Date: Sat, 6 Apr 2019 17:49:56 +0200 Subject: [PATCH 217/230] Enable custom subscribeToMore type parameters (#4653) Support using different type parameters in subscribeToMore than those given by the query. --- packages/apollo-client/src/core/ObservableQuery.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 92d421a4556..36c9d3a7acb 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -389,8 +389,11 @@ export class ObservableQuery< // XXX the subscription variables are separate from the query variables. // if you want to update subscription variables, right now you have to do that separately, // and you can only do it by stopping the subscription and then subscribing again with new variables. - public subscribeToMore( - options: SubscribeToMoreOptions, + public subscribeToMore< + TSubscriptionData = TData, + TSubscriptionVariables = TVariables, + >( + options: SubscribeToMoreOptions, ) { const subscription = this.queryManager .startGraphQLSubscription({ From bac653b18cc11a758393ea0488bd66484aaa7973 Mon Sep 17 00:00:00 2001 From: Tim Hwang Date: Mon, 8 Apr 2019 10:44:54 -0400 Subject: [PATCH 218/230] feat(apollo-client): Improve subscribeToMore type parameters (#4608) Addresses #4246. --- .../src/__tests__/subscribeToMore.ts | 72 +++++++++++++++++++ .../src/core/watchQueryOptions.ts | 10 +-- 2 files changed, 77 insertions(+), 5 deletions(-) diff --git a/packages/apollo-client/src/__tests__/subscribeToMore.ts b/packages/apollo-client/src/__tests__/subscribeToMore.ts index 9778db7ed92..75558cd386d 100644 --- a/packages/apollo-client/src/__tests__/subscribeToMore.ts +++ b/packages/apollo-client/src/__tests__/subscribeToMore.ts @@ -337,4 +337,76 @@ describe('subscribeToMore', () => { done(); }); // TODO add a test that checks that subscriptions are cancelled when obs is unsubscribed from. + + it('allows specification of custom types for variables and payload (#4246)', done => { + interface TypedOperation extends Operation { + variables: { + someNumber: number; + }; + } + const typedReq = { + request: { query, variables: { someNumber: 1 } } as TypedOperation, + result, + }; + interface TypedSubscriptionVariables { + someString: string; + } + + let latestResult: any = null; + const wSLink = mockObservableLink(); + const httpLink = mockSingleLink(typedReq); + + const link = ApolloLink.split(isSub, wSLink, httpLink); + let counter = 0; + + const client = new ApolloClient({ + cache: new InMemoryCache({ addTypename: false }), + link, + }); + + const obsHandle = client.watchQuery< + typeof typedReq['result']['data'], + typeof typedReq['request']['variables'] + >({ + query, + variables: { someNumber: 1 }, + }); + + const sub = obsHandle.subscribe({ + next(queryResult) { + latestResult = queryResult; + counter++; + }, + }); + + obsHandle.subscribeToMore({ + document: gql` + subscription newValues { + name + } + `, + variables: { + someString: 'foo', + }, + updateQuery: (_, { subscriptionData }) => { + return { entry: { value: subscriptionData.data.name } }; + }, + }); + + setTimeout(() => { + sub.unsubscribe(); + expect(counter).toBe(3); + expect(stripSymbols(latestResult)).toEqual({ + data: { entry: { value: 'Amanda Liu' } }, + loading: false, + networkStatus: 7, + stale: false, + }); + done(); + }, 15); + + for (let i = 0; i < 2; i++) { + wSLink.simulateResult(results[i]); + } + }); }); diff --git a/packages/apollo-client/src/core/watchQueryOptions.ts b/packages/apollo-client/src/core/watchQueryOptions.ts index 7a155fca653..6b7a945d3dc 100644 --- a/packages/apollo-client/src/core/watchQueryOptions.ts +++ b/packages/apollo-client/src/core/watchQueryOptions.ts @@ -113,24 +113,24 @@ export interface FetchMoreQueryOptions { export type UpdateQueryFn< TData = any, - TVariables = OperationVariables, + TSubscriptionVariables = OperationVariables, TSubscriptionData = TData > = ( previousQueryResult: TData, options: { subscriptionData: { data: TSubscriptionData }; - variables?: TVariables; + variables?: TSubscriptionVariables; }, ) => TData; export type SubscribeToMoreOptions< TData = any, - TVariables = OperationVariables, + TSubscriptionVariables = OperationVariables, TSubscriptionData = TData > = { document: DocumentNode; - variables?: TVariables; - updateQuery?: UpdateQueryFn; + variables?: TSubscriptionVariables; + updateQuery?: UpdateQueryFn; onError?: (error: Error) => void; }; From 5c0760b1150f96a4fe9445fc5f67021015eb18f7 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 8 Apr 2019 11:59:15 -0400 Subject: [PATCH 219/230] Fix updateQuery type parameters in subscribeToMore. Follow-up to #4653 and #4608. --- .../apollo-client/src/core/ObservableQuery.ts | 37 ++++++++++--------- .../apollo-client/src/core/QueryManager.ts | 8 ++-- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts index 36c9d3a7acb..b39cb647d42 100644 --- a/packages/apollo-client/src/core/ObservableQuery.ts +++ b/packages/apollo-client/src/core/ObservableQuery.ts @@ -11,7 +11,6 @@ import { FetchMoreQueryOptions, SubscribeToMoreOptions, ErrorPolicy, - UpdateQueryFn, } from './watchQueryOptions'; import { QueryStoreValue } from '../data/queries'; @@ -391,9 +390,13 @@ export class ObservableQuery< // and you can only do it by stopping the subscription and then subscribing again with new variables. public subscribeToMore< TSubscriptionData = TData, - TSubscriptionVariables = TVariables, + TSubscriptionVariables = TVariables >( - options: SubscribeToMoreOptions, + options: SubscribeToMoreOptions< + TData, + TSubscriptionVariables, + TSubscriptionData + >, ) { const subscription = this.queryManager .startGraphQLSubscription({ @@ -402,16 +405,14 @@ export class ObservableQuery< }) .subscribe({ next: (subscriptionData: { data: TSubscriptionData }) => { - if (options.updateQuery) { - this.updateQuery((previous, { variables }) => - (options.updateQuery as UpdateQueryFn< - TData, - TVariables, - TSubscriptionData - >)(previous, { - subscriptionData, - variables, - }), + const { updateQuery } = options; + if (updateQuery) { + this.updateQuery( + (previous, { variables }) => + updateQuery(previous, { + subscriptionData, + variables, + }), ); } }, @@ -532,20 +533,22 @@ export class ObservableQuery< } } - public updateQuery( + public updateQuery( mapFn: ( previousQueryResult: TData, - options: UpdateQueryOptions, + options: UpdateQueryOptions, ) => TData, ): void { const { previousResult, variables, document, - } = this.queryManager.getQueryWithPreviousResult(this.queryId); + } = this.queryManager.getQueryWithPreviousResult( + this.queryId, + ); const newResult = tryFunctionOrLogError(() => - mapFn(previousResult, { variables: variables as TVariables }), + mapFn(previousResult, { variables }), ); if (newResult) { diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 3e89c572f42..4fc782ad515 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -1161,14 +1161,14 @@ export class QueryManager { } } - public getQueryWithPreviousResult( - queryIdOrObservable: string | ObservableQuery, + public getQueryWithPreviousResult( + queryIdOrObservable: string | ObservableQuery, ): { previousResult: any; - variables: OperationVariables | undefined; + variables: TVariables | undefined; document: DocumentNode; } { - let observableQuery: ObservableQuery; + let observableQuery: ObservableQuery; if (typeof queryIdOrObservable === 'string') { const { observableQuery: foundObserveableQuery } = this.getQuery( queryIdOrObservable, From 58cb6d5437c00e42487052b727eb30190e31fbad Mon Sep 17 00:00:00 2001 From: Bradley Ayers Date: Tue, 9 Apr 2019 03:42:56 +1000 Subject: [PATCH 220/230] Avoid updating cache watches when fetchPolicy is no-cache (#4573) Avoid updating (and later invalidating) cache watches when fetchPolicy is no-cache. Part of #3452. --- CHANGELOG.md | 3 +++ packages/apollo-client/src/core/QueryManager.ts | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90f7a64cdfc..6a4493c8038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ ``` which allows the client to avoid taking defensive snapshots of past results using `cloneDeep`, as explained by [@benjamn](https://github.com/benjamn) in [#4543](https://github.com/apollographql/apollo-client/pull/4543). +- Avoid updating (and later invalidating) cache watches when `fetchPolicy` is `'no-cache'`.
+ [@bradleyayers](https://github.com/bradleyayers) in [PR #4573](https://github.com/apollographql/apollo-client/pull/4573), part of [issue #3452](https://github.com/apollographql/apollo-client/issues/3452) + ### Apollo Cache In-Memory - Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
diff --git a/packages/apollo-client/src/core/QueryManager.ts b/packages/apollo-client/src/core/QueryManager.ts index 4fc782ad515..3c69b2eee4d 100644 --- a/packages/apollo-client/src/core/QueryManager.ts +++ b/packages/apollo-client/src/core/QueryManager.ts @@ -437,7 +437,9 @@ export class QueryManager { const requestId = this.generateRequestId(); // set up a watcher to listen to cache updates - const cancel = this.updateQueryWatch(queryId, query, updatedOptions); + const cancel = fetchPolicy !== 'no-cache' + ? this.updateQueryWatch(queryId, query, updatedOptions) + : undefined; // Initialize query in store with unique requestId this.setQuery(queryId, () => ({ From f29be7a1b98f7967c12d0ae97031a75a019d777e Mon Sep 17 00:00:00 2001 From: Laurin Quast Date: Mon, 8 Apr 2019 19:48:52 +0200 Subject: [PATCH 221/230] docs(apollo-link-ws): change example to prevent a typescript error (#4553) The `getMainDefinition` function returns a union type of `OperationDefinitionNode | FragmentDefinitionNode`, but `FragmentDefinitionNode` does not have an `operation` field, so the destructuring in this example was unsafe. Fortunately, `definition.operation` becomes safe once we ensure that `definition.kind === 'OperationDefinition'`. --- docs/source/advanced/subscriptions.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/source/advanced/subscriptions.md b/docs/source/advanced/subscriptions.md index 8647bc26f3d..d2b16b35791 100644 --- a/docs/source/advanced/subscriptions.md +++ b/docs/source/advanced/subscriptions.md @@ -106,8 +106,11 @@ const wsLink = new WebSocketLink({ const link = split( // split based on operation type ({ query }) => { - const { kind, operation } = getMainDefinition(query); - return kind === 'OperationDefinition' && operation === 'subscription'; + const definition = getMainDefinition(query); + return ( + definition.kind === 'OperationDefinition' && + definition.operation === 'subscription' + ); }, wsLink, httpLink, From c3e866e71d74ff57123dceaccab155aacbe5151d Mon Sep 17 00:00:00 2001 From: Noel Varanda Date: Mon, 8 Apr 2019 18:51:19 +0100 Subject: [PATCH 222/230] Pass response type on mutations option (fix #4410) (#4551) Modify `MutationBaseOptions`' to pass through `T` to `refetchQueries` callback `ExecutionResult`. Fixes #4410. --- packages/apollo-client/src/core/watchQueryOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollo-client/src/core/watchQueryOptions.ts b/packages/apollo-client/src/core/watchQueryOptions.ts index 6b7a945d3dc..bdcb7a7b001 100644 --- a/packages/apollo-client/src/core/watchQueryOptions.ts +++ b/packages/apollo-client/src/core/watchQueryOptions.ts @@ -185,7 +185,7 @@ export interface MutationBaseOptions< * once these queries return. */ refetchQueries?: - | ((result: ExecutionResult) => RefetchQueryDescription) + | ((result: ExecutionResult) => RefetchQueryDescription) | RefetchQueryDescription; /** From a9952c7de671d0c26d76cd5b9debc956caa6adff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danilo=20B=C3=BCrger?= Date: Mon, 8 Apr 2019 19:55:28 +0200 Subject: [PATCH 223/230] [docs] data is either TData or undefined (#4479) --- docs/source/api/react-apollo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api/react-apollo.md b/docs/source/api/react-apollo.md index 6ff1ab25ca6..a1e503927d1 100644 --- a/docs/source/api/react-apollo.md +++ b/docs/source/api/react-apollo.md @@ -95,7 +95,7 @@ The render prop function that you pass to the `children` prop of `Query` is call
`data`: TData
-
An object containing the result of your GraphQL query. Defaults to an empty object.
+
An object containing the result of your GraphQL query. Defaults to `undefined`.
`loading`: boolean
A boolean that indicates whether the request is in flight
`error`: ApolloError
From 1ebe5b4c4d9c0442dd384eba178bb00ec625f0c6 Mon Sep 17 00:00:00 2001 From: Ryan Baxley Date: Sun, 24 Mar 2019 01:19:48 -0400 Subject: [PATCH 224/230] Fix IFM handling of fragment on root --- .../src/fragmentMatcher.ts | 4 ++ .../apollo-client/src/__tests__/client.ts | 72 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts index 0d7e66f19c4..1ccd6851deb 100644 --- a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts +++ b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts @@ -124,6 +124,10 @@ export class IntrospectionFragmentMatcher implements FragmentMatcherInterface { const obj = context.store.get(idValue.id); + if (!obj && idValue.id === 'ROOT_QUERY') { + return true; + } + if (!obj) { return false; } diff --git a/packages/apollo-client/src/__tests__/client.ts b/packages/apollo-client/src/__tests__/client.ts index 57e1df88e3a..ff0342d95de 100644 --- a/packages/apollo-client/src/__tests__/client.ts +++ b/packages/apollo-client/src/__tests__/client.ts @@ -277,6 +277,78 @@ describe('client', () => { }); it('should allow fragments on root query', () => { + const query = gql` + query { + ...QueryFragment + } + + fragment QueryFragment on Query { + records { + id + name + __typename + } + __typename + } + `; + + const data = { + records: [ + { id: 1, name: 'One', __typename: 'Record' }, + { id: 2, name: 'Two', __typename: 'Record' }, + ], + __typename: 'Query', + }; + + return clientRoundtrip(query, { data }, null); + }); + + it('should allow fragments on root query with ifm', () => { + const query = gql` + query { + ...QueryFragment + } + + fragment QueryFragment on Query { + records { + id + name + __typename + } + __typename + } + `; + + const data = { + records: [ + { id: 1, name: 'One', __typename: 'Record' }, + { id: 2, name: 'Two', __typename: 'Record' }, + ], + __typename: 'Query', + }; + + const ifm = new IntrospectionFragmentMatcher({ + introspectionQueryResultData: { + __schema: { + types: [ + { + kind: 'UNION', + name: 'Query', + possibleTypes: [ + { + name: 'Record', + }, + ], + }, + ], + }, + }, + }); + + return clientRoundtrip(query, { data }, null, ifm); + }); + + it('should merge fragments on root query', () => { // The fragment should be used after the selected fields for the query. // Otherwise, the results aren't merged. // see: https://github.com/apollographql/apollo-client/issues/1479 From 2f6306471077b24588172b9215ccc829b2724c29 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 8 Apr 2019 19:26:38 -0400 Subject: [PATCH 225/230] Simplify ROOT_QUERY fragment matching logic slightly. --- .../apollo-cache-inmemory/src/fragmentMatcher.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts index 1ccd6851deb..7d1fcad4d6f 100644 --- a/packages/apollo-cache-inmemory/src/fragmentMatcher.ts +++ b/packages/apollo-cache-inmemory/src/fragmentMatcher.ts @@ -42,12 +42,9 @@ export class HeuristicFragmentMatcher implements FragmentMatcherInterface { ): boolean | 'heuristic' { const obj = context.store.get(idValue.id); - if (!obj && idValue.id === 'ROOT_QUERY') { - return true; - } - if (!obj) { - return false; + // https://github.com/apollographql/apollo-client/pull/3507 + return idValue.id === 'ROOT_QUERY'; } if (!obj.__typename) { @@ -124,12 +121,9 @@ export class IntrospectionFragmentMatcher implements FragmentMatcherInterface { const obj = context.store.get(idValue.id); - if (!obj && idValue.id === 'ROOT_QUERY') { - return true; - } - if (!obj) { - return false; + // https://github.com/apollographql/apollo-client/pull/4620 + return idValue.id === 'ROOT_QUERY'; } invariant( From 2d87cef65180122cdabcc6387d57ac55d63a794c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 8 Apr 2019 19:31:25 -0400 Subject: [PATCH 226/230] Mention PR #4620 in CHANGELOG.md. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a4493c8038..b537c6f270f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,9 @@ - Support `new InMemoryCache({ freezeResults: true })` to help enforce immutability.
[@benjamn](https://github.com/benjamn) in [#4514](https://github.com/apollographql/apollo-client/pull/4514) +- Allow `IntrospectionFragmentMatcher` to match fragments against the root `Query`, as `HeuristicFragmentMatcher` does.
+ [@rynobax](https://github.com/rynobax) in [#4620](https://github.com/apollographql/apollo-client/pull/4620) + ## Apollo Client 2.5.1 ### apollo-client 2.5.1 From 310011ecf0780e8ef8c52383c44fabd7c38764e7 Mon Sep 17 00:00:00 2001 From: Nilan Marktanner Date: Tue, 9 Apr 2019 01:34:01 +0200 Subject: [PATCH 227/230] Fix typos (#4599) then -> than --- docs/source/basics/setup.md | 2 +- packages/apollo-cache/src/types/DataProxy.ts | 10 +++++----- packages/apollo-utilities/src/fragments.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/source/basics/setup.md b/docs/source/basics/setup.md index 30c803197a3..a86b6d2440c 100644 --- a/docs/source/basics/setup.md +++ b/docs/source/basics/setup.md @@ -460,7 +460,7 @@ class MyContainerComponent extends Component {

`config.alias`

-By default the display name for React Apollo components is `Apollo(${WrappedComponent.displayName})`. This is a pattern used by most React libraries that make use of higher order components. However, it may get a little confusing when you are using more then one higher order components and you look at the [React Devtools][]. +By default the display name for React Apollo components is `Apollo(${WrappedComponent.displayName})`. This is a pattern used by most React libraries that make use of higher order components. However, it may get a little confusing when you are using more than one higher order component and you look at the [React Devtools][]. [React Devtools]: https://camo.githubusercontent.com/42385f70ef638c48310ce01a675ceceb4d4b84a9/68747470733a2f2f64337676366c703535716a6171632e636c6f756466726f6e742e6e65742f6974656d732f30543361333532443366325330423049314e31662f53637265656e25323053686f74253230323031372d30312d3132253230617425323031362e33372e30302e706e673f582d436c6f75644170702d56697369746f722d49643d626536623231313261633434616130636135386432623562616265373336323626763d3236623964363434 diff --git a/packages/apollo-cache/src/types/DataProxy.ts b/packages/apollo-cache/src/types/DataProxy.ts index ddf716eccb4..8b85709a7c1 100644 --- a/packages/apollo-cache/src/types/DataProxy.ts +++ b/packages/apollo-cache/src/types/DataProxy.ts @@ -26,7 +26,7 @@ export namespace DataProxy { /** * A GraphQL document created using the `gql` template string tag from * `graphql-tag` with one or more fragments which will be used to determine - * the shape of data to read. If you provide more then one fragment in this + * the shape of data to read. If you provide more than one fragment in this * document then you must also specify `fragmentName` to select a single. */ fragment: DocumentNode; @@ -92,8 +92,8 @@ export interface DataProxy { ): QueryType | null; /** - * Reads a GraphQL fragment from any arbitrary id. If there are more then - * one fragments in the provided document then a `fragmentName` must be + * Reads a GraphQL fragment from any arbitrary id. If there is more than + * one fragment in the provided document then a `fragmentName` must be * provided to select the correct fragment. */ readFragment( @@ -109,8 +109,8 @@ export interface DataProxy { ): void; /** - * Writes a GraphQL fragment to any arbitrary id. If there are more then - * one fragments in the provided document then a `fragmentName` must be + * Writes a GraphQL fragment to any arbitrary id. If there is more than + * one fragment in the provided document then a `fragmentName` must be * provided to select the correct fragment. */ writeFragment( diff --git a/packages/apollo-utilities/src/fragments.ts b/packages/apollo-utilities/src/fragments.ts index 088ba98ce7d..f60c86a638f 100644 --- a/packages/apollo-utilities/src/fragments.ts +++ b/packages/apollo-utilities/src/fragments.ts @@ -20,7 +20,7 @@ import { invariant, InvariantError } from 'ts-invariant'; * ``` * * The target fragment will either be the only fragment in the document, or a - * fragment specified by the provided `fragmentName`. If there is more then one + * fragment specified by the provided `fragmentName`. If there is more than one * fragment, but a `fragmentName` was not defined then an error will be thrown. */ export function getFragmentQueryDocument( From e2db6c0fa1b717bc179baca2c6eee04e2dbcd512 Mon Sep 17 00:00:00 2001 From: Danny Hurlburt Date: Mon, 8 Apr 2019 17:37:21 -0600 Subject: [PATCH 228/230] Fix broken link in local-state.md (#4600) --- docs/source/essentials/local-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/essentials/local-state.md b/docs/source/essentials/local-state.md index f4cbb9e89f4..236c2bedeb1 100644 --- a/docs/source/essentials/local-state.md +++ b/docs/source/essentials/local-state.md @@ -220,7 +220,7 @@ cache.writeData({ }); ``` -Sometimes you may need to [reset the store](/docs/react/features/cache-updates.html#reset-store) in your application, when a user logs out for example. If you call `client.resetStore` anywhere in your application, you will likely want to initialize your cache again. You can do this using the `client.onResetStore` method to register a callback that will call `cache.writeData` again. +Sometimes you may need to [reset the store](/docs/react/api/apollo-client.html#ApolloClient.resetStore) in your application, when a user logs out for example. If you call `client.resetStore` anywhere in your application, you will likely want to initialize your cache again. You can do this using the `client.onResetStore` method to register a callback that will call `cache.writeData` again. ```js import { ApolloClient } from 'apollo-client'; From 67c29456185ff305b5274a9932b852777769f268 Mon Sep 17 00:00:00 2001 From: Jaime Rios Date: Mon, 8 Apr 2019 18:44:47 -0500 Subject: [PATCH 229/230] Reword compose() explanation in react-apollo.md for clarity (#4467) --- docs/source/api/react-apollo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api/react-apollo.md b/docs/source/api/react-apollo.md index a1e503927d1..05c78613e72 100644 --- a/docs/source/api/react-apollo.md +++ b/docs/source/api/react-apollo.md @@ -1321,7 +1321,7 @@ import { compose } from 'react-apollo'; For utility purposes, `react-apollo` exports a `compose` function. Using this function you may cleanly use several component enhancers at once. Including multiple [`graphql()`](#graphql), [`withApollo()`](#withApollo), or [Redux `connect()`][] enhancers. This should clean up your code when you use multiple enhancers. [Redux][] also exports a `compose` function, and so does [Recompose][] so you may choose to use the function from whichever library feels most appropriate. -An important note is that `compose()` executes the last enhancer _first_ and works its way backwards through the list of enhancers. To illustrate calling three functions like this: `funcC(funcB(funcA(component)))` is equivalent to calling `compose()` like this: `compose(funcC, funcB, funcA)(component)`. If this does not make sense to you consider using [`flowRight()` from Lodash][] which otherwise has the same behavior. +An important note is that `compose()` executes the first enhancer _first_ and works its way forwards through the list of enhancers. In other words, calling three functions like this: `funcA(funcB(funcC(component)))` is equivalent to calling `compose()` like this: `compose(funcC, funcB, funcA)(component)`. [Redux `connect()`]: https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options [Redux]: http://redux.js.org/ From 7b026d2f14d24c78f169e116f1be56130a113383 Mon Sep 17 00:00:00 2001 From: Christopher Miller Date: Mon, 8 Apr 2019 19:45:43 -0400 Subject: [PATCH 230/230] Update react-apollo.md (#4468) change `client` prop description for `Mutation` and `Subscription` components --- docs/source/api/react-apollo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/api/react-apollo.md b/docs/source/api/react-apollo.md index 05c78613e72..f58c284fb4e 100644 --- a/docs/source/api/react-apollo.md +++ b/docs/source/api/react-apollo.md @@ -148,7 +148,7 @@ The Mutation component accepts the following props. Only `mutation` and `childre
`context`: Record
Shared context between your Mutation component and your network interface (Apollo Link). Useful for setting headers from props or sending information to the `request` function of Apollo Boost.
`client`: ApolloClient
-
An `ApolloClient` instance. By default `Query` uses the client passed down via context, but a different client can be passed in.
+
An `ApolloClient` instance. By default `Mutation` uses the client passed down via context, but a different client can be passed in.

Render prop function

@@ -197,7 +197,7 @@ The Subscription component accepts the following props. Only `subscription` and
`fetchPolicy`: FetchPolicy
How you want your component to interact with the Apollo cache. Defaults to "cache-first".
`client`: ApolloClient
-
An `ApolloClient` instance. By default `Query` uses the client passed down via context, but a different client can be passed in.
+
An `ApolloClient` instance. By default `Subscription` uses the client passed down via context, but a different client can be passed in.

Render prop function

-
`data`: TData
+
data: TData
An object containing the result of your GraphQL query. Defaults to an empty object.
-
`loading`: boolean
+
loading: boolean
A boolean that indicates whether the request is in flight
-
`error`: ApolloError
-
A runtime error with `graphQLErrors` and `networkError` properties
-
`variables`: { [key: string]: any }
+
error: ApolloError
+
A runtime error with graphQLErrors and networkError properties
+
variables: { [key: string]: any }
An object containing the variables the query was called with
-
`networkStatus`: NetworkStatus
-
A number from 1-8 corresponding to the detailed state of your network request. Includes information about refetching and polling status. Used in conjunction with the `notifyOnNetworkStatusChange` prop.
-
`refetch`: (variables?: TVariables) => Promise
+
networkStatus: NetworkStatus
+
A number from 1-8 corresponding to the detailed state of your network request. Includes information about refetching and polling status. Used in conjunction with the notifyOnNetworkStatusChange prop.
+
refetch: (variables?: TVariables) => Promise
A function that allows you to refetch the query and optionally pass in new variables
-
`fetchMore`: ({ query?: DocumentNode, variables?: TVariables, updateQuery: Function}) => Promise
-
A function that enables [pagination](../features/pagination.html) for your query
-
`startPolling`: (interval: number) => void
+
fetchMore: ({ query?: DocumentNode, variables?: TVariables, updateQuery: Function}) => Promise
+
A function that enables pagination for your query
+
startPolling: (interval: number) => void
This function sets up an interval in ms and fetches the query each time the specified interval passes.
-
`stopPolling`: () => void
+
stopPolling: () => void
This function stops the query from polling.
-
`subscribeToMore`: (options: { document: DocumentNode, variables?: TVariables, updateQuery?: Function, onError?: Function}) => () => void
-
A function that sets up a [subscription](../advanced/subscriptions.html). `subscribeToMore` returns a function that you can use to unsubscribe.
-
`updateQuery`: (previousResult: TData, options: { variables: TVariables }) => TData
+
subscribeToMore: (options: { document: DocumentNode, variables?: TVariables, updateQuery?: Function, onError?: Function}) => () => void
+
A function that sets up a subscription. subscribeToMore returns a function that you can use to unsubscribe.
+
updateQuery: (previousResult: TData, options: { variables: TVariables }) => TData
A function that allows you to update the query's result in the cache outside the context of a fetch, mutation, or subscription
-
`client`: ApolloClient
-
Your `ApolloClient` instance. Useful for manually firing queries or writing data to the cache.
+
client: ApolloClient
+
Your ApolloClient instance. Useful for manually firing queries or writing data to the cache.

?KF#Q09<`zF8 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�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 OZ+GU z_2Me%5S9s^mSK54QA0jc0TTZ*_)%i^c7FtwWq=4=wAdP&F_~m?bSi87Cv3jMV@gbx(}zZUK+7+x>v_{y25Psi1 zM>(>2xLmw=rktOihkld+0pBenBlwD#zzS!6mQ#XQ;=b*cqv7La&I>;E(v>oE0p-wg z4;BH?;(8y}4_XflAnbDb2}icBp=fgj(7s2-&W#5TX4}&=r4``vX}00% zC05l3dX~!mT?nrT#kS#P6cZ|Ih7dgZdN#^iQ5t;YL-%mZGpFXvTrDHOu)k3uwu_@- zSMaCt!pT!*PKzQO`yM^K2c_Q-+Xi;CwPh{~ctnTZrBp7cG|ZRA$@>bIP4!hUNwpxtXj1AT1ByPbzv^Fp5Zi{ zkG_8w+iNVFK7)GjNwmh%%dS#mNrk}Xwl~`)-Cf;hvZaJDt%Fp6sF+iEg`7^mqyuZ( z4OUp)o4ocv~lN2TH)DF zbmTwJNj@qTJ6NIa!@^>>+aM{|H2mUm={l5_mMU_!Y?(lkpPkt#Uwm}BoH}d!R}rv@ zg%#EdSQWkF{-fpCu^uc_UZNf2D`H|#aBw?@g1M&gjxPF=fZ{+} zoK-gJ|7Q!u(U|R%Zy4>s3ve4aK#IWbr_Z$FdfA$xwVeKouHtZbjr97VQL$=&|I)c> z%AhD#*akC$uO$RGltXSw%VZt}nLfE(_}Fm4AW9SJ31#Q7xO24d239NmSexAQ<|&S^ zz6pND67QVH%A+8VV`*5~7L!KAn8=oqG5V=nZ#h^-P(-X?d9lMd6e|(^robx-4x=cC z?s_whl};Wb z#z=T`W{&c!{G(0K_=v03Pe1+7F3OF?k$r*Vj^9-XDC8sh5Rjtfk1(xF!ziy~_J8^5 z1Lad6+{1fyU7lSpfA_z8I*Q32<^VQ2>ngZ=PkJA?1SQ$1d#x7SKGw-NObwKwv8}TA zNPp=cWensbxE=b=O#8&khAIxwj)XjOX~m!*PaD;0!LfKir5rz-!TMS^7OP9;+fSd5 zvcDSWNoRiqeOi~#!O=YU(f%r-n7sHlJ~qJ-^M~-6HIJZOZ(V_2Q+p@M-}u-a<>&#N zFhj#{KRsRMu$0kKFL((@dfJGsKk=4N?C&g-DEJI-^H9+%eIc(6e&Ut*;$}L2#!a6p ze9E7?GhDj(GaldcZIK^A=Ic+K>=XgvSn%A-=Qx6$v4bc?$lq7)^=tA67JV9xGxVmB zRPlvrYWlB~L!MMIs3oKI;?_Ga=tIrGu7q3f!LKe0@MW_#`uKJFwu(k|xl>l)r;dnZ zI`Q{i-c6aRMIE=e5V~ns`1MvHm45 z^KTM2_a>hAI&U9edo{SU@*#Z-RvkH6y#_`roB9D|^)9w@e*`7|PyA;Oa{}LHIdl4Q z>e_yHXc+%>RQ}EeG}hXMF|cYIz>QT}TR9s-q`b+TIK=Y`ZgrSR8eHu!nljWVRj>7n zw}yVK!+P2|de(={^L7+<8j+Zc6xD!{VZ`x`D&!Ds^?hVMa z*XD)r<`Q=MuL*DNtt39cf40f=6>zlW>yXi?QOegA2L|iGh@hLFx+s#Cj zRU%hD9bCN{1wdZ-qaae@P=$zw$_SMTQ4!IQBDnI|!6(xaBefbBWnoaxwjGN>LsOX} z_ED&$khPK|S@_*{YYgClYqllvp1eu#y;48`hw!ZS5?CoNs`6I!6@&tc6Ku*sz6t_S zCRq-?X>lPvQhxIQz6z8G+e}ukGuhjsgWX0L*Z)P;Pmoy9z|`7EXINQ9riNAiIB$rO z1e#XIyDH20=f zzhWj9=~O!qEXHvvxj!^q;*<-^t>6|vI;?^sf(D+#re(C$mT{HU6i?G3NBB}Y(KwiZ zDr`8Jb9G(iO0{Z_AV{2GEANnA>zZAo!}xVjU}g1im`Ek%n-Fs}cTR_G7<9nd$%JYY97plGzr;3&ndv30Mdr#?gvV93@T?#_PNK}%yPG4WRTQlv zOfz}a2Trz{Kp(eUEMxwyZvM2--28)g!1eP{6Kvp zFnLt?u8IEgp7*@D?B3nQ2}UTb=A3ZIJFNVpNV2Uh;`nu8(a9bPF9eb+v!|(JXo^*l z$NL&TC)B`iIxZbW*px5jDV2CKLDg2}TzR-s%BH`eUbC`I{0#+bCOq5pd2)qH$Szmn zS&6C?G9D+6V^{cUP^W~nC9NIgvC8LD1zXWp-z!zS!Y>Dt>mKMlfueGSmEa|4701%# zX`i!1`%v+uzl1R?fwW{A8%MdqNjzFextJ}ym1T|_hF)*I^A%^ehxZSb|NYlaN4aQw zj&cc}mfx$Bzd8|`hp=Qo0ZQAJkE6h~ui&5b)v>h4OfO*e>WM)55Q%~j8rX)1Q9ild zkLE%->~om1z)Nm35~db(B#D)dmTp>2sd(w|s9)+#!RvGX;w|ugXL;zyzJleL{-~fY zP0Kp4PnCvl8%*BNPai9r)P*N!P0w&@m&X~?hICFlj^af{r^>}H>f0tdh_Y~#dg|)b zDfbG_n=hB?%WUIA*imVGZE1!R$gosFc-5lk%-K`;1?pvc9F`u)D|>fwOgmetCK=yU zcC655S5TIZU>y<#50+=r^dRwWJ$^h6Eaz!ITNJ|XN9B`FV*C5M@Qt$%nr@*Kn!}G% zce(4tUMyBH$DX6Tp~xEMlrkN%3x8e>h#HWlW2UUJtE>gZLtjNsJ;t5@`ly0+ATwVy*lu+o zOx_?LT5haTVm<3Nk4%{P2+nczuHaiczNLZ?4z*e#nm?5*+_lVetE(qnd2&#!OZ={Y z&o>%4FVfj(ZYF|WK>}gidmol(zw|T5u|_n!x_z_$NAcbYJvee~be2>)&{R?F#+Y7imL7<3m^TqMcTB7OZ*l6DP`0 z;bypakX~((m+^9mTPmx@%kRXKpITR2+&mhe%X$@#<>999EiV@uHuWzTT&(*hy>aXO zOcT0z7gzEV@4y6C6)SE5NmjhK@(~7~;03p^Io5at`hf#CpzLDHBg&L2Kl3D=`6N$X z#X~xz?0&D~L|N68$?yCU=9nRUl4y%+B)8w?9zc^X|7Yh89k*d>o|}j^b_0 zjA8m<+^!c0tNH{^=+n;E=F`R>4PH%t4Gux3^-|+w+O{xJd(}mLp$~zHSI0HXKA{yx zxP0#=k2GnjkXQb;6oYPU^?cFi-{#m?naIJA*ZhE2)yi zKeC`q=%hNYdCt^{&+f;xgJ3!gJhl!naa9n>#LE1@#fhOYc+6dJ)s`h;R`_H>><1cE zV=a+MHjP(&qe!Un+xh?4d+%t?vg)w&yqrVTtM@9uid|hz2dbOU2rvklC?p0jLJPbY zqU7_}(4Rm#=?#l61csb`hzu!Lh ze)Uz+Ag%e&HFK)IckexMpMCZTd!K#wVF2=>>~kZkIH&TiJz>hy{_1m#W^X$8W@0ViLo&YL7)10t>?2dA5Qw zfYvc^M0nH@m=%0kOkjWs-S;?JK>o2qM+L<{g~VdicLgivYl~@c%QR}iI3ataV3qeq zG%@ZyygR+&wfCe;mls&{ohAzwhTuZ&1sD43s&bQt{cRSC2sbFk%{H%TRs%qrCc$J{ zK8usAWn|qHMsa%&=bytkD2o_(qTR7=YT^ptt`=?=+0IVPavHcX1$-RcV6i)kN~On$ zgg;=RZOlufZZ7Vp(b%y)ywxU*Et798bR;ZUu;lLcGPYd?psVHdx}SLo!lb(NHyHlC zKEeW}9>akwd|}m7ck5<)@q_oLv)F4nePICOi(GlkJWyA|_0Wy%Oe3Ir`A_XmKm7_8 zO{~`!7dl|n2004hO%DhKU{+=nMo`fj7>pHZPdosVJJ;H6m_lf<;IV@GP7LnKOpUVx zjeUsWxim3{QBnj9@+RF~UFq8RRJ#1_vCx>)YX*oD%U!2ak#%DJ#e%$ zJ#(stDmKk7&OGjU0E}p&$E`Hh=2a6_z&D0Fr^I*<64TX-JpH z#?w7Vjstv6aRk9mfsd@n7Yt z*07rtn9JiwH#fK}z&I{wI{}=j#bh5+0MZU}6;cG9QeGp1yH~yHp>*&r?CE^<0>5*B zgxwmBzbs%JzIR9=_6wz-s!9_T^X z1@1A3>a8YQICirDb2Wmeizo|Mn?_bKUeu zjVdGXY*Ryly1{I$a3pDNnybTUi&2g)9NxD(J@27o>4#4|jRD+^^jE)sA3_w4zBvZh zZYPanCq}MYccKlmnZEGt&GgvGrS$02lcBNYQN=cdgKLZ*n;Y%vJjYsQ5FmC?<}%1^ zroXq6*ETe?)DT;zk34jwA^q%&_N3Q46`YUgNUGXiUFXS%qQzJ8n?Ys&Y=IR1yA z%A-N{1>2w(A=);Mg^f+sq%+XC$9m?u!u{_(xF!A0dym9?BJI8USIgcYb+4ZRRYvng0H-oX z2&3&4OrZ&J{^Df1eti}DGh7)@1BBL*!U6J=$&`+oz>U{BpSnDTrrKQksiV#5*c*4H zL%ZwK6KAH=$;(S<)hwsaeN*kQW^UnHO-tOcvQf7+XfJV*fbDrDU=nI}f^(d2LY0iXo2jw{LtD%?SBYk9{ z9jn!J^~UwMYCQ53e)A`OtSKCCJbuDF5l+U&#EdsaRXfpjL)e}xg)Aam+&Ct>F0owl z@hHQ@B(}}|`Vv*FO&6cOim-xtqOObR;J`K%@6dD9KMEu-@oRZHaiLIvJmW@2%P~9{ zF5{Bkydpl|6-0tBgH!!YyBVvVQuTHj-Hv^0a`cJD$;Y5s1G|oauZT7iS-4j1N0W zkq$reF-r6ezb((o7tW;CFI@S2mb?R&B3hJ3KGiT)hl(;dTuvO<cjVi90*; z_l0liRt8q)S5-E5VWoRjkj*WaeB;8zN~ExmeuRIyXfxQ55DdZm$kxlGGo3@Ad7*5* zymcc4GFE{UrOg&$kkRpssynUb8$a?fUaqBOWZ{Clb+IlWRjzx+m$=!m!$*4SC6f+= zj=#c=5CV~l^)grMEmIcuQix}s#uYE(z(uf=oQqbaq3dV|I4H^BxtPN@^6+ShxA(|+ zDiq)=*A3>+^Xt~h#jlJiYn9NBP`IwQm5NvB4>1~g!@+REi z$9PdU!v#;~lrY*;=E;R&99ID^lo&8LmXH;;MRuhZyx{)ytw%4hYk4l(-s1-fPa-dH z5aUzS$8vMKfTT$8tw!cU06#Oe z)nnY~p&b`@rn522B{WMG(CWxXFTf^wt2s0qSEZ2~aLAld+o-1+UJ|GHbz<{&ngoL{ zb8;0;3YqK;1V!~Qa|$q}#b&_W0W3`|XmCjD(7ik5=rvFc&eU>a&dy$TyU{fH;bVi0 z-?eFAK*pKHJ>_X%WCH=g0*in1pFvx}<7G1G(=ZI$v}mB+Td@1Qc_3y@L=m@*l-{tJ} zDvZhkjPOj&7&k5<%9x|ydR)hThhSuZg}gT^$S}{S!NPdqm9XM&masJ#s|M`XEFs|1 zaBmy=&$3JYI1@O0zpG-Hd z45ll+7|r7x^0k36m|l$fab5Jh0v`lQYWz%0!tAmj@fev#Z|hkcGy{`k&a4_vwDShS z5{;2cM+f&DMxC=coxgN0u9%)fFs6ozc23l^kgoRc+zs>Hm`+`~0JEv!OfpoUqQHSK z;yZ@M!V()A1O%;Q=D_|W6>Xwfv;~H@6T3JFfH;a0cqAV~9dG$+lkGZIgV>xxelEwFhY2^2&1bOl!k22 z46LWW_~ecB&)(G!4B5Tw&3n=ZK60Kbox9UR_Z*^YH=vDjosy(CZ3HbsbKnp9>;NZW zBo;=>v2_;QZO{hZl-3MQt|N49ZJZ`@p(pb=<{afv}9t19}*!h`8 zi(`Fpj51)XF>bBEdU%v$PT1Y3Z}2$L1_D%UaQqne^5my;bF#2Xr+ZCIjtPeQLxwTts)%DsINf~O&RUnMAittU;dyBe|9ShAP~-ZtDWOc z1Hw^l1u5JH@$_{B4d7O-vNgsaX;{rkj{>!EgzDuF-oz>Tj2Ia2#0J*>bcsGQ$&svO zaCdoNB#uOCi>kK1o&2E*$J6Lb5HPguksIg25B}EP^sd+UmEgtm;d_gt5`2C6(dqOn z|9%p|5gQU}6F3iQW2MNCK?%Gm&lu+!dk04`{3xSozhiFP3?YTR94FJSPyn2{ z#iHiUGQtTkO8e0N)M{$N-W7N;o!V92sJ4XgZGmgV^DRXlhs$+hcnQBo`lz?ttw8%~ z#k}W@x7O=JpSS^Tz`p|peJh^AN4ZoeXxVutZvTk+mUw1Po^EW!tz~L_0QY}=JEA4vb*t6!2n@#!z8 zYd5at^dT&vERTJH`=Oz$X@HHYTo3Y!a>!TM=-U}~AJy>lu7E9QoA;8&gemIk19+{6 z`1Z-Tmg_{AbrtS1e$=a~enbgpKeLU4A;-t~fgAD+{27aMWgGe#uE3LZiC5zg;JeRo z`uPJ6=|E>6iEy91Sm*fV;G1dj&l&R|)4*9IEF#|ixGl{1mRVi@G7o7X9C5<$_PomQ z(*L&afTsvE$nWwe%z{FdN74Qo<>+*@NePE-#aLMp_C_D3?Mhe`2-t2hmK1pxMO7YA zzJ)xS!#`ju@#@Fz?#HDip7^l6d_wDLVmq3y(MG{_RpZNcE3?u+zI_(>h%n!c=Z8<~ zADdkTT+*pyM%1?o=CYi?TLFKRQB|MnFae2g!pm|?`YE4=M;L!1f9hF=MG*#8E(;;t5sfQNU7+A{AINa!cgd3l6aC1YWwX@y zr*nh57YY=j9Dq~h+^V^7)h>v35oAQPSK!na#YCv;)=c!TL9Ed}V^AhX1v8Lh~-f)27EE`P+E3qjz} zqWv&7SDrd^fn84p1PbmHUa>F~N5rWGMvn==hM~g(v&KT!%`4A*|sJ$;@DJUPg(;1^DN>O z%6QyqiFVg!(9GOI9KBIs*{GmLeA&7%fGMWqorVAq=*Th#@U- zXat^eiND&L7Pq+_AdgUaHv8R$vITp?F)R@!z|i`+M(@3yZ5Gn>jT^}1@p#EyZwEHwyQ@&O5?!v{5U42 z#>XlES;s}j!$xSd4gts7T4VbD53a<~fqCreG`N_jE(#tz9=8DV)T|RtFK@Hy z=&1P-;fi$duDA53fBS*UjN6X&^glGS*4HLNo1~Frjl268+ZhX{xLSJxn;cWn){4ex zsZ)8((R_ZA``!OxcY5a1QhMb3qoh*-3-FMp^#UHkll=_T(yg)Im*X=oaxZTq+m+M`5c*cG}qbR+HFxeeiQ6WSjbi&l_| z?U!oT0DkGF%#V(}7ztNUL*H6M$Qttw!k0BPu;vj!cVfF}9yQA@@Y;^;o;KB;s+>n6 zyE+;n@fidl2!m%ix~2e@alWpxlQB$TcGenH01^|jfYUdf9|u4C5CXoRT<=#s+?CFJ ztSdeE_9xO46AXm31ueq3C_Z88wROR`;;mj9&t)M)9L8`L0ray*7Pc!cAUx)yFu}P7 zx(%k6e!fYcS_UTVFDZ=bM2OVR@r>EIIs}Pm1afp~3wB~2ING1iUl>f6CI{h}G4_kl zV_8)q=rJ=DH3(I=07_jN868RQ`1!5r`S;!wY|V0$+J`<#T3}Rws_h(&*#j`}XPh_& z#gQ(;^M(wXm>k7yppQFFEn#FF;*IfiVqhapT)oJIOnNm#nQxs-=(yAsynq9*IFI8^ z+V%inG;FT7162rCAOwVG@e>Yk8?b;bhqm|wZk-QfLL-iAivIrX6ocmEI5)OY#yA4R z`LMS_e!3X!e3EzUV3S_Nt0knLN12#MH`FFFuK8O`I108dwvj&l|*dsgD^~;Zg9l$#dpgq(^(EbX(ob!G13}^IF?t|k5?iWzW}7jD*}pq z)?;%bVQ*&{1Nn}RT^xhEfp)?;Lfyy@9AFy0v|*y>t#jwAK#JQy!0~;ztGOIIMebBpsbJ1c>0T@2&7rWi8Nt(;;o2hUdDY^ zXC!|`eq~-h^{zP6lPCSFj`_!a;JP@n@hI~sA=R#EE!TrT{t~7UWA=5uQQsdR6=Jt&29tKav^OIQ(Lq!n2YlVn53tbMGnsM9ys5YIkhT@wlnqyg<*z&PFVuQxJ4q(m z8iJKR!afSmvTgN~=4FapSQ;)Pe~YUcgd!f_TEDl?WFnFsEXoPeBOvmC34zOug-}d% zIgW8}DL^;vLt~>c=EfrPL6&`rrp9zMTAq?Uh(Mt5cDBgua0k215wr=UgfaZQ~ zr5I-Ce3Y?R^>2upNnR$FRalNL5V$yg12m;}LrmcMQ+5b&gpvA&HVXs2S59_dBSWFY z<_2dYiI(Fup89 zbkxP#xa(RA)8a0s9AOxDReFGPv7lhtiR#>y0d`$(py9v*!9^cYyvkT@k_KR1LYqZ; zv;0WI4G1kw-Z+769@K@`!9{71IBZ{td$RU+jR9^ol0HIU1Uyc%Y-DoG#`DVH*{1bI z1qDdK5d%GiTtnkz0VXMg7z(_|!=33|>i|3I7}s7ixdk(T%DVy~j{q1y`ixH|dnkZJ zFchfvx&z$`v)IMi@^%=J(3GI=8m?@DY0`bRU|vZ6q2oypPN%^7$5prvLO!mV5* zYaWd(y4B!m^w@xt3yhfp6}5*N!H?J5&cIBLaw~>{pCtxrY65;02BB_`AjIpKLkL1T zZ~3sxsePglWDXlBEg1gP4pJNNDztGowxy*vUE|6*EmM`qo48AmACECbNJ$Cf8)PnfXC9bYaxU6%-O3jUtEdJv8*`uM=fN~ zt)I3)Cr*TxP9Jt3?Bj70n1*Oq6&Q9RtX@e^ zJv~D`)cN9C+n?VX@O|&`+I0NsiyR9>)1rYJpu(3vLYW#-o}j(e25F}s*$;Pe&8$M( zH@)Vj2E@tp^XWNE?YDNH{reH02bQY_HwqU8b(X9h5q@MJR zA6%ymwTDHRRWIDPj&G(feSL(ZgOl`et{d;IPyg&4J5&D-1X8%)`?bC4>+eR}j`rM! zFm@RgW9JODL|U0cTF@Rluy-49qqXwd+FOJxAN$H^I(ZR0R7>2X);NifV=cY!AM`Wt zI1i@u`9HWT?R)+4bbz|{ZS6_>IY!llk=fH+RlKLaFWqyL>st|Ku5R8y0|)xnxJs34 z22ai{_E+07?BCG$W6=ohdkjjg!#cF#X0eTBUwp~^M^Zhvz|1dRsmdv(qj&8~58k&0 zTLGui4K&pn5wh*XUX%2VoF%lF8rbR9XziR#l1u_)iFEqm|LNc@!j&JKTTjQ&uB1Qt zFW1xEH2<+9?de~>b4R7Tzy82|Y0JyL$2a{~29K7a!|@YF#|gA2&V!P_2J&b@w95E_R6`d%Z$GYq7ho6?%#%hZIR=f z+PYF0vLvp=QFOE1-mUGO2%0(adHpiX7dT{osiAK=u7%c#eNs({VvJ(&iepb^vSEC2 z#e9(QLK=~;b24@wmr+#+qV|UZ3=20;w1f!E=`G9-K;E0o2~R(LA;Rj>Y>QZ-_2gV6 zER<*5SR+t|gR~P%_z~N64dZJ_`D`nH^sjjFp^I^br!WRQ1()0v93ZDBuXZ z5`{MQf(T=3qb=vpht7ISBhrCS(?r`-rZl7hRr^$=juhFyc%>s1@K~m8D@-_PC|n?> zNK?RCgk+o%E(}I1+u4t@os7$;^Khn3$_V-{Gb!pC@k>9`n1`7X?j!zKKF&v!d=#Dn=it26Dh1z14gD(&I7{?C@6@T*Ezi5f}#!#aU6d7W`=9<8|*)+$W! zW{NBFt+WH*B|dzHe_4m3EFaRBzj6Yu)Yq`$XPcINHt=G87HJvgS?2FkKfH1TUv7R! zvGE7b;_1VFVLD)RJ!qb>;bz(&>x@re0q=Zikh+Xtj@RY)9r$!ayR#j{;BKNj;Wo58 zvI;jGTWxn2S~Bz!oRVU-KwM~Mnvj@?c#D&@kV%ks3IZYyF@yLVu%$nFTwf$cNHLxf zK*26LV>1gPmHtetpa4cdxxYe{Z-pz_SfUKFJK?}Y9;R{8u119Qk?B&P;ymP>XE`Ap z;(eTJ;>IR9cWuc-Jgye_j$Z+taARKq@h`9d(h z9_+K2PU&vM&oLanf ziAiss;}39KEKs!>L0zML1e$u7o&?U3mg%HnJ*<#|fpQ>`Wzc}CLL?b>(*(R37`|;I zJgJ}fwY|L6rLT7@yZr1LvqK%XJ-`qxk%v2JY61kBV3KV&mgVg9VaEVmtYd)C<6F)6 z3$r_R9>Z`$QQI|f9v>#At9?BkJ9ZF3#Fq5EM=!%%!BCUNx>z@N#&X4SeT3P{1}nt7 zM_^=Ft+VA>?^f`pp~Phtmh%f7wV53OEz%ap#b6Xet($lXot1hgV3>f-GA%0i{Xh=9wqe^R38re?jhi@GA9Y+)SrD2|4)?Za<-!}h43f4=wla=L53^q>3q^Y3j>U-|wNV*$cC z;A=xrqtH(+ojHU-8>`b8Sbl&ThgvwUCc~S!G8y3+^)B5F46c6fnR$+6%>j?&+**3% z+r#PP|NU@8Ik+36!+ovk5=XX{(F76Oww>C98nE5b+nRRvZAlLu-b`p}dHz^@BT~umP8^Ky)7aHBWMz&hW$(kvQ^0IrZRX6(Lz{#7NiJ7mD%&G7DuMLBnzmp|$If zUwB<_`g;%EJWjTRR^o>~F&MGq2r2fa_V>48c)CBGcxEbHxP)e*^NWL!bGKtm)Q>zl zlH~ee10iEf2n20nk3raq!710-`Z`#dN6eKJhnF2V?|gi z%QNspfN34O<41v}3ju;K2|MKrlkG(~q^!#4Lgp(?{DHhhL-@F6%+O z$hRolFy{Sy#Er6aW*>R`VFt$aiL;!jFW;2Wg4WYkvI}E8QD5VUL%z#8 zi??Wh@?wsOpK(=pGm(8qC#@K_5=UI=&r?66*}l?M1s4H4ez<5KGsXq(%+K)Bna=ec z$Lz>1oNZqeA8c#~O%%9@Ivba~Vm$C^d||FiSC(0pL+Gup zh-TO`NP3pm1w&vf zLsTvX>~tYi5EFE2wNqRSN)pmSe$Rq~h+>im$z){-@e3M^6h+62*o4wSESK_BD-Xd1 zM62*5m<}0b{`GFb2qRbg4We$U5lq#noxgNyVyM+2Q!G3gt{jGkK!)&O7_F7GIZWU5 zs@x1;)Wka3iSQIBF0Rcb1QOx_xE#Ymql0i$MmaI?=l3k!QL8~M8+WYj_*S(nUx5xO z`BZ_!aG7NV0{O^|Wq8h-1-WUcn*;dd+$1*Ouy+7VYcPiO?6PSiBg8Ef;c<&eZh#nr zsUQV&z5*?G!*luCa)@>ozmyksB7cuOxgc~==>Z?LG#V{iMkp2wfey2zJ{dO8^=}~j zX<&z}t7{uf#|V{KX0qOr4({v6p2s)~O$@3|deaXA0~QbNqAp_yZk)5D3!YyG2J=uO z#WVJ+oP(FKwB1+5JBz0+sD;1eMTgRZ#}22Hrv?#DARKU49|Q)IDV^9};?qCSaA*|~ z?vAx|B%<@2Pu=iufzjFy4S5~%2*Ms!(ru4uEAmo+6*f#@K4(}g&+`jaZSbd7i?)ec z+@%N3MHY~1Oj))Iad)+w5VACK{9_G9e-nJIvhcKD&7vV=I}1;?KOsu%z|l;)F@%5z z=q2N67@gg{ZRyz2eQBJq^OtTQ4B+M*gb*_vYm#ww5vFYfX{rmsi~VK>L%p`|5)7_1 ztWXE20;shRPJy9VReifs-J#46-lS(!5x>ilXza05&|$GTuj z>cN{=0QYQF;{-b&w5xN^A`5!8Mp}SFfq=&NI7}4q9XfarTCL?M&j5G?$>i@%JTmu9 zt?Z7gfy2MO2uV87&X~dosKUB6CbUJEer={`WHAg zn2R>FD;i)Z)-gnivH{1K_E6*yb`!jkcp*Lh)G2T$1F(!eml|xhXb+~It9BK%X5qpT zc%5Wdr3>SiO>J8dPQV->Agn>?C572g(v!HhE!V+`Z6_7*#gBjVIk6wNe$Yl?m{vN~ z&&1G9+9E372tX|dT2`B3op#y2qc6SkWzR)>V z4#K4F^wg;*uxa!|cnxsW&_kbU;@Hh>`utZOB`=PM?A(_+FdDlCM?K4tDL_y69z253 z0~&<7kKev8An}j3SU!q?#mY7VI{?F&d#(5~f=RS#7_(~W z%j>jn2RBbGQ#QRNz2YVJv-WOGk9_4RXp3=6WQhXsA)R^+ygvoSHE0!SB-G!Bp%FI9MAYCwl}r{8_oeG%6`|K?8z(#OBT6|msNaY5}*g{v+!&!YM8 z?>;<~9=@*wZMnMizBl%zk9_WUI(=>koFZ5Ofi)QS^#&J4LyoA-a(%hiL$@QeC66kn z{U|9KF)_BSG{U<=AD%~Jjj@HcQdn(UE^~aVo2$LIZtqIp{o&JT07Jho;9+xAwn`OQBbNPqfi48JnE zcoed>4k0sw#SH{g)5sA%@X7h~kKUX$kbd=Td(t0#WH?!g=cl~zmPzXaDH7xN!R-vF5J2c$TbmsCErP?SEaN`#=*FgLOyZ17t z^rY`Uei3aLj&B6Yk6%wG&y&u1mif1dw)z?R&(XWK zrmM7VZLNX|;HQrStiTjcaJr5#I}1a|$g7sAcP#o5EGxidFyV=S7kevVyG6Kk4&rt! z=KL717*otP>ThQWJm5i*A-pi1c_XL~{Dg4D2C;+ji$SbN@7j$25DD>xnQ)&`fbq#k z2GKIevj(De&J3Y}LK-zeEicmeP}iCOWQi*#-E~G@f+X76Q|bKd}u2*p4+g)H8;&|RV8i%52Ot| zMP|Gc-EZs7*c9zwY44&OqL^p2r{x6>il=={Kj}$&Gp`6YEon-pKT)C$^(zH1;aNnA zbj5q*S=Q4$i=X}#x-ft9C7wUwuFgZoIQ;NuUJfTNgT@60XTH%OJOWSp`A%Bv#F!QD z5vQzAk+ygcyT~Wr{KzknACYc}XOQ^_b9F#Y5`Tjh$ip`A7txA5BLZnFnHoq~)I)E> zZgW4boLteW$mUi3<5SwyS$x33ceEuR;TN6+R@Es$jXyb28HKM%6X^-BiW2xJ>tKLk zm9oo-W`Ha4TET(16fVMS+ma6Cal}WIS3ZeUK@sDO^k97Q%$p7cu+=y-y|h&AmjS^q zUWz}rd}O~L@xsG#?EfRK7`g7?+CpG1cw^@@=tO2wx{&$Kw3dYmc|yxgpQ$1<6iz^y zc8Ni%%q$o$v;l}3{enNzElZZj-$_g1pefz0clXhoOI%>9ioXIQ?gCOFfeUJP2W4Jr zS>$OzPG(mIS4J}!9-jHAkT967Fy>#tWI1{>kh)7objBuy3gpL!wnfa-a;$g6=G`zO zTZSr}c1XT5ZlWVN`DS5?3{w^mnWR{(5m(KI7>m&YaFX5#_!T5rii>Im4KBPa0e`4Y zEs$my{SE5A5;xhvIEW7xF4n{AtT_loyNQ1n94yRG&ZCV1RLv;GU#- z;fsFkz~K=Qrg?-K9*t0tkQvCl=#L`+z@}QC+B>1r$8P*0x2T*rbD234h7Gtp-#&+C zz~TN~7=>(4k3D{Yon=(u!F535nQ0bt?BlU`L{P#)NiB+cm`GhMSFd^`N!S!t?AhL% zo_A~?23m*H<4>M}30Z|f*CvCAeJh*xdszN1kw8{cjZ3Z<@YCNM}IGLVU8~|6g+oJ$Zj0b6uKZa0QaLY(F zVOQYd&^Q_rv+!etZW1YMe4D}Vs2!FqiP%rsRtmhp;jYHqrb>%5VFwU;X4`;Om)MzXrrNalcOq2 z+$6+tiv^C&fE0u|9Als^w&gOm6xO&VH*tHBb=E$~=;S<16ukh(-rl)R9Q&}EMQZ0P zdQ%THy|4sQ0J#aFV0Yb8dgH6_MKh{5ojbdl{_HQml%_HE+SJq$IP-|c=*&9W24_+; z0*6&>;MAbmVn6U-Xo#tbi-0J0lVLI(k7PzELW&5wQ-~P-%g!nz0v>E@$T64+z17$- zj;h-B!?;bx1-IyB!QIip71=v?vV%RGPMx_zpMh3Z)%scBsK>ta(+@u<9e?}`ZMDFe z=1zpp^g)<)Z8OQRN^9QMGlZtl@DvO(I8!@r3E|=uj(KUoRRKf@E)a4`Gjs#AST3bs z{>6THD4|U0l`rW@Z+hj<^o6gFl3x~bddw@vMDSA9ySJw|^=&~@X5<>e-&v4;0O?52)$Ew_ezH2^9NdW2~ixU?%|KUHhTtDARhZ9%KA z4m%?=d^5_?u9o2qH_jC*T=ys4$ z%d219h42HT(D07yFo+HGHMQ`(VXLd1<40RydWUAwq?iP@Ry6rq(~DlPBW}bBgz?AY zfof)X^v}~5YRNtCXh%i3V!Uf3OTY{cc#pank*|6B!Rn~DVl}3__sQU+b%~MEKl#K6 z{37FYjK^v$(MJ@tgI8~18)75+J5Md7SHCFR_1L!?8$VBChY8IIg~;BZv`9W1*f3h1 zrO$z%EnJn}#qq^zSI79Yh^7xMgtzvPs3)pny?r~Pf6mTf(+aJ{jg^`7AXi1d{*_15 zr@rtl>O%C|E!9~eump)~w0$eb2Z471V5hOM)Xi9Spl>U5TF-H(8!^0YqOsN3xSoz4 z+L?~*%R;EJsnztyA0G?&*U^yJWd3(R4>fZ%cgQk*;8P>%r=PbITp?V*z3lnBFno)K z3Ac?&V_{1KB-i@RSP^5T{Vbf=2Z4k+U(`UGO$aF#=_8KGPo2MkvIJu`Lh4OuZ5`v{ zZZIhXQ!r{5k+w#sye6I7$G|B=0G= z(@$RK4Okc})Zp3L&Fwj8yFA7bw2PNU(yC)(Fr5%Ld6HR9&p4CecYbA@ak3LBj7f1+ zH_BI7P8$fT!0`?e_&L^)h9jB*vv_a-a9v>b&M7gm5vd4aEXnCxIqIU6NQ@~$FC4VLrqw!+DEO6P9>159?C8sF&$T#hBNCfPam- zaE-Q!0!5}y9GaQ<6fY(I%v(RB3A-XS(XuS z634i@nEP#`f)-5boMZouxrg`2jyQ#&#lA5-%4VbROD};Q@aA{qPXgOgp@?wn0zLRU z;IOL89(o!#3gBJXc}SO$jBwKjO&L(QGSA9)WX_jycsD=kqxg)>B1+*G0Y)v-mF*b$ z6>&^!Uba=xMDYw5shjP>I#A8hHa40Tm{(m}M4HH_$UENob4wXH-%aL(a8W<%Nw$?X z&LPEL^AaE<1Ym_f@715-Tg27BtX~m3!&c_y6IYG_fm8gdaa-nHCdnyo{ab0fTfKke zD_|+gG_b@+^fd|+&(dH?rMI6I~r-ZTm zj(CJg$GV^eza`G19NWaSW)(CqZSz52_CkhO%dyVPwnt5CIwKn`5)s#rA}n5cj|~0z zySgIJziae6ARZ&n9qu4BcN1mED+FRY2NC6`%!>=*%u*^`h>^3Pu}thnH;uv?cdCuA zMu}?YAxMC5gZ^Q{Ldzt|bXU+L6%Fa`yY41kLppouBD=4sVKZrjKn1uw;^48LA&&N3 zA01*mkrBuO44{epg)tZ)%9YijMuY@Vxn4o+#(<&2*k&!771QkeJ2{1LiTo5sh>PfJ zMJF~_vx#+v@6iEWV1bRwKt_p7OfrHlWc^uxOON=Z69>UGu+thw4PkV(v9QXbzf{rJ zKy94QhPi5D;ePnQK6dt})3t@k7#Cc?SZ@Uk%c?lr`T3V|08a2X+_D@;6fVTvTfFm# zw6>EA5N&t}qsN+p(P44uZACg4k50B(c;n`oWh=4~@2&|J*)fM<1CO@z$mm#TuPiR@ zPQybiP|Y+A(m7jWDj#uDI^tsEoV7+RGUpA7gia0bI!} zsih!>IZlKIPMvUrUm0Jug&Hv8so+NgpvJRa9@!aZSKM1L)F^P**xnYxG3nm5lC%fx z%QB2EvaGLh_ywJb7idY?8~HVm&k_rPkqK4O;~O=*=9|aT`Z{wy{&D z=Ew>HnK>4d+Ui+%Q3EY+QkmiLK^RJn*m_(6rVf0pLmzgn29BH=U%{KV_;~cnTRSv* z>(LhB^5}(vi#hu825R>8;8lUv^`Yx&3x-S|esDj>6IRmqpEyUo&;SZJxHab-3(OG~ zphX*NXC<1NMZ7i+6ecdaphwHcTf1Vx4xXc55z!mD7|IBz4*`>O>v$mT36DaPFxm+X zK1Z5gfQ!B{)ZU2Gc;X<&8 zofFzhDwVeFUnkGabED984Bqa+H@n|>-vM^#v)0#~$83OIjVkNxS$J;>(oLXp-htMG zcB4+79^(kf1Y>|>KGdWjD#jYhVeDu|J7|@@rx3E9ca2_)4~1D&9RcJ^jQdSYq~jjt_e$DrlMjZ_dzj5*@i+lOSB?b~$QXoFSi+0h1r`^uXF zmalzBTR^=W>(l`2I>J8Z!Ia+cvX1oeFONYlE6^dDUkD*rRwlVldV4yse|!4=QLrLfG)0s_$;z1!1UU$Z^J{PWj8m_n$zi3Ug`*IsiK zykjjrPJw{JS%sAM--Qv_Q2R;rT?D}#cUa>X*fzA0oNpG<4AEe($HsfuRO+0N8|xLG;%b_akJVra$WoyLaj~gJgrlgHJ-IK z?Ti85Mugoh=D{^^l(kkD5pJY(cn`Fdn}K?}u=O}6?TOLwIyC4ETS1z$h6HRH+fh$o z`1)@iZ%%jb+ZjdQd$=`y<8d{RmRoch2= z3$(Y0v2SFkz=co;dnn6sgsA`uA&iFR73g`}p90=tG!ECeVJbRO5FB&|eZ)qKa{=0b zF-I{5{q}oq_A3GQTIQ!NFlL%A=5-91B9!>%cL$jZhS64{e=?@!BOw35y_Yk@fioLd;C0pV;+7h=nzMY*tStK z?d&+UxX4@`VZ_6!P1wZM(;icGJ=MQwXMi}b(A4yi2N6s9p!ocO2O4)8CAWVrb2Lgp zTPt>jw)b?WfkBSg*{woQLRr|~^0p*3pYrWHz!&(oPUIzSgxgs&{EGrD51J1D0HXBA zkNQNr5gP9ij=%Bwg=Q?U+2^7j*2Og9+POEfGH+a^4BnkA3h&B`>HOi`M2ksRAqZnt zIMa)J`b3mv+fsIJ7t#rXaUyT)X@117)WLVcqg>&%AoI^-?pZP=?Ml`JZ_dZK{35Qe#uHYZ@eJo#^cA&ZySulhlT@0zerORFJP0V2zD`5I^iwzEz2qMseG4_tDi+# z5eIrI+aS_fNR_M3r!1=~xBx1HA0W%g@JYH%S|yztD7-vb_r>NhbW+h=3tBf}6&}jE zM0t^Uy#4=w{&oyFYTwZ=<{*eg=254BArm8i=_G1+WF}Ex7Az2-B&55kGIcYKlaNA# zAX6uwN@sAP>w-L&6ShepZkZ_;mQKo3p5bQE=-J9R{z14q)Y>OeSRib&o0(xz^Tu%w zVFu+W+)!MQOXQ9ESW;P@@Y+GOm9cO4UIs!K!=;NX)KI?#*nAYq-7OcoWev+GX^mtE zaO4RLW{yGDQe^Ulch|1ISdghAtSWTuh&jH@&niItQ*h#Dulpk*7or#rUoO51z4rBmlF;}0#^p3uWMMlC0v zxPkzug|_L6cG1YHf{b|>ahXB|2u-ZWWzIYX6*!bZgJxyutf&murVD(*3mS12g;3{ya=8P2L@t-VwV!_Ey>ewu{ELaG8Y{Fwy_1vPP z0Z;Q;#i+rO!YeYjKe_9fgj2e(k;_B-dI)bwr!P(9n^;yU3mTTz z?JuEyMMZ=^G_P!F{Ox@jM0JVdZhk!sg2Ia>7B?Lo+fp-H8EepEJ-h1*?3Q~|OJ`dr zw;63<8v(|IMf*1F!0g5Tz_npCXuz}fa%Nd9Z^8g<-?oR{w>EbE*?DGh+|F@}-Mhdc zv^UKTWHUmX=iak3?c1{}ojo_4E?*g=MVk>AVBnOaB_2Opi$&#n+P1TYdNil&2&PyD zrfwG1&D?@9IzAP4R+_PY(TuQSnWH}q?q0*dt||mM#9@nmTS;*!rsdg zHzKWRM`hox^xS*5a_kEOlxG|{(Efpo`qI}f0juo~4K;SB8a07nG*-~ca2RZ72OBa9 z9NT+5*0sS=5ztCk&SO;w+{jUSp*aYH-dvawhgi`z8wj?9xC>1bZ>5=s88pmAtYeq$ zCe0~uQkW;L*oSLinjL9}#;{v5ynvvnHLYM+Ij;O}Mnixy&Yizbp1{_`tt7PL@e}7+ z-+jvn4iJGCH0I!U}NR8c6Kul7c;W4|DM82hyzl(w4WpnhPfF1PmHuA#LCo8^;gnSN0PHtaC8ZYM8Y$cD&)$H-#(LhE~#NzC4OH4A*x< z51;?)SbF;#vk>G>2w^_|wLxrdpgn@{ZUvfc_of^KBJ&(e8^xIE3<91m1Rj&4lN{%p zOF#SaBOH0lu>GUA?hCyAxIe%5p~0w+H=yz^ z!Q|Tq+(mc3_GqG1-Nuo-4ul&Ue0$`obdus4i~haa(H7YcvpT$nX4gFB!VDu6(3X_D zwrguyTck|4fhJoc0yA&iYO0$`_djP>dg#Hv^qJ3|CO*Q{I&6o~-p!3@vP_SpfveCL z*R0#W0IbX=p3Q71%&#H*L_iu>8q?Rb7dFp$c$s!pqevso_0V@WS}t2V&|;;3m(Kdu zQm1x=tt}mlTl9^d?rsFC)MaLv_NLz;z|hcg>8=fNTN1Xd>{|_JfjVcYwI?O7BNXWF z><(e#3P%9zpbP0&W5yF6vE>Mw25&=Pz($N3wIRf|qcc9*`8LUG#ZKZ_3%%AbUMPrJ zQ!o(>q|u;5g(XffF)rAzHq*a&=g#z^2X5XRz*J#Q3ml7U^L9-jY{KZ|r9bd6=rWdIkBU0Zp}`g^WYjgZPi#QPEao@@avIZ` z4{hQYrDk3TkIfHUdhPNywA7a9iy>fP{ED(D*KxxQ73T-jT;b-pC4?~ZYG?>!42&6P zxh|C9pdk!s`ix*-EEregAxwGk!-vuX_urTP~6ZinGj2FuyD0}j*KYrp=yp=9+%7^*tc&HV;;cZkp*AAwO_U9RnNT$;{ zc*WE5q&S|oPvlD+ab_IKoyU$?;2`1?M|=pc>5T6N8gXMa9XKRiq$dIN;0*745ozLS zzW&V6wh>mJd`5i?Ab#MCu-F8`i?)qA@fxt2f#plv3K;c|e0hsDiwyO}m2GRi@RxR? z82|XKKkwB)BSf1S#k{KGn8u{}j}iRH@yfdRZGMr~51ij+ns^W2sy~ER{EaKz=3zBg zu!VO6fh}!p+eW^Im9X#({F`0r&)mm)=Y`LIJ~pL}rjLB$Gw>6Ic2hMR)i9b|cRTE* zpJi8EhAloTd58<~3$2v!SJDul{~52s%e&u|I`jUl&WNQmLE*}}hnIiKcm>`f8h(*K z&oVgRBYvc>s!t>{QkljKZZEIMBUT7K3<{uvXQpWhfj2rsg(P^%44^yo5~HXqVoR(H zz`?XLQOY2OF-C$HSumbB{dA-ah8zx*WejQa0@+;Lb#)SNU=sIOjA8B)%QUM}Zify# zAx^BhV3ScM@D_uG?@pG(V=QRsC^Dr=pk;K_YH_itVZ_j6F-^db8CZooF_{(lg)l@Y z`8Hk)3(~s}9OMmyee>+{#qBl11RhDNeF1S76EkrR?c2@5b~6nO46q2sP$Kn^!I6Pe z4SK<|-sdiI9q0@TK+nO?Gxue@s%o9*caMT-V<7J+Ds0M{Kfq2=fivo%peI_1cVUT| zfhVuvv^7JZVts{=r&3)fZ}U~aBEBt8ftyz^Djd)lYYpim9&un%*>q9Zz>=SDjZL!U zN|v0dhp|~@u_pWh7^%d2|Biha!R*Ao$Q%L{jZebZQf_99xIKj3GFOS>Cfk!y0Kww6 z*iF&~&vvfFmVv#2U7oS&De$2-RzV}ND1{Luz4fOGgn9L83x*3j(eqJ7D>wm4t!HDGEnGZwl2JV7e6vJ(sL7ng%)6u(NT**;;|u zn0TopVNSHtv4R439#wU80?~k_eXyrXO{xZ%$0^FMNxOFJ;Fg}1Gz$*g@!g4Sl>6>E zfa*K;Y7lm;aU@J5vj_L@pzT)D;EhoP7Z{I)Io-EwOS<XRnMfE+8xoql;=n*%wS^+u5HTFKHvv*he`h08^?E5Bo}JaZPgj zhy+Zjz?!%b<`T&eZlNhMjNPM=u^Z5S;&z*Uj#u;{%vnp{`0hCj6{`(MQqpcBB=W|S zRh}Lday*Wm88W6s9712?^6&dkjivwXgJ;w4{?mIR#6R!(#ck=oeDPAcJS>B+P!C#^ z5##9?EKU$dMt}DD-DWh_Iy?GO%PfXiL6JvPcJ=KdF8z4vM%7Y%S)fNSq z0PIn`HW=eY7QHuyF+8k572J6RwE|k5^VW*ORs@7H$@WQ)+9+gH^F%?dW1?Cyc3S(` z+pBC}eD*7oXis4Sh4c;3(Wkz&S`o0^%MCRzey}_J&G8xfz%s`l7t(>9+W%VOX0myh zaK=xBW@erN#va#ZNGTy z)_?lc*|1Zy$-L~*qZntZGFxE7M7u|=817x7eLV(T5A7|WO$Y|*S7_-$haG6KIu7@6 zH0JUk<4EDQ_t=Jwj7MDi%Xl+{AZ~Sm{<_3w3Buhbglx9?Pd{|i_RE=z2z01JJpuve z_)z_ark0_lHg09IdwHFE1N7D8LL0i=Sf5J0U3K6Q*f`cyhs4cs)+0?Gf3>ec=t!&> z3>XVYkbltr8g0hxhd&KsXY*$v;iNrf19j;I*bVya_wFhD^W*pa{91baRMwcZ=fwbn z@ZK@R@t__9n0fBar^c?2yCZf15T~RI_6RP*QUp59O!g0W(E@Y$Xb}R zWC+VcyT;6fA;#t?JeMIO<>0DsDl;5;f%=wIoruLXwIP)WIY;YPs>cM>CJAEw5vVO&= zo}a>8z-T;wkt_a|Cmy0sdXv9#-K6q8>RjYs&U2C8JgS_+m9oy2wij|7*##WpD)KMd z#Q?t}f-vBpBl9qI)*!uZ1Zs{FQ+X?@`B_3rw;f&}; z(mx{KOpEU=F7h@3F4CE&??t)@_`CigO*M^?p`T3o;7&T^$yzVh$2_S+#3zz)1Wn)_ zFd1IBh{Jn;WEo`uTG)t*)1mDj&5yb|$_d~uYzqh0Kz2ZccjCBaZ*1qUHKV89FG zjADWCylW281+ht)FdJ2bmnVE#zD#gFjTQOjEZDs+@(kL_#O}oC;OgR9CzB*IV_Jn7 zdEhl93t86K!SMKz43a_u1ru@Jnn~AcSeGpP5W?s({G}8+x>qziX)7!+qyMl7W>7q75bWyh2wCZP#LJmHJE%K?Tu%82af zY2z$@9}9@NbnP0<7Gc@}QE(z7$G#N{cCMzKxy}xID@-3+9PD(iVSk}sl>}=<8jm6f zSjljRYi*0zMu9V<;U_~K`1d;o3n~+ff}B_2k2t2&R)#p1IV5`QQb)L}P3oiJQT=TX zcZJ<`wa&JcZKp6Nm_Tr4n0QdzV}nI@){=n%Cys)c8zUHb9i2ft0~PtY4j3vH;Y@Z4 zVq~^tpv1E@+E5%j(@3KSQ&0vhpicestCFD}S6ZtG%h2^DnHw_?mtRdC5rVU&zzGr}VUV$zd~8V#!|L}=$& zN7zY$Ha#BY71XXzol^xD5O}g=1}9liw#qfD&HP&9n1jby>dAj{dOm&cI7WdvcF^3^ z8OC?j+%dI+ACHoGGf>>R!P+NO8Eq35WBw4u1;eTK*OKi6gJ7G^aLlBEGFs>_3Y9wG z(mWzI%vH=Xv)aem0u$25(TmCHS@0@NHKb|icK80Cbnw8gbm&YwOT-m#H6KV1a;c)@OB{E&!aRoXa+4{NVT0j`gd=Se&nr24fKuf&Nk}D zafue~-7H{?bejIYfZz&toBXKZfz;P3d+l&k#S}iTK=MHW-QPeO$k2VYawiD)S zmHMlJl!aTMAN(s+YebUcQIssuEW-J&MFG8Fu!HnbhI zjmCmZsYiG0o3uV*(tcKz&);~lpcWsdGrjg5q(`r52Dz*cP*v{j;=18IjBBgu$!7-A zb?o3c>d@Sbxhx2IQKLf@e8-0ko*q3@fGT9ZJ5DG_a(ww;KX^L5{uMjWUdc>*8~FaU zclD>Y|MT&n9cj@1>g_=qk#2`}9G=uFs71qQkeg#>7Zi*uC|Sae#B#cH6^$dbkkrhA zGKp+oXKa9G527)(IKP?3FnX$S(Kwm~{f5vPm{z!%MOn!_adaK+zzrRDb+*KfVDkv2 z)h6r!&JOz%$6>S)R6{$9>$?we?B;HEy$ko;=d`4c{!uAF+Dz~Jt&`Bo3b*$-FQoLQ zSMNzro;;myFizMnX3(lTkF-@``NA?71E=ul7#r?QEgm6_e!#bD7ajYb=6rVH4xIkYFk{7Y}%o_^!} zESg~+|4QlF;2>~eyNtFU7@SNG9cf8F|I(WpI#=jd&KFm%qRj!reSL)6=MZ8j(A6;U zBFBVQnMXC)UG22h6StqCJ=u&P)FXCJJUNaK+_|KUwu35xpWcW7f__c^@i?J^(J;DO zm04|_nm-M+M>FHYWb{pMbc#LzjjeKMRF>gU zA%-62X*Ns(f`B6Chg$HZ_KJO|bU!>fmwxZhu981K!YFb3ZrevU2cKwYZa}{q2$eRo zbUeqAIhUc8DYq=<=eS`J96B-9AcTl|Yx@OTNJsD9!zD_c=}E3MXAmF_aL{)`aHR2E zy}%D1{P<)n$jk?MQNDAQLg5KEF@lLNndwqk5sAno=0o6OEQ>tzpU6|VqJBOt%Q8bC z0L%)pEYpdS8{0nhxswQC)!<>gMPOgc`d~8zJB;J3JJu97Km#EJ2%M?Wi6#;Gu4_|9 zyo4}`IN~!L{?^+yPDv925$|RqKsw&zv-mdLSN*J?KkE?nDZWisCJ%oiy9UwE?@Azk zkze5#`SGqW!}^CSa3hTcEJZ#gT$QJJ7zG#Eg&MifKTt^-3-y37_z?F-v<2=4bS(SW@Z@&D(2_Jb2hj|ubS1!al6)=bc=p{B; zq1R|b`e>jgvNAnC@e^(0I{^v{%SZvI;f5LC@~T{4YH?mruitU&bk(W!aTH%kUDW;=4MXX{x^icgELWoQtb6pYmCxacrrK z9Y#fnkD$A~t%EfiH$}3c8SeHnZYhr#<{tyD<@xTPqR_HVdW9p<`j!5H`!dXDk&d-S z8E=gv@UvXJ5o1IMBZ(7rGrBbEw}qBv7G+crgMSf3B;Kn(Os8Ld)L10A+(h-La zVrcj=co8cKQRP;KC4>+~$FCTerGO9)MBE%djtdcA#_>S^K?XK<>xPC{93o7BIgw$= zgJFg<)(MfG(uIp({G+U};lTi4v7t81K&iplIGR+zVqMCg0E;8*VV1d`MW@eRQ4a+V z!lY3<87v2fz%2`rc!FT-;UaVyHS6P#pXPk|B#X)%uAK>Y-2`{TEky@=@{#HBthb9r z^R^x_zAKDj(WY?4{9Rnpij=`xML+&!t&iMY!zPG3Z066R#<=;2mlbnyCS!=^hthzk zFX4nJK*()rJ_xl8W6)F(w8+9N)Thk?CvL>Ow6Xz1;Tk6_8YBuZ zoN$Bwh~FMeEle9XUo25?1s)2i>c}i00UnVQWdPtH$0*cBY zFHJcYSSRhbNDK8c&6G94@dDe&-9^Md0Xr*Y;D?dLUxuWO-8l_^x=SxU)dZSZglUF$ zWWE)wC{$4edzFIBw+Vq;a}%0C8l+^-n#VQ=OH1nO?Lpv!{3Rh_bNAGRs=_DVZU50} z41}5|4A=?`3lwd{{Ii}Nw@TQC7ElVu+MyK5MbcdI^arH+H_AXqM2{(K<42{<> zEA(OUtgt~M2fyAhbl1LZaV%qK$Quu+KLQ2&d>cnl+F+zN*2iJQQ1iz=gMuq}r22Pr z&GPmw>Ev0CF@YED{nWz^FC+Au8XrOs(*bkL?lA4=QJZdVbb0BE?m=5;K7HfSlhF_6 z(HdI;SN0>pk*4h1(vWnfASwG6002M$NkloeL%`!=%(uhtMqdV|r1sx;6*PDT3=M*&g(hK7TolJavO ze(LmjuH{8L2ZOgV)d~dF;PM!eb?~TD2w9{ezZsA0_Y@X&3s3y*=W3e#{)f({kN)Aq zf*kIxuiKUW>o>>KfBr1Cut=j|*z3?05GnB181pi1KR!9faWM@fEBsVj5rHr`8%2{# zL5WAwnh^TUb41Es+_JyyWO9L2>ZBY9SL7EyX(u78xy|G9k)9@%b!S!zC z_yYpG{yn?Wne!v$Jr_dXqX%|}f!S~V;B=bj3SL{xI==Ze+ag{0=fw|omap-A6E;#l z^6Bg8*MI3id_QncD+@!k92yqTC~JYC$6gA@SeG65V0N1@B-Ye>G&y+x-ySIBKEsFgc!BhJ$nCd++P--PMlv#clB>e4a||}E{vp0 z1K6^t??}D9J5oE>880IgouiBiY}YJ#rErx~NERAY&_Fx=YnAXJjQVPPSD}hyvSZ^i zIA}(|<545~fiifSGLa^r4udXjRACyZSfMue`OlQsg7w}f>C zOft>!&ChI|$SGt^+auID!UfFv4`|vrp0%>d5i9zh0tqbiFeU+)ldkz8lt?lV;Jk^k z?bxvg((oWhpvYfskadLZ1OZMQrBdRs>)QF4Y)}qfDl$iUV;25^z`t z@DtzWXWi+$Ij-Nrj$h!#f=HlXL1#V8L+upa7tp|~#oo&1I>L9_aoshZNO#NxrVYk| zjbLo8LuQ;d6ck!sf-!rTUb6n%dp+V9i6KKyH_uM(F+j#EZ#c@B{T=;+~XvnAYRlx@YEaV$>WxkeSUR7mSb_tjMWe~Bl!z1$M ztE^|hYiJQU%JJL$pUoBiKQ7p8%Dl_u6`bG^FTIyJ zswqA8*i&i#+Q7{`$}|zvKSdqNZ^IR^-R>WCtBPx#{S2`96Y20M;frz%$Im$SwKBeA zw=@)epeU-0Z=5os9kBG*TmK06ovYQmo3N(M~T9G0A)a$zrvM?B1ZOe zfvGbJsTs>1fMt~E7~zi}>GJNXB812=7ICuX?mTOoq>)9#PHr-o;D(SJBkTyX;1LSP zH`To|Jh?2tDj->Ylx^RFS*O0a`{PMK>>d{bb%~DvjIe;2&KH^)09oRx+|jlM-VkB6 zwF#ooD9Xhnm(PNd1)j{ji%iHxS$L%uh`aAhf;btwdR3r> zhwnIA5+P(^orQ&oFX}@a;RYJYBTsPYPJRRLVb6hjDs+f;1`c=l)tt~MpcyEzso|`M zjQ$$TuxHuDkH>7>`F26)xqAgsc~xQk+_}#AI`;Up>ei*yu8Lz744fgT0~XsSYZs6Y z6L}a>q#e~t(SD5Q{_zwuq2k>^xwB|I%pq*k*IPrDVNR$>;6Uw(Wp)kSy>)S-a6~$; zXBXNdHP%@e-Kn?rj3X>zLjZtRV!@5w1LI=jz(u}o=p;Oa(aG96;9?Q0HqZvU%8Fx@ zvuy?gE$xd3@`b4}k1p&%baT{3?T&G-TkZC0VRoCfu`q=#7@{DwQKQEyuqzIZyRnO- zcE}_W4ULP&4k!$f#--aiN~6(8^txi#f8g3M0*@x_TKpmE75hVlSfCI(H>EVu?V~aHwLjQ(@M57AzTYRgW+A;NM?V6qcy{f z6N@m0jvZ=MjB^BV`_?WP@D2o`qom^o0o3K(RG*u})(x6NcDWW*l6GJt$m?}yI5HrE z9^+8-53YV@2gLT(8DHV2I8lhIP-_iX+^v~I8$(xDk8ws|HV&;AeMUOAUpfBRN?w87 ziT2PcOwr;RyT)X^id`AFK=Mb}0$yyk=-c$2$ccrv8b~tl7q4rRLT!>f9@%fQP#21( z>=@^0;b0bvu}FcMLKw#k^U;QiX=E-HB7O3a>*+5)HIUx%rheea?l*twV0z?R<8e%; z2}Yv{TuE29m$W;H5MqiWH4Wgr9!;BBcAnMXsHHAy(bTY5_NKT7%5dC}NmoPU`i*O7 zC`>`q)+`IaqXY7#R)zMD7HIPk=zSI~qdmK{@ifmdBp0&O8#-^*z7;e*J0kfvR}rw};7)D~dicRD>1hNMYg~;T*O6ljXqw}nD{wJ= zJ3IJc+k~suFQX-rYW7v~b&Oo0uX-#?;i%ev3i4@Ye%d|as3XV78pH)--3GQcJQn0w ztZ;MFU0dq=@Bd;XJ^vnz!0*p?QhxVW`qSsXK9Qb2w?Mz^N!$A{hTh+je)%mgtd#A` zx4u7>4)1DBGoxtltlJ;4iB&@$FsrS=vx*===C#oyI%p17yO%v=|5hjmEii!CUapys zu6C!-{SCrt=p~NU(%!C5wHM=UPhROR&a2%^kF{Y0xG4>HucQYL9wA#dN@#Zk8=v{s zNIJZ)D;;})8@(h%UL4_k{D})3jYingih*Rt_;rMX2^%!IPQu{8!h`nF zZ9*qum>OKxVIN03QI6f2!6l;b0#m>YeggrNhbMl91Aj2kJdMZy?D!5>_yxRpm^VW3 z$j8pg1Q8o>Y_w1@{AI+=*W-V{=6J~1f?6Dj$qV{ZTQk;_PAh~gpi2$DKk&ez^oG~JFn#;c^XWT}B8(JY%z4qKk)^P> zrV*durp!L_;zPz0*zEHc(KNhv{RTo+=w2K}8lFyeCKQgK0l^Ul>&lZ2pKz>kBA$5% z9y6T6zR5hc%7#@eaPZD`VjYMUdEc(R2w%6d{-XC$*2$+Xa^o3o954{s;uYfh69#b^ zuoz&N85XX@b54XOVFp*ynNMU`Xlg zry$odBd-$fG9FJ|6hoXcANyhW#h)TVnMYN;z^(qJGk*1V>0dkpM#3XXRXqD^IG*LJ z-%&T}r;9r9wEop~F|)uaBO?nbwWyXEr(DO~bI+0Vq8A=Z$DcTXmT6(@q&hG2uY8yA zlurTzmjytU5#moQmqw+<=-%1iCVKFHg zx1bABX2L8Yhj4|=LM<1+EYX$4(7748$(@LumZ-cb%}(Z=9aI-& z0A&4WMznahHFd;~d(TkU5844Lpcru_F6sJ!B-!T4q+EfEKCJiH4Qgg*7K~FW^(KE8xv?NBh)m`$ z^7Su8+P2m$-p!YJ-o-zZ1O60P5RA*h7Z?{cXmW>u=f;t%-G@AvCpAFp4(e%(}M@ zk)v3gZYxhe`vTieFv|vK#}9DK?#bgg;atv<)%u62FtfOLN2?iEWI2s!`#5yTgp9hW z$f;Ielmd>yd$N zZZ|-o!nO;K)%AF3l@>r{gXP&l`K1du#$~|vm}nJrZs*IfiU z>d~Y3++AM(@S*ZAKl~Z+jPirkRGn|C3|+=4nwB!sOjwhXd7$>PJ}MAxXq7VC5Uj;> ze9TaeTg|*|*EnM4$?b4%4_d|SeUa@E6ZnH#r_HoZ*|fhVf3vi|qa3BE$ZpcU6J-Q+ z`RFF)so;>c35`}%Q3O+8w;6uS+?2h*CL7H#XmprxS4JFj5DqBY!)|NJxM z8^87tr|mFV=eqCi(eigtvi#kjdI366)k=>AMz{9q_*Q!5R!3 zDYow{R%IsX#>e*3##80#XXc?%x3H-&t31M*=oHzlcH%@OlZxz5Jw0FE_6GfKK%dK& zjew6rP{q)5NSyOnl6g$?7*=U+ZTR=T`4H9^wo|=6@HhUv{2y3J=)hPdq$idf!q3RI z%~5;_En^~I1^Y)I#PN;@HI3gPm~wc%k6uE z2&NvNtP*PhO9hpJ>N1wtinkkUtvy3~=xfXP2tnbD0#&OWd5#L{+w_GM{0Lp0nlIn^ zL$}Hw|MDAK*5#YOc3*yQonBb~!!Q1m=gV*W?ghq;ahyPNavFShI|?lO`K|d`=wH7} z`nwt8bfLjmaP+7Dt)INN|F!r0_kZb9`Mv)Wg(~}#blN=>{)c01EG34tgrlwCBE9%N z{KkKNclUni72*HwubwZTd>SPQIDh(?OSI>OGPURtyjTf_o_3ah=Lf$~KKG9w?WOz9 z_i2IjN-Lz^M;^ZG@0~;8TCF5=QXS*K0JN{w(6)gQe)a)-20teiG=@7HW;p`czPL`m zS1I89V;H6163$#*J+HbF>PB1AI^;px3>0LgzzWUTqn(#9GvOT^*f%8?|m!tbti0&-UzYHHXZv_uwOC;gMY}v=DlA}1ppP9ZC-Wf$%aA~EDFOBk( z4pS#HdacWF<9M}uee3-VKk!@2%QF0te+969OOzImAg|zzGQ^GjIDLmWhG#5rY&Rdn zxCKoA@Du(TP}3)Zk-AHqr;fb$VDwvy)8(1y$(Vf1w^vZUZ2f8Jh-37`^UlwA)3z&* z?Y-TN!!PwQqBt^f_ai?S_)ed?o4Ml%Tg0E@RJDzA>Du-3FMjV|m(M@*EQ`ljAWPq^ z%;X{7q;2j!_{p}xW88KH6#o#I=k|fL!DoAajeGKWMWU@pp(9>}A;5J!U@L|nJD6G? z-92f^Tzm?1gF9outK;$>IJ#nb`FCl1ZPG<*@4a|mc@K>%f92KeRW+&;kN&_$9QFyH zorcR4x{EN$AOocxg(!(fc*G9g10*9lod`Z_Z7G zg;n!RPAVM2Wx2I>I2Xmqp!0w=wr}WXWjAKRhw!tpu(GXOxQrPtt3rU7Rb^~1@-J<| zQ|d`sQB)y3i8m*FUJ9{htWe;@XpI#el|ycoh~k9_6w?H7!*?ct=1hvfCCob&*2OEC zN>NUp6ka!Q(C4b7wbtUnZ4N49td|oG{cKpK>G%`@(Qh7assQeZ6tf&ptDt2&iq{n; zX%75Z8DrusZ_G(VD6bSSH#n&vTOKSA4TbekSk(H&G7qCH7{@{GtvP&HY-l1Z9kYdI zJCphy6Tn7>2$9=q(_;tsls7(hiW+TW(vOcB>ZE@iLsw`mIK3E=ka1y%QET4YrB_@6-Kxp?h;9J!@ zFZkYxV4;P>GRL*Xp9%eNJ9Mf-%ks3$@MInZ%|VnzS{n@vpzNEz&UOq=hLJF$s9-x2 z-|esZKp4V8VN_ovIES6Y`o!r7(>OgSK_=KgH7rhB$WE<6T`H+3EHklm_dx_ago< zZei81k7u0(-$Y5NCDhQst|$v#Rq;4mSAw@Qk)LJT(>5laclfTakK0TLS2^l;jjb*E zW3d@k=v=yT9;GLzA|Xhs>;#n1U&Se~Koef_DU~GhA)8Kxmdd-@UsRCTpADm)#s`<4 zq@sh(VJ0ODSh~3K?MXFGJhk$GY`Xkw8^%%$`n2E4gK|7<=#%z?epPHXrH@BVZbLz0 z`C0`z}{%!IL=AoiBgzF<1Rj$~d7Uezqk-Pnraao+Vb8JsHStBomyB_Sl2>vfX3>$GkVg z15|M7j5G8}8{F2P2U+c+&D=7lf=8TeFiBVGDPNU~eB{rj%h$YVZ+ZJ0$I2(3VoMd@ zJu2GmNmL2`P<;-$%|^?sZ-3v>9_&8+tB*{93kpIJB7abkhieav25y&s{99|~2fz1p z;=lK;d!Rd%nfSoCIfvy6bn(!Acb9`Wp?>+|Rkomc^f-QW?5}pz?$Sro5XTCS;1A(8 z{)cXI5{kmFO4jY1JfwqZ722b_?vyj9Cb7I?TNNk0xI<+nQY`4~qvKT14fs0~#ORjY0(6sW6wX=o?C(Lt2u^ zVPPo!*?h@oC>|vgJP_V`lfJICil@YQ0?#<7MzP~4eDX_X(D%WS>veZ|%G5yl=x3+O zwK@7SJ~ULc>Znx(?uBc2%D!*-RQc5(zPo(WlPc3*`})+gi{<-&`a=0bd{$Y%_!6SC zPS8e<+c)52jv?t()>lDYA|Z|^#H~{1wHf;+e7;jqt}+(ihAut9FV>3ix>&3=RN2vk z&ng^B>-H@BHXRarkPg>zzB^XF?}H~^0r)@oM=zGAUqt97p7iXAY>t60Y*YmV{f_pk z!nZsHIDlWpH64s{2Fs0k_{odc%lT^yzJdyMiTFfp;Qx!y|Caj(?nS(oAz4{GCm<8i^+B1uxUmz^!plK63GD9xPQ)wbC z2DZRpp8RZQGfA@U-B;`A#yDApMB`}iDMaj%UqFq zTAo{j47Y8}2HdYPUpe=}#d7ZX3$cW_g`&sf=a@`EL;<^t8>ydUcA2aK}_+|ly zw>bH1xaoXp-^tUubx8tOjnIYl=WSYkjh3yS30fJHrxjRD(HEXLL^ZnQB)$(^iR_=6 zs@A0|!*ZmNE^6W%FHyTdVYj{iqAU36@=v_J3>)mN{8m^Gr=|mry!Vx3xzMG4;Kbho z+u~QTG!-S!vSs;M;yb4cZcUpaJ6t#T6Xu_O*t)h5&IFs*@(t*R+kn1zKfmVH@^5k5 zyZQ1gA4&Zv!$MMy8TsA*+0q&2)!us%2?OR_d=oFZ+IQo(XFvGd<?={n-lX&3=Wm`*|6I8cu$ajBpY(zLsedwzD{}+C`MdS zWJ0IO_zsw=CrBt71;(kdt`P&i@H zuYkgOg}K6!+#%xB4lpgxa_V-aO6sOpkgf`)8fI-3UN>E#5ymi7;R8FwH$N{eK-`jH z-BW+QsU*>oJ}Lqd`10_$@-%M_6gS`>w-fbPvu)&tFH-W@YQ_k@AMuA1g1Oo8gp!FJ$YC zK2J3DcY98h8Bo7%g?PwZ4aEwjRh(t+7Tm}AYlm|!ZQQRepQ>~rJSwzY*F%T`AI=Zt zC2oySVG!kt`63)UxmF+)&FW(m))c_@uX5&m?{2QGJG@$rU7?q`4M zFisU;F6Y?hqBX(T2$LZ4SY-)vRjon>OK6HZYIdn0zlH#?iU2mpiufRc+W!5=%h4l; zIfnRLnV(}~y@{}=V@Cd};F4yB>>Jdd>LPHdki?<`pCtn*8B~^xa1^rEUHU26j>2RO zfqy$?ymanzS;pz?_^vUWE~B_1&Y^v~%lyJE1S^DUoG)kpv}NGjck%KR6El?!oD2pH zzjPkwn&4&(r?$rr?~gKNoq^XQP_HzFibOf{iJ8J{LkD`V)iQo-RH&i+?se@C{<|uE- zr=Btg15dvRFrtRwIIG=pgo1D{lIYI&=CabxpDy? zKN3?E%=Ts4d=tS27ak~iTzM7O&}L9U9q>X>6G{6kwfs( z9p#yq&R6*D$i(}pUwpQF%e#-D)Hu*VR?6S_;L-92ADs?Qu)pf)HsA`ec%j_LSo9O& zR%vtL(hd5>B5i-W>_@Q7NnI#tv@+1)s@qXi#>%%;KwG@rMxQ2Ho2;X3k%#^!J~@8y zd(M<69@$xb;n&ZTy?oym6+dh#%Idu1Ln#m4zX!g$z5LO~rp*lVceZy?r{=55)6490 zSEpvfqki#!S}gB+$AREgoPX0hCd)7V7LL(*KCpMVyy5Y~Wt!FE=`YY`S_QxxX6Na9 z@RCnH?baw(Z`p#jn?B}5a}@{9b!eyqv$XhJs?TeByJ{<&Qr# z$LVNeWo8XOKHzdMzB7iYw`1cD+Fy%4`L|YBDtcDfx;22(Z+qES{`52WXsO5!4&{}O zC24+O@HxjBqZE=Jb`5Tn69>oWzpQxA;Ma(4jtcGjM-P>c;k?!M(-Hkfltt#_c!q@m zZA!H`#cUWy?`$*V2zQkSyQr^<*K%i`J^^oq#uqswdl@U9Z~xCOm2Y@*p*(PETY2ll zBjxK*tbLf%o&Mz0bLG=0xPJGKW@>rx4ad^`d-nsM4yvg$ix>L0a-3gNqic7v1E@5n zJ?r@I!UkIx{mwY#)|?giqI?9h;zFSuMDR#G9N=`yY(LSuN***KQ%m4U0C@Q!HXooQr$|La3SscB4nvvs4b@C0*qyM7i2~A2{^{8UTNybAh zPj9fD(G%Xbk?yX$j+NKly$>h07fFNgI*1YlSikW6Il2$<_=8^rHrtjhsrwEMlqcSF zvK-$(R4%=IvwZyHi)D)A$5Th**pKG$<@A{^T*3J>3s*rN^^1Va9m+|4efJn;>g!e= z8X?u!F|d5f@v8>VJ2U_BRpJJZ^c|n2m!zfL2WY#hln@3RK%6Ux^K3ncx=y?10sL36 zY+EemDD%0Ou4Mra^$}s6@NY*lVPI)@^A*-Ka#t^+c`?r9N_*GGT9D!9W&4s=Y8F>s zU2wtzR2SC!P;r`wp%dz^aw5-WV4h@RcG4$wBy9!XEnI$Xgurasa3yf+!c@wYW>ltd z-PYnc`5Q(W=5@hg>MXEa4R-T0C~Zev)furS# zhhATP?;}q^61I!9XPzmb=51cS8zc?zyvAH%`Wo~bJc!%w5(mU_oUQ$UaMQIb`SM~J ztv>l?B!O+=me&$;4-Wlqy^Q9a2g^&Hy70Ukzl-C04*azYZH3ufuEbL0D*^wYLd7e5B9%-o+0e=)QMZ z_23sqKlNYM&G5i){`?ZBi`a{A8+chy1La#>DL)T9x5(a&_o}OXZ_yeL>;d&9()IG{ z;7mV7T4FA^Z{kZYro5{3|KGmC)xWZ@y6RSixLQ*uKq@{6gE-_fb%5k6gj)Z}S5;^@ zfkk`>ZB*gkJR%f8aOP8$915NajSA1Md@1BIfq|GZae?q9ag{O(n))k|&|#-ZA7u!_ zlwnR(wE~FcL@SHC$B}xOpQLQL!srCqNu?{w)Db&{uGyvUK1v+f6HfOCb+V|?wTS`9g| zaH8fvg(#OTUGesxN`ZX{{$rpSIdWxOKI40KrHL z5GT=|!lM;}6P(nAgep~Z>gv&)ftx(nnFP3v!&U>!l;bDcnLA)u&Il(^96flDtpEyU zmRs@5z%{Cfq2lzU9_!vSK zE2q%GGI&r}n4x@gAJ@_h`Wzo-S`97DF`>0hCpZ$;)#_DNs@C*bgOX(5zPZi8ow@Ha2;!(f8b@F~q9g65EOj zjzOK6${Xx&_5rt#x#eY*umKb?&Q0BBa)+&SO#4Fv@-gE(X~<*`T)Az>t!+aHv+|ZG zR){Bkm_NOQtzw7EqYoc0d-e>meQB0smN_v7+~0w3ZGitFjx?5sY>*e&fPqlBWl<*{ z$WsLi7qntO)FLi^bcpQnx5lZzJ5iFHIlaI9>rXsIe}SK%@B^{_CyEns`8Em3TP5x; z@UsUY&()zBR-X)uzZUBVKWTaY9;z60gXGTCY2rATEm5hs z0WS5;vdH!@GK^Y!?+UC_U(JIdu%Bu3L`&{Mn`QE#LX6 zz~i`+uEf~o7!rS0z#wp(3{Vf7K?^j{k1}PpoWBhHOSW3N zA<#^4^!I=8eO~}pPdD0C_D^aR2Ypih606JN+)D*l{q;Qk{6hK8zx#ZdW~+>KT7{m(^)Oqm+-_;v z%5TE+rA84X&vvY%Q*x*A2y;7@$`sqwuv?g4;V=DW#&a=&Tq7;*_F@q5T@JKntu{&*mG#3}PLnJx5MR>sL_x;sl9JC4HES*m`bytbw93yXDh^yJ?0oSpDpeC14d){bls(U>fpD-ozC~pY2~^;@-`la4+L_^c1|NM-m5XulQe~JS|B7=YRHb ztouG+(^yvU%WEcz3i0G)S^0H&CST(cE{zBWw9cRU^Evo7pKi<(v{zgmoM~6n^Rd5e z6Sqrb{?bOu@Ix)f#oXSwC;obu>AExxUxCqdg!{SwGPrj&JhlKoQg1KwNIv4E2G#d% z9O`kZ96ofkyztVC%xhV=F@pH%mDg8j^6Anij?aDHlX-jZ?%vV{#x?H_rk1Wn53K#T zXn>lINVKso57I7vGM|9yH`2A}$-jFsZ~I1yOk^|Ly8NDc^b*(V^l;91pBt?0-uq5E z)A!;4NAm3I7`UXb_7403)G#k2bM@n-z`xGwR)?w*U%0MB0lTs82v(*D(Kl_Qz zf`MA0F4hdBtpr6LFmVU)s)VTnmFZnYbL>$mp<>8MxpAw%5_}fOlylW^;}g5WLM8K$ zASb1oj>oww1GR&7lo>GZD2GG{|Aip}H_s8247V=S-Mk|#rv(4B$u0#DCxQ#O(YL~l zo3|o#sP2&wIT?2DHSzRCp@UDA4_c{EBcTlZ(u_(He>x!MMtgc12|^b8 za24cN;-`R9YM6|<>MS0z@+c~RCrTDz)b#xpTToP{h{v?Cz6UI^qnTaM>@XG^QTQ=Q zl_rN^X8Mp&U^YwXNqX?Dn)Cw{AN0ep&g4%Ns9>qWbKQcYa>$=>NjDDADy33qw;)-6 z@^xc8_sN7bo`U+;VZr zL6KD>(yrmeQU{9|?{M17{%rM`!k5X6C$zBozkwyp`ODJ?zxbnJ)m#Bt<&XW${>{1~ zcLYt8UMgc1{04MlN4{=>bHViv3XNR|jgxykW?AJZVbT%lhB0M7eQctfI=LUA1c$j; zGO2IffilIDTUJmWuAr#cjztZW8oZ0Z_}BrJo-}j|#euXcY|hafQ|+U)CjKOJI&6Eo z9jQ)AZChz3euxw(h^aN1jaawGNh$p76J+SgGSm2VSz!B-(?A}3_*gkOd7#YPoJK(CR%RV&`MLGT9;5Y=tG#vGA9Gns zcZJ@8Sbie5oZRSi_WqN1m&tt-9Ep6L`a;+Azwk^6ka$(GZ5r{c-v$+qv^izpoV!Io zTO^kJ4D7&D{Kg-AFf8DVdl$zxZwZa>c`J&XPfnHR&d-+#j$)jg*q5=uekJa7nCSK& zeMYD#P)OA}u5NX53yZj7{NTe*6g}eIdf#*WIJCqnJvh^YuZ($uW!V$urrnE%A z*ojhGy5JLa;3OgZ3GJmrspz_f<&4V6RRr(wV6d;>pkw%OdhnjZSd1-~OH((aD6VbC zHpFZf)5i^#87dmVpECCn0-07L;>frvyVfb+F@{=#?>l7={8|BB#gIP2^b@p0^D6Ka zOCj39e!Ic(z7trQY(qgh!nTqr1Sk2Qib3I=r$1l5HVeJz(0Q#)qI^Ae7^m2rIP@YG z5wj?E?kGq>q2uuKgL`(A1LGs*AS-h_p^F)K$ShkOkFf3N!Fwmm>+T&d58uDPJp8~R z6yv+gRgPD`hO%6Rtay)w6pI*;B{U*U(jfk97~bW(j!&+Hr`|Fac{wp013g_VV<^vt z?L|>M%y_Vj4;iSH^kfWg9EXM{cJIL|=OzVX;RBKG#7VUa4LY8efoP56*p)E@THFr3 zIBwkT9JPM^TPMmd|Jc2hvUUCJKfP3b^yfI;MFyWdr~^mqPV8PQkKR8SYpxlT8Tzqu zevpdF2x$+u!0coToJT?1H{&Rs@`ss2NUO7K3wrV8Y3LCS=;=F_VcpZgL?DVn`rQsK zh*fG1ZIns2Y)+yazw+{2`O}ZSjK!YYX&o=2V9JaFIhrZT561y0l&+ z81q$j5xKUpe6+)fj<{Vwa0?bhE=z+q0;5PvJR@?ccyL0IbVSPhh_GA+)@{_zUkr`1 z(kEX+SKdv}kM`;b`;=Yb>cTBRdK8ePPX@#{efLWmpAFzLia+7=my3Yzb6^!-iQTlx zvZd`3o0mbBo$tUH#SVc{%8<_Q#;XLyGiBwS1bOb#xAOb%)>(e+Wj?_l4@u9va0{F7 zX;^XO2~dmlU7RjEmS!9@4c}CJCJ%zmP*@qWatTZ7Nq#BQG~&e{ x84Sr)QWO=or|`w25nce*Mq+-uvUjE3aPM7HoQ+ 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