From 64cc1de24b5f2b4ac4c18050aa42d2145be0d77f Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 31 Mar 2020 19:45:00 -0700 Subject: [PATCH 001/128] Initial commit Co-authored-by: John Otander --- packages/gatsby-cli/src/create-cli.js | 13 + packages/gatsby/package.json | 19 +- packages/gatsby/src/commands/recipes.ts | 39 ++ packages/gatsby/src/recipes/cli.js | 421 ++++++++++++++++++ packages/gatsby/src/recipes/eslint.mdx | 45 ++ packages/gatsby/src/recipes/graphql.js | 283 ++++++++++++ packages/gatsby/src/recipes/index.js | 5 + packages/gatsby/src/recipes/jest.mdx | 52 +++ packages/gatsby/src/recipes/package.json | 45 ++ .../gatsby/src/recipes/providers/fs/file.js | 35 ++ .../src/recipes/providers/gatsby/plugin.js | 112 +++++ .../recipes/providers/gatsby/shadow-file.js | 49 ++ .../src/recipes/providers/npm/package.js | 30 ++ .../src/recipes/providers/npm/script.js | 50 +++ packages/gatsby/src/recipes/theme-ui.mdx | 37 ++ packages/gatsby/src/recipes/todo.md | 28 ++ 16 files changed, 1261 insertions(+), 2 deletions(-) create mode 100644 packages/gatsby/src/commands/recipes.ts create mode 100644 packages/gatsby/src/recipes/cli.js create mode 100644 packages/gatsby/src/recipes/eslint.mdx create mode 100644 packages/gatsby/src/recipes/graphql.js create mode 100644 packages/gatsby/src/recipes/index.js create mode 100644 packages/gatsby/src/recipes/jest.mdx create mode 100644 packages/gatsby/src/recipes/package.json create mode 100644 packages/gatsby/src/recipes/providers/fs/file.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/plugin.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/shadow-file.js create mode 100644 packages/gatsby/src/recipes/providers/npm/package.js create mode 100644 packages/gatsby/src/recipes/providers/npm/script.js create mode 100644 packages/gatsby/src/recipes/theme-ui.mdx create mode 100644 packages/gatsby/src/recipes/todo.md diff --git a/packages/gatsby-cli/src/create-cli.js b/packages/gatsby-cli/src/create-cli.js index 6228d21ee5ac7..aabc6cf230cf4 100644 --- a/packages/gatsby-cli/src/create-cli.js +++ b/packages/gatsby-cli/src/create-cli.js @@ -293,6 +293,19 @@ function buildLocalCommands(cli, isLocalSite) { return cmd(args) }), }) + cli.command({ + command: `recipes`, + desc: `Run a recipe`, + handler: handlerP( + getCommandHandler(`recipes`, (args, cmd) => { + cmd(args) + // Return an empty promise to prevent handlerP from exiting early. + // The development server shouldn't ever exit until the user directly + // kills it so this is fine. + return new Promise(resolve => {}) + }) + ), + }) } function isLocalGatsbySite() { diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 276e46d40a68e..ac46d8c30518d 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -17,6 +17,8 @@ "@babel/runtime": "^7.8.7", "@babel/traverse": "^7.8.6", "@hapi/joi": "^15.1.1", + "@mdx-js/mdx": "^1.5.8", + "@mdx-js/react": "^1.5.8", "@mikaelkristiansson/domready": "^1.0.10", "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", @@ -64,6 +66,7 @@ "eslint-plugin-react": "^7.19.0", "eslint-plugin-react-hooks": "^1.7.0", "event-source-polyfill": "^1.0.12", + "execa": "^4.0.0", "express": "^4.17.1", "express-graphql": "^0.9.0", "fast-levenshtein": "^2.0.6", @@ -83,7 +86,10 @@ "graphql": "^14.6.0", "graphql-compose": "^6.3.8", "graphql-playground-middleware-express": "^1.7.12", + "graphql-subscriptions": "^1.1.0", "hasha": "^5.2.0", + "humanize-list": "^1.0.1", + "import-jsx": "^4.0.0", "invariant": "^2.2.4", "is-relative": "^1.0.0", "is-relative-url": "^3.0.0", @@ -120,21 +126,26 @@ "react-error-overlay": "^3.0.0", "react-hot-loader": "^4.12.20", "react-refresh": "^0.7.0", + "read-package-tree": "^5.3.1", "redux": "^4.0.5", "redux-thunk": "^2.3.0", "semver": "^5.7.1", "shallow-compare": "^1.2.2", "sift": "^5.1.0", "signal-exit": "^3.0.2", + "simplified-jsx-to-json": "^0.1.0", "slugify": "^1.4.0", "socket.io": "^2.3.0", "stack-trace": "^0.0.10", "string-similarity": "^1.2.2", "style-loader": "^0.23.1", + "subscriptions-transport-ws": "^0.9.16", "terser-webpack-plugin": "^1.4.3", "true-case-path": "^2.2.1", "type-of": "^2.0.1", + "unist-util-visit": "^2.0.2", "url-loader": "^1.1.2", + "urql": "^1.9.5", "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", @@ -144,6 +155,7 @@ "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", "webpack-stats-plugin": "^0.3.1", + "ws": "^7.2.3", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -201,17 +213,20 @@ "graphql": "^14.6.0" }, "scripts": { - "build": "npm run build:src && npm run build:internal-plugins && npm run build:rawfiles && npm run build:cjs", + "build": "npm run build:src && npm run build:internal-plugins && npm run build:rawfiles && npm run build:cjs && npm run build:recipes", "postbuild": "node scripts/output-api-file.js", "build:internal-plugins": "copyfiles -u 1 src/internal-plugins/**/package.json dist", "build:rawfiles": "copyfiles -u 1 src/internal-plugins/**/raw_* dist", + "build:recipes": "copyfiles -u 1 src/recipes/*.mdx dist", "build:cjs": "babel cache-dir --out-dir cache-dir/commonjs --ignore **/__tests__", "build:src": "babel src --out-dir dist --source-maps --verbose --ignore **/gatsby-cli.js,src/internal-plugins/dev-404-page/raw_dev-404-page.js,**/__tests__ --extensions \".ts,.js\"", "clean-test-bundles": "find test/ -type f -name bundle.js* -exec rm -rf {} +", "prebuild": "rimraf dist && rimraf cache-dir/commonjs", "postinstall": "node scripts/postinstall.js", "prepare": "cross-env NODE_ENV=production npm run build", - "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src -- --watch" + "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src -- --watch", + "test": "jest", + "test:watch": "jest --watch" }, "types": "index.d.ts", "yargs": { diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts new file mode 100644 index 0000000000000..d5c8526f40aca --- /dev/null +++ b/packages/gatsby/src/commands/recipes.ts @@ -0,0 +1,39 @@ +import telemetry from "gatsby-telemetry" +import execa from "execa" +import path from "path" + +module.exports = async (program: IProgram): Promise => { + // TODO add telemetry + // console.log(program) + const recipe = program._[1] + console.log({recipe}) + telemetry.trackCli(`RECIPE_RUN`, {recipe}) + + console.log(require.resolve(`../recipes/graphql`)) + + // Start GraphQL serve + let subprocess + // try { + subprocess = execa(`node`, [`node_modules/gatsby/dist/recipes/graphql.js`], {cwd: program.directory, all: true}) + // subprocess = execa(`echo`, [`world`]) + // } catch(error) { + // console.log(error) + // } + // const subprocess = execa('echo', ['unicorns']); + let started = false + subprocess.stdout.on('data', (data) => { + console.log(data.toString()); + if (!started) { + const runRecipe = require(`../recipes/index`) + console.log({runRecipe}) + runRecipe(recipe) + started = true + } + }); + subprocess.stderr.on('data', (data) => { + console.log(`Received err chunk: ${data}`); + }); + + // Run command + +} diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js new file mode 100644 index 0000000000000..9b1fa70419097 --- /dev/null +++ b/packages/gatsby/src/recipes/cli.js @@ -0,0 +1,421 @@ +const fs = require(`fs`) +const path = require(`path`) + +const React = require(`react`) +const { useState, useContext, useEffect } = require(`react`) +const { render, Box, Text, useInput, useApp } = require(`ink`) +const Spinner = require(`ink-spinner`).default +const unified = require(`unified`) +const remarkMdx = require(`remark-mdx`) +const remarkParse = require(`remark-parse`) +const remarkStringify = require(`remark-stringify`) +const jsxToJson = require(`simplified-jsx-to-json`) +const visit = require(`unist-util-visit`) +const humanizeList = require(`humanize-list`) +const { + createClient, + useMutation, + useSubscription, + Provider, + defaultExchanges, + subscriptionExchange, +} = require(`urql`) +const { SubscriptionClient } = require(`subscriptions-transport-ws`) +const fetch = require(`node-fetch`) +const ws = require(`ws`) + +module.exports = recipe => { + let recipePath = path.join(__dirname, recipe) + if (recipePath.slice(-4) !== `.mdx`) { + recipePath += `.mdx` + } + console.log({ recipePath }) + const recipeSrc = fs.readFileSync(recipePath, `utf8`) + + const GRAPHQL_ENDPOINT = `http://localhost:4000/graphql` + + const subscriptionClient = new SubscriptionClient( + `ws://localhost:4000/graphql`, + { + reconnect: true, + }, + ws + ) + + const client = createClient({ + fetch, + url: GRAPHQL_ENDPOINT, + exchanges: [ + ...defaultExchanges, + subscriptionExchange({ + forwardSubscription(operation) { + return subscriptionClient.request(operation) + }, + }), + ], + }) + + const Div = props => ( + + ) + + const u = unified() + .use(remarkParse) + .use(remarkStringify) + .use(remarkMdx) + + const ast = u.parse(recipeSrc) + + const steps = [] + let index = 0 + ast.children.forEach(node => { + if (node.type === `thematicBreak`) { + index++ + return + } + + steps[index] = steps[index] || [] + steps[index].push(node) + }) + + const asRoot = nodes => { + return { + type: `root`, + children: nodes, + } + } + + const stepsAsMDX = steps.map(nodes => { + const stepAst = asRoot(nodes) + return u.stringify(stepAst) + }) + + const toJson = value => { + const obj = {} + jsxToJson(value).forEach(([type, props = {}]) => { + if (type === `\n`) { + return + } + obj[type] = obj[type] || [] + obj[type].push(props) + }) + return obj + } + + const allCommands = steps + .map(nodes => { + const stepAst = asRoot(nodes) + let cmds = [] + visit(stepAst, `jsx`, node => { + const jsx = node.value + cmds = cmds.concat(toJson(jsx)) + }) + return cmds + }) + .reduce((acc, curr) => { + const cmdByName = {} + curr.map(v => { + Object.entries(v).forEach(([key, value]) => { + cmdByName[key] = cmdByName[key] || [] + cmdByName[key] = cmdByName[key].concat(value) + }) + }) + return [...acc, cmdByName] + }, []) + + const RecipeInterpreter = ({ commands }) => { + const [lastKeyPress, setLastKeyPress] = useState(``) + const { exit } = useApp() + const [subscriptionResponse] = useSubscription( + { + query: ` + subscription { + operation { + state + data + } + } + `, + }, + (_prev, now) => now + ) + const [_, createOperation] = useMutation(` + mutation ($commands: String!) { + createOperation(commands: $commands) + } + `) + + subscriptionClient.connectionCallback = () => { + createOperation({ commands: JSON.stringify(commands) }) + } + + const { data } = subscriptionResponse + const operation = + (data && + data.operation && + data.operation.data && + JSON.parse(data.operation.data)) || + commands + + const state = data && data.operation && data.operation.state + + useInput((_, key) => { + setLastKeyPress(key) + if (key.return && state === `SUCCESS`) { + subscriptionClient.close() + exit() + // TODO figure out why exiting ink isn't enough. + process.exit() + } + }) + + return ( + <> +
+ {process.env.DEBUG ? ( + {JSON.stringify(subscriptionResponse, null, 2)} + ) : null} +
+
+ {process.env.DEBUG ? ( + Last Key Press: {JSON.stringify(lastKeyPress, null, 2)} + ) : null} +
+
{process.env.DEBUG ? STATE: {state} : null}
+ {operation.map((command, i) => ( +
+ +
+
+ ))} + {state === `SUCCESS` ? ( +
+ + Your recipe is served! Press enter to exit. +
+ ) : null} + + ) + } + + const StateIndicator = ({ state }) => { + if (state === `complete`) { + return + } else if (state === `error`) { + return + } else { + return + } + } + + const Config = ({ commands }) => { + const cmd = commands[0] // Config should only be called once. + + const verb = cmd.state !== `complete` ? `Setting` : `Set` + return ( +
+ + + + + {verb} up plan for {cmd.name} + + +
+ ) + } + + const NPMPackage = ({ commands }) => { + const incomplete = commands.some(c => c.state !== `complete`) + const names = commands.map(c => c.name) + + if (incomplete) { + return ( +
+ Installing packages + {commands.map(cmd => ( +
+ + + + + {cmd.name} + +
+ ))} +
+ ) + } + + return ( +
+ + + + Installed {humanizeList(names)} + +
+ ) + } + + const NPMScript = ({ commands }) => { + const incomplete = commands.some(c => c.state !== `complete`) + const names = commands.map(c => c.name) + + if (incomplete) { + return ( +
+ Adding scripts + {commands.map(cmd => ( +
+ + + + + {cmd.name} + +
+ ))} +
+ ) + } + + return ( +
+ + + + Added scripts for {humanizeList(names)} + +
+ ) + } + + const GatsbyPlugin = ({ commands }) => { + const incomplete = commands.some(c => c.state !== `complete`) + const names = commands.map(c => c.name) + + if (incomplete) { + return ( +
+ Configuring plugins + {commands.map(cmd => ( +
+ + + + + {cmd.name} + +
+ ))} +
+ ) + } + + return ( +
+ + + + Configured {humanizeList(names)} + +
+ ) + } + + const ShadowFile = ({ commands }) => { + const incomplete = commands.some(c => c.state !== `complete`) + const paths = commands.map(c => c.path) + + if (incomplete) { + return ( +
+ Shadowing files + {commands.map(cmd => ( +
+ + + + + {cmd.path} + +
+ ))} +
+ ) + } + + return ( +
+ + + + Shadowed {humanizeList(paths)} + +
+ ) + } + + const File = ({ commands }) => { + const incomplete = commands.some(c => c.state !== `complete`) + const paths = commands.map(c => c.path) + + if (incomplete) { + return ( +
+ Writing files + {commands.map(cmd => ( +
+ + + + + {cmd.path} + +
+ ))} +
+ ) + } + + return ( +
+ + + + Created file {humanizeList(paths)} + +
+ ) + } + + const Step = ({ command }) => + Object.entries(command).map(([cmdName, cmds], i) => { + if (cmdName === `Config`) { + return + } else if (cmdName === `NPMPackage`) { + return + } else if (cmdName === `NPMScript`) { + return + } else if (cmdName === `GatsbyPlugin`) { + return + } else if (cmdName === `ShadowFile`) { + return + } else if (cmdName === `File`) { + return + } else { + return {cmdName} + } + }) + + const Wrapper = () => ( + + + + ) + + const Recipe = () => + + render() +} diff --git a/packages/gatsby/src/recipes/eslint.mdx b/packages/gatsby/src/recipes/eslint.mdx new file mode 100644 index 0000000000000..2eac037aa458e --- /dev/null +++ b/packages/gatsby/src/recipes/eslint.mdx @@ -0,0 +1,45 @@ +# Add a custom ESLint config + +ESLint is an open source JavaScript linting utility. Code linting is a type of +static analysis that is frequently used to find problematic patterns. There are +code linters for most programming languages, and compilers sometimes +incorporate linting into the compilation process. + +JavaScript, being a dynamic and loosely-typed language, is especially prone to +developer error. Without the benefit of a compilation process, JavaScript code +is typically executed in order to find syntax or other errors. Linting tools +like ESLint allow developers to discover problems with their JavaScript code +without executing it. + +## How to use ESLint + +Gatsby ships with a built-in ESLint setup. For most users, +our built-in ESlint setup is all you need. If you know however that you’d like +to customize your ESlint config e.g. your company has their own custom ESlint +setup, this shows how this can be done. + +You’ll replicate (mostly) the ESLint config Gatsby ships with so you can then +add additional presets, plugins, and rules. + +--- + +Installing necessary packages + + + +--- + + + +--- + +ESlint is now installed! You can edit the eslint config by opening +`.eslintrc.js` in your code editor. diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js new file mode 100644 index 0000000000000..6d832d7cddf0f --- /dev/null +++ b/packages/gatsby/src/recipes/graphql.js @@ -0,0 +1,283 @@ +const express = require(`express`) +const graphqlHTTP = require(`express-graphql`) +const { + GraphQLSchema, + GraphQLObjectType, + GraphQLString, + GraphQLList, + GraphQLEnumType, + execute, + subscribe, +} = require(`graphql`) +const { PubSub, withFilter } = require(`graphql-subscriptions`) +const { SubscriptionServer } = require(`subscriptions-transport-ws`) +const { createServer } = require(`http`) +const fs = require(`fs`) +const path = require(`path`) +const { promisify } = require(`util`) + +const fileResource = require(`./providers/fs/file`) +const gatsbyPluginResource = require(`./providers/gatsby/plugin`) +const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) +const npmPackageResource = require(`./providers/npm/package`) +const npmPackageScriptResource = require(`./providers/npm/script`) + +const SITE_ROOT = process.cwd() + +const read = promisify(fs.readFile) + +const pubsub = new PubSub() +const PORT = 4000 + +const readPackage = async () => { + const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) + return JSON.parse(contents) +} + +const emitOperation = (state = `progress`, data) => { + pubsub.publish(`operation`, { + state, + data: JSON.stringify(data), + }) +} + +const context = { root: SITE_ROOT } + +const configResource = { + create: () => {}, + read: () => {}, + update: () => {}, + destroy: () => {}, +} + +const componentResourceMapping = { + File: fileResource, + GatsbyPlugin: gatsbyPluginResource, + ShadowFile: gatsbyShadowFileResource, + Config: configResource, + NPMPackage: npmPackageResource, + NPMScript: npmPackageScriptResource, +} + +const asyncForEach = async (array, callback) => { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array) + } +} + +const applyStep = plan => async step => { + const commandsForStep = Object.keys(step).map(async key => { + const resource = componentResourceMapping[key] + if (resource && resource.config && resource.config.batch) { + await resource.create(context, step[key]) + + step[key].map((_, i) => { + step[key][i].state = `complete` + }) + emitOperation(`progress`, plan) + return + } + + // Run serially for now until we optimize the steps in an operation + await asyncForEach(step[key], async (cmd, i) => { + try { + await resource.create(context, cmd) + step[key][i].state = `complete` + emitOperation(`progress`, plan) + } catch (e) { + step[key][i].state = `error` + step[key][i].errorMessage = e.toString() + emitOperation(`progress`, plan) + } + }) + }) + + await Promise.all(commandsForStep) +} + +const applyPlan = async plan => { + await asyncForEach(plan, applyStep(plan)) + setTimeout(() => { + emitOperation(`success`, plan) + }, 1) +} + +const OperationStateEnumType = new GraphQLEnumType({ + name: `OperationStateEnum`, + values: { + RUNNING: { value: `progress` }, + SUCCESS: { value: `success` }, + ERROR: { value: `error` }, + }, +}) + +const OperationType = new GraphQLObjectType({ + name: `Operation`, + fields: { + state: { type: OperationStateEnumType }, + data: { type: GraphQLString }, + }, +}) + +const NPMPackageScriptType = new GraphQLObjectType({ + name: `NPMPackageScript`, + fields: { + name: { type: GraphQLString }, + script: { type: GraphQLString }, + }, +}) + +const NPMPackageType = new GraphQLObjectType({ + name: `NPMPackage`, + fields: { + name: { type: GraphQLString }, + version: { type: GraphQLString }, + path: { type: GraphQLString }, + scripts: { type: new GraphQLList(NPMPackageScriptType) }, + }, +}) + +const GatsbyConfigPluginType = new GraphQLObjectType({ + name: `GatsbyConfigPlugin`, + fields: { + name: { type: GraphQLString }, + version: { type: GraphQLString }, + }, +}) + +const rootQueryType = new GraphQLObjectType({ + name: `Root`, + fields: () => { + return { + npmPackage: { + type: NPMPackageType, + args: { + name: { + type: GraphQLString, + }, + }, + resolve: async (_, args) => { + // TODO: peer/dev + const { dependencies } = await readPackage() + const version = dependencies[args.name] + return { name: args.name, version } + }, + }, + allNpmPackage: { + type: new GraphQLList(NPMPackageType), + resolve: async () => { + const { dependencies } = await readPackage() + + return Object.entries(dependencies).map(([name, version]) => { + return { + name, + version, + } + }) + }, + }, + allNpmPackageScripts: { + type: new GraphQLList(NPMPackageScriptType), + resolve: async () => { + const { scripts } = await readPackage() + return Object.entries(scripts).map(([name, script]) => { + return { + name, + script, + } + }) + }, + }, + allGatsbyConfigPlugin: { + type: new GraphQLList(GatsbyConfigPluginType), + resolve: async () => { + const plugins = gatsbyPluginResource.read({ root }) + return plugins.map(async name => { + return { name } + }) + }, + }, + } + }, +}) + +const rootMutationType = new GraphQLObjectType({ + name: `Mutation`, + fields: () => { + return { + createOperation: { + type: GraphQLString, + args: { + commands: { type: GraphQLString }, + }, + resolve: (_data, args) => { + applyPlan(JSON.parse(args.commands)) + }, + }, + } + }, +}) + +const rootSubscriptionType = new GraphQLObjectType({ + name: `Subscription`, + fields: () => { + return { + operation: { + type: OperationType, + subscribe: () => pubsub.asyncIterator(`operation`), + resolve: payload => payload, + }, + npmPackageUpdated: { + type: NPMPackageType, + args: { + name: { + type: GraphQLString, + }, + }, + subscribe: withFilter( + () => pubsub.asyncIterator(`npmPackageUpdated`), + (payload, variables) => + true || payload.npmPackageUpdated.dependencies[variables.name] + ), + resolve: () => { + return { + version: `${Math.random()}`, + } + }, + }, + } + }, +}) + +const schema = new GraphQLSchema({ + query: rootQueryType, + mutation: rootMutationType, + subscription: rootSubscriptionType, +}) + +const app = express() +const server = createServer(app) + +console.log(`listening on localhost:4000`) + +app.use( + `/graphql`, + graphqlHTTP({ + schema, + graphiql: true, + }) +) + +server.listen(PORT, () => { + new SubscriptionServer( + { + execute, + subscribe, + schema, + }, + { + server, + path: `/graphql`, + } + ) +}) diff --git a/packages/gatsby/src/recipes/index.js b/packages/gatsby/src/recipes/index.js new file mode 100644 index 0000000000000..e6c5c46522394 --- /dev/null +++ b/packages/gatsby/src/recipes/index.js @@ -0,0 +1,5 @@ +const path = require(`path`) +module.exports = recipe => { + const cli = require(`import-jsx`)(require.resolve(`./cli`)) + cli(recipe) +} diff --git a/packages/gatsby/src/recipes/jest.mdx b/packages/gatsby/src/recipes/jest.mdx new file mode 100644 index 0000000000000..ba97b3fcd5ad6 --- /dev/null +++ b/packages/gatsby/src/recipes/jest.mdx @@ -0,0 +1,52 @@ +# Add Jest + +This recipe helps you setup Jest in your Gatsby site to test components and utilities + + + +--- + +Installing the `jest` package + + + +--- + +Adding some jest test files for you to play with + + + + + +--- + +Adding a `test` & `test:watch` scripts to your package.json. + +Now Try running `npm run test` — jest will run your test! + +While writing tests you can run `npm run test:watch` and tests will re-run +as you edit them. + + + + diff --git a/packages/gatsby/src/recipes/package.json b/packages/gatsby/src/recipes/package.json new file mode 100644 index 0000000000000..dbdaf7d19e3b0 --- /dev/null +++ b/packages/gatsby/src/recipes/package.json @@ -0,0 +1,45 @@ +{ + "name": "@webmesh/cli", + "version": "0.0.1", + "license": "MIT", + "private": true, + "main": "index.js", + "scripts": { + "start": "node .", + "graphql": "node graphql" + }, + "bin": { + "webmesh": "index.js" + }, + "dependencies": { + "@mdx-js/mdx": "1.5.7", + "@mdx-js/react": "1.5.7", + "@mdx-js/runtime": "^1.5.7", + "@webmesh/gatsby": "0.0.1", + "better-queue": "^3.8.10", + "execa": "^4.0.0", + "express": "^4.17.1", + "express-graphql": "^0.9.0", + "gatsby-plugin-theme-ui": "^0.3.0", + "graphql": "^14.6.0", + "graphql-subscriptions": "^1.1.0", + "humanize-list": "^1.0.1", + "import-jsx": "^3.1.0", + "ink": "^2.3.0", + "ink-spinner": "^3.0.1", + "lodash.flatten": "^4.4.0", + "lodash.groupby": "^4.6.0", + "mkdirp": "^1.0.3", + "node-fetch": "^2.6.0", + "react": "16.13.1", + "read-package-tree": "^5.3.1", + "remark-stringify": "^7.0.4", + "simplified-jsx-to-json": "^0.1.0", + "subscriptions-transport-ws": "^0.9.16", + "theme-ui": "^0.3.1", + "undefined": "^0.1.0", + "unist-util-visit": "^2.0.2", + "urql": "^1.9.5", + "ws": "^7.2.3" + } +} diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js new file mode 100644 index 0000000000000..a87b46604cac4 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -0,0 +1,35 @@ +const fs = require(`fs`) +const path = require(`path`) +const { promisify } = require(`util`) +const mkdirp = require(`mkdirp`) + +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) +const destroyFile = promisify(fs.unlink) + +const create = async ({ root }, { path: filePath, content, children }) => { + const fullPath = path.join(root, filePath) + const { dir } = path.parse(fullPath) + + content = content || children + + await mkdirp(dir) + await writeFile(fullPath, content) +} + +const read = async ({ root }, { path: filePath }) => { + const fullPath = path.join(root, filePath) + const content = await readFile(fullPath, `utf8`) + + return { content } +} + +const destroy = async ({ root }, { path: filePath }) => { + const fullPath = path.join(root, filePath) + await destroyFile(fullPath) +} + +module.exports.create = create +module.exports.update = create +module.exports.read = read +module.exports.destroy = destroy diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js new file mode 100644 index 0000000000000..0bb055f99e050 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -0,0 +1,112 @@ +const fs = require(`fs`) +const path = require(`path`) +const babel = require(`@babel/core`) + +const declare = require(`@babel/helper-plugin-utils`).declare + +const create = ({ root }, { name }) => { + const configPath = path.join(root, `gatsby-config.js`) + const configSrc = fs.readFileSync(configPath) + console.log({ configPath, configSrc }) + + const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ + pluginOrThemeName: name, + shouldAdd: true, + }) + + const { code } = babel.transform(configSrc, { + plugins: [addPlugins.plugin], + }) + + fs.writeFileSync(configPath, code) +} + +const read = ({ root }) => { + const configPath = path.join(root, `gatsby-config.js`) + const configSrc = fs.readFileSync(configPath) + + const getPlugins = new BabelPluginGetPluginsFromGatsbyConfig() + + babel.transform(configSrc, { + plugins: [getPlugins.plugin], + }) + + return getPlugins.state +} + +const destroy = ({ root }, { name }) => { + const configPath = path.join(root, `gatsby-config.js`) + const configSrc = fs.readFileSync(configPath) + + const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ + pluginOrThemeName: name, + shouldAdd: false, + }) + + const { code } = babel.transform(configSrc, { + plugins: [addPlugins.plugin], + }) + + fs.writeFileSync(configPath, code) +} + +class BabelPluginAddPluginsToGatsbyConfig { + constructor({ pluginOrThemeName, shouldAdd }) { + this.plugin = declare(api => { + api.assertVersion(7) + + const { types: t } = api + return { + visitor: { + Program({ node }) { + console.log(node.body[0].expression) + const plugins = node.body[0].expression.right.properties.find( + p => p.key.name === `plugins` + ) + if (shouldAdd) { + const exists = plugins.value.elements.some( + node => node.value === pluginOrThemeName + ) + if (!exists) { + plugins.value.elements.push(t.stringLiteral(pluginOrThemeName)) + } + } else { + plugins.value.elements = plugins.value.elements.filter( + node => node.value !== pluginOrThemeName + ) + } + }, + }, + } + }) + } +} + +class BabelPluginGetPluginsFromGatsbyConfig { + constructor() { + this.state = [] + + this.plugin = declare(api => { + api.assertVersion(7) + + return { + visitor: { + Program: ({ node }) => { + const plugins = node.body[0].expression.right.properties.find( + p => p.key.name === `plugins` + ) + plugins.value.elements.forEach(node => { + // TODO: handle { resolve: 'thing' } + this.state.push(node.value) + }) + }, + }, + } + }) + } +} + +module.exports.create = create +module.exports.update = create +module.exports.read = read +module.exports.destroy = destroy diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js new file mode 100644 index 0000000000000..6ee112ca9f89f --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js @@ -0,0 +1,49 @@ +const path = require(`path`) +const fs = require(`fs`) +const { promisify } = require(`util`) +const mkdirp = require(`mkdirp`) + +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) +const destroyFile = promisify(fs.unlink) + +const create = async ({ root }, { theme, path: filePath }) => { + const relativePathInTheme = filePath.replace(theme + `/`, ``) + const fullFilePathToShadow = path.join( + root, + `node_modules`, + theme, + relativePathInTheme + ) + + const contents = await readFile(fullFilePathToShadow, `utf8`) + + const fullPath = path.join(root, filePath) + const { dir } = path.parse(fullPath) + + await mkdirp(dir) + await writeFile(fullPath, contents) +} + +const read = async ({ root }, { theme, path: filePath }) => { + const relativePathInTheme = filePath.replace(theme + `/`, ``) + const fullFilePathToShadow = path.join( + root, + `node_modules`, + theme, + relativePathInTheme + ) + + const contents = await readFile(fullFilePathToShadow, `utf8`) + return contents +} + +const destroy = async ({ root }, { theme, path: filePath }) => { + const fullPath = path.join(root, filePath) + await destroyFile(fullPath) +} + +module.exports.create = create +module.exports.update = create +module.exports.read = read +module.exports.destroy = destroy diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js new file mode 100644 index 0000000000000..8cc8e1f0a84c1 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -0,0 +1,30 @@ +const execa = require(`execa`) + +const getPackageNames = cmds => cmds.map(n => n.name) + +const create = async ({ root }, cmds) => { + await execa(`yarn`, [`add`, `-W`, ...getPackageNames(cmds)], { cwd: root }) +} + +const read = async (_, { name }) => { + const { stdout } = await execa(`yarn`, [`why`, name], { cwd: root }) + return stdout +} + +const update = async (_, cmds) => { + await execa(`yarn`, [`upgrade`, `-W`, ...getPackageNames(cmds)], { + cwd: root, + }) +} + +const destroy = async (_, cmds) => { + await execa(`yarn`, [`remove`, `-W`, ...getPackageNames(cmds)], { cwd: root }) +} + +module.exports.create = create +module.exports.update = update +module.exports.read = read +module.exports.destroy = destroy +module.exports.config = { + batch: true, +} diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js new file mode 100644 index 0000000000000..41bf282de362f --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -0,0 +1,50 @@ +const fs = require(`fs`) +const path = require(`path`) +const { promisify } = require(`util`) + +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) + +const readPackageJson = async root => { + const fullPath = path.join(root, `package.json`) + const contents = await readFile(fullPath, `utf8`) + const obj = JSON.parse(contents) + return obj +} + +const writePackageJson = async (root, obj) => { + const fullPath = path.join(root, `package.json`) + const contents = JSON.stringify(obj, null, 2) + await writeFile(fullPath, contents) +} + +const create = async ({ root }, { name, command }) => { + const pkg = await readPackageJson(root) + pkg.scripts = pkg.scripts || {} + pkg.scripts[name] = command + await writePackageJson(root, pkg) +} + +const read = async ({ root }, { name }) => { + const pkg = await readPackageJson(root) + + return { + name, + command: pkg.scripts && pkg.scripts[name], + } +} + +const destroy = async ({ root }, { name }) => { + const pkg = await readPackageJson(root) + pkg.scripts = pkg.scripts || {} + delete pkg.scripts[name] + await writePackageJson(root, pkg) +} + +module.exports.create = create +module.exports.update = create +module.exports.read = read +module.exports.destroy = destroy +module.exports.config = { + serial: true, +} diff --git a/packages/gatsby/src/recipes/theme-ui.mdx b/packages/gatsby/src/recipes/theme-ui.mdx new file mode 100644 index 0000000000000..8489fb1f50b1f --- /dev/null +++ b/packages/gatsby/src/recipes/theme-ui.mdx @@ -0,0 +1,37 @@ +# Add Theme UI + +This recipe helps you start developing with the [Theme UI](https://theme-ui.com) styling library. + + + +--- + +Install packages. + + + + +--- + +Add the plugin `gatsby-plugin-theme-ui` to your `gatsby-config.js` and +shadowing the Theme UI config file into your source. + + + +--- + + + +--- + + + +--- + +You're ready to get started! diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md new file mode 100644 index 0000000000000..592620d4dd50f --- /dev/null +++ b/packages/gatsby/src/recipes/todo.md @@ -0,0 +1,28 @@ +Make root configurable/dynamic +Make recipe configurable (theme-ui/eslint/jest) +Exit upon completion + +Move into gatsby repo +Run as a command +Boot up server as a process +Then run the CLI +Clean up server after + +## Near future + +- Make it support relative paths for custom recipes (./src/recipes/foo.mdx) +- Document the supported components and trivial guide on recipe authoring (help) +- Theme UI preset selection (runs dependent install and file write) +- Move to more random port + +## Friday (alpha) + +- Handle `dev` in NPMPackage +- Step by step design +- Select input supported recipes +- Make port selection dynamic + +## Near-ish future + +- Make a proper "Config" provider to add recipes dir, store data, etc. +- Client sends the MDX file to the server (maybe?) From b0698d96c2e240cf1c94d60def12b6143973345b Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 31 Mar 2020 19:58:00 -0700 Subject: [PATCH 002/128] Cleanups --- packages/gatsby/src/commands/recipes.ts | 7 ------- packages/gatsby/src/recipes/cli.js | 1 - 2 files changed, 8 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index d5c8526f40aca..30bd1e49cb099 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -3,14 +3,9 @@ import execa from "execa" import path from "path" module.exports = async (program: IProgram): Promise => { - // TODO add telemetry - // console.log(program) const recipe = program._[1] - console.log({recipe}) telemetry.trackCli(`RECIPE_RUN`, {recipe}) - console.log(require.resolve(`../recipes/graphql`)) - // Start GraphQL serve let subprocess // try { @@ -22,10 +17,8 @@ module.exports = async (program: IProgram): Promise => { // const subprocess = execa('echo', ['unicorns']); let started = false subprocess.stdout.on('data', (data) => { - console.log(data.toString()); if (!started) { const runRecipe = require(`../recipes/index`) - console.log({runRecipe}) runRecipe(recipe) started = true } diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 9b1fa70419097..f7df315ef53d3 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -29,7 +29,6 @@ module.exports = recipe => { if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` } - console.log({ recipePath }) const recipeSrc = fs.readFileSync(recipePath, `utf8`) const GRAPHQL_ENDPOINT = `http://localhost:4000/graphql` From 36b5421d45e3de39a9f2f668aec2a207042ce724 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 31 Mar 2020 20:16:49 -0700 Subject: [PATCH 003/128] more cleanup --- packages/gatsby/src/recipes/providers/gatsby/plugin.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 0bb055f99e050..315357c631c96 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -7,7 +7,6 @@ const declare = require(`@babel/helper-plugin-utils`).declare const create = ({ root }, { name }) => { const configPath = path.join(root, `gatsby-config.js`) const configSrc = fs.readFileSync(configPath) - console.log({ configPath, configSrc }) const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ pluginOrThemeName: name, From 461c7eed27cddadbd3d15d0ddadaba895605f6a9 Mon Sep 17 00:00:00 2001 From: John Otander Date: Wed, 1 Apr 2020 10:11:24 -0700 Subject: [PATCH 004/128] Add missing remark-stringify dep (#22721) --- packages/gatsby/package.json | 1 + yarn.lock | 302 ++++++++++++++++++++++++++++++++--- 2 files changed, 285 insertions(+), 18 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index ac46d8c30518d..6cd7e4fb7fca8 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -129,6 +129,7 @@ "read-package-tree": "^5.3.1", "redux": "^4.0.5", "redux-thunk": "^2.3.0", + "remark-stringify": "^8.0.0", "semver": "^5.7.1", "shallow-compare": "^1.2.2", "sift": "^5.1.0", diff --git a/yarn.lock b/yarn.lock index 0ca5a9733f882..adf32c1fee9e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1107,6 +1107,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-destructuring@^7.5.0", "@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" + integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-destructuring@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" @@ -1114,13 +1121,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" - integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" @@ -3518,16 +3518,50 @@ unist-builder "2.0.3" unist-util-visit "2.0.2" +"@mdx-js/mdx@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.8.tgz#40740eaf0b0007b461cee8df13a7ae5a1af8064a" + integrity sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA== + dependencies: + "@babel/core" "7.8.4" + "@babel/plugin-syntax-jsx" "7.8.3" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "^1.5.8" + babel-plugin-apply-mdx-type-prop "^1.5.8" + babel-plugin-extract-import-names "^1.5.8" + camelcase-css "2.0.1" + detab "2.0.3" + hast-util-raw "5.0.2" + lodash.uniq "4.5.0" + mdast-util-to-hast "7.0.0" + remark-mdx "^1.5.8" + remark-parse "7.0.2" + remark-squeeze-paragraphs "3.0.4" + style-to-object "0.3.0" + unified "8.4.2" + unist-builder "2.0.3" + unist-util-visit "2.0.2" + "@mdx-js/react@^1.5.7": version "1.5.7" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.7.tgz#dd7e08c9cdd3c3af62c9594c2c9003a3d05e34fd" integrity sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw== +"@mdx-js/react@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.8.tgz#fc38fe0eb278ae24666b2df3c751e726e33f5fac" + integrity sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg== + "@mdx-js/util@^1.5.7": version "1.5.7" resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.7.tgz#335358feb2d511bfdb3aa46e31752a10aa51270a" integrity sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig== +"@mdx-js/util@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.8.tgz#cbadda0378af899c17ce1aa69c677015cab28448" + integrity sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ== + "@mikaelkristiansson/domready@^1.0.10": version "1.0.10" resolved "https://registry.yarnpkg.com/@mikaelkristiansson/domready/-/domready-1.0.10.tgz#f6d69866c0857664e70690d7a0bfedb72143adb5" @@ -4274,6 +4308,13 @@ semver "^6.3.0" tsutils "^3.17.1" +"@urql/core@^1.10.5": + version "1.10.7" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.10.7.tgz#4632088a9abd5884e08726242261ea39d3cdda40" + integrity sha512-KOeX6TpU0ui7WDaP3ZgXJnRRPbjPz31jECYixgc+vxo7rQVVFkRkB7qzfusYzeCYAruMz7vzoOPT22UTxKcU/g== + dependencies: + wonka "^4.0.9" + "@verdaccio/commons-api@^9.3.2": version "9.3.2" resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-9.3.2.tgz#7ce1e2c694fb6ca4f5a7cbc2b4445f3019d7e950" @@ -4598,6 +4639,11 @@ acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^6.0.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" @@ -5482,6 +5528,14 @@ babel-plugin-apply-mdx-type-prop@^1.5.7: "@babel/helper-plugin-utils" "7.8.3" "@mdx-js/util" "^1.5.7" +babel-plugin-apply-mdx-type-prop@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz#f5ff6d9d7a7fcde0e5f5bd02d3d3cd10e5cca5bf" + integrity sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA== + dependencies: + "@babel/helper-plugin-utils" "7.8.3" + "@mdx-js/util" "^1.5.8" + babel-plugin-dev-expression@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz#c18de18a06150f9480edd151acbb01d2e65e999b" @@ -5517,6 +5571,13 @@ babel-plugin-extract-import-names@^1.5.7: dependencies: "@babel/helper-plugin-utils" "7.8.3" +babel-plugin-extract-import-names@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz#418057261346451d689dff5036168567036b8cf6" + integrity sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g== + dependencies: + "@babel/helper-plugin-utils" "7.8.3" + babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -5725,7 +5786,7 @@ babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" -backo2@1.0.2: +backo2@1.0.2, backo2@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -9938,6 +9999,21 @@ execa@^3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + executable@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -10453,6 +10529,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" @@ -11665,6 +11750,13 @@ graphql-request@^1.5.0, graphql-request@^1.8.2: dependencies: cross-fetch "2.2.2" +graphql-subscriptions@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" + integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== + dependencies: + iterall "^1.2.1" + graphql-tools-fork@^8.9.6: version "8.9.6" resolved "https://registry.yarnpkg.com/graphql-tools-fork/-/graphql-tools-fork-8.9.6.tgz#7d84d07c7e6600c363854132bcca395e86455d40" @@ -12006,6 +12098,20 @@ hast-util-raw@5.0.1: xtend "^4.0.1" zwitch "^1.0.0" +hast-util-raw@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67" + integrity sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g== + dependencies: + hast-util-from-parse5 "^5.0.0" + hast-util-to-parse5 "^5.0.0" + html-void-elements "^1.0.0" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + hast-util-raw@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" @@ -12247,6 +12353,11 @@ html-minifier@^4.0.0: relateurl "^0.2.7" uglify-js "^3.5.1" +html-tag-names@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9" + integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A== + html-void-elements@^1.0.0, html-void-elements@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.3.tgz#956707dbecd10cf658c92c5d27fee763aa6aa982" @@ -12447,6 +12558,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +humanize-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/humanize-list/-/humanize-list-1.0.1.tgz#e7e719c60a5d5848e8e0a5ed5f0a885496c239fd" + integrity sha1-5+cZxgpdWEjo4KXtXwqIVJbCOf0= + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -12623,6 +12739,21 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-jsx@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-jsx/-/import-jsx-4.0.0.tgz#2f31fd8e884e14f136751448841ffd2d3144dce1" + integrity sha512-CnjJ2BZFJzbFDmYG5S47xPQjMlSbZLyLJuG4znzL4TdPtJBxHtFP1xVmR+EYX4synFSldiY3B6m00XkPM3zVnA== + dependencies: + "@babel/core" "^7.5.5" + "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-react-jsx" "^7.3.0" + caller-path "^2.0.0" + find-cache-dir "^3.2.0" + make-dir "^3.0.2" + resolve-from "^3.0.0" + rimraf "^3.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -13645,15 +13776,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -iterall@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" - -iterall@^1.3.0: +iterall@^1.2.1, iterall@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== +iterall@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -15636,6 +15767,13 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-dir@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + dependencies: + semver "^6.0.0" + make-fetch-happen@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" @@ -15734,6 +15872,13 @@ markdown-table@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + markdown-toc@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/markdown-toc/-/markdown-toc-1.2.0.tgz#44a15606844490314afc0444483f9e7b1122c339" @@ -15821,6 +15966,13 @@ mdast-util-compact@^1.0.0: dependencies: unist-util-visit "^1.1.0" +mdast-util-compact@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" + integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== + dependencies: + unist-util-visit "^2.0.0" + mdast-util-definitions@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz#2b54ad4eecaff9d9fcb6bf6f9f6b68b232d77ca7" @@ -17645,6 +17797,18 @@ parse-entities@^1.0.2, parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + 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" + parse-filepath@^1.0.1, parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -18029,7 +18193,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -19277,6 +19441,15 @@ read-package-tree@^5.1.6: read-package-json "^2.0.0" readdir-scoped-modules "^1.0.0" +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -19742,6 +19915,20 @@ remark-mdx@^1.5.7: remark-parse "7.0.2" unified "8.4.2" +remark-mdx@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.8.tgz#81fd9085e56ea534b977d08d6f170899138b3f38" + integrity sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ== + dependencies: + "@babel/core" "7.8.4" + "@babel/helper-plugin-utils" "7.8.3" + "@babel/plugin-proposal-object-rest-spread" "7.8.3" + "@babel/plugin-syntax-jsx" "7.8.3" + "@mdx-js/util" "^1.5.8" + is-alphabetical "1.0.4" + remark-parse "7.0.2" + unified "8.4.2" + remark-parse@7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" @@ -19905,6 +20092,26 @@ remark-stringify@^5.0.0: unherit "^1.0.4" xtend "^4.0.1" +remark-stringify@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.0.0.tgz#33423ab8bf3076fb197f4cf582aaaf866b531625" + integrity sha512-cABVYVloFH+2ZI5bdqzoOmemcz/ZuhQSH6W6ZNYnLojAUUn3xtX7u+6BpnYp35qHoGr2NFBsERV14t4vCIeW8w== + dependencies: + 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 "^2.0.0" + mdast-util-compact "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^3.0.0" + unherit "^1.0.4" + xtend "^4.0.1" + remark-toc@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-5.0.0.tgz#f1e13ed11062ad4d102b02e70168bd85015bf129" @@ -19976,7 +20183,7 @@ repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" -repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -21030,6 +21237,18 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simplified-jsx-to-json@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simplified-jsx-to-json/-/simplified-jsx-to-json-0.1.0.tgz#bb53de1c014a04a039d9e1f46e1fa0b5d77e8627" + integrity sha512-3bZyn0alS292ltfVqnM4pqaYRHVw6sTeVA9Zzs5LaBGVOfNSEatYo8R+yKO3B6/Fq7SV8Th4wXjoFZ9/TYDwvA== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + html-tag-names "^1.1.5" + is-string "^1.0.5" + style-to-object "^0.3.0" + svg-tag-names "^2.0.1" + sisteransi@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" @@ -21778,6 +21997,17 @@ stringify-entities@^2.0.0: is-decimal "^1.0.2" is-hexadecimal "^1.0.0" +stringify-entities@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.0.tgz#455abe501f8b7859ba5726a25a8872333c65b0a7" + integrity sha512-h7NJJIssprqlyjHT2eQt2W1F+MCcNmwPGlKb0bWEdET/3N44QN3QbUF/ueKCgAssyKRZ3Br9rQ7FcXjHr0qLHw== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.2" + is-hexadecimal "^1.0.0" + stringify-object@^3.2.2, stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -22000,6 +22230,17 @@ subfont@^4.2.0: urltools "^0.4.1" yargs "^14.2.0" +subscriptions-transport-ws@^0.9.16: + version "0.9.16" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" + integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + sudo-prompt@^8.2.0: version "8.2.5" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" @@ -22042,6 +22283,11 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" +svg-tag-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-2.0.1.tgz#acf5655faaa2e4b173007599226b906be1b38a29" + integrity sha512-BEZ508oR+X/b5sh7bT0RqDJ7GhTpezjj3P1D4kugrOaPs6HijviWksoQ63PS81vZn0QCjZmVKjHDBniTo+Domg== + svgo@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -22121,7 +22367,7 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" -symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -23168,7 +23414,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.3" unist-util-is "^4.0.0" -unist-util-visit@2.0.2: +unist-util-visit@2.0.2, unist-util-visit@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7" integrity sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ== @@ -23376,6 +23622,14 @@ urltools@^0.4.1: underscore "^1.8.3" urijs "^1.18.2" +urql@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/urql/-/urql-1.9.5.tgz#6458738c029c4ed3692cb3ac9c1ba4d4260e37b9" + integrity sha512-CzkOSAaS5KuP+Sx2rPLOrfMiziGhKwj9syaoG6/fqoCtUeAZaXirKYKSJPUu5u9WDvjJzcTqtpICaCw++cHZsA== + dependencies: + "@urql/core" "^1.10.5" + wonka "^4.0.9" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -23395,6 +23649,13 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -24108,6 +24369,11 @@ wmf@~1.0.1: resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.1.tgz#f8690f185651bf88d39f0a21ae3e51bb1ec9fae9" integrity sha512-Mgopbef6qEsZvGss8ke/hMLg2XCCkt6emB/bZlCez9Zve9hrOj0lsrh0ncrN6Tnv6h/UCNn5nOd1UjjssezrtA== +wonka@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.9.tgz#b21d93621e1d5f3b45ca96d99d03711c7c1f7c55" + integrity sha512-he7Nn1254ToUN03zLbJok6QxKdRJd46/QHm8nUcJNViXQnCutCuUgAbZvzoxrX+VXzGb4sCFolC4XhkHsmvdaA== + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -24373,7 +24639,7 @@ ws@^7.0.0, ws@^7.1.2: dependencies: async-limiter "^1.0.0" -ws@^7.2.1: +ws@^7.2.1, ws@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== From 50f4e0a6cd21e809d328617cdada62831e653d50 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 14:41:02 -0700 Subject: [PATCH 005/128] WIP --- .../gatsby/fixtures/sample-gatsby-config.js | 70 +++++++++++++++++++ .../src/recipes/providers/gatsby/plugin.js | 1 - .../recipes/providers/gatsby/plugin.test.js | 11 +++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/plugin.test.js diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js new file mode 100644 index 0000000000000..403a05f490569 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js @@ -0,0 +1,70 @@ +const redish = `#c5484d` + +module.exports = { + siteMetadata: { + title: "Bricolage", + author: "Kyle Mathews", + homeCity: "San Francisco", + }, + plugins: [ + { + resolve: `gatsby-source-filesystem`, + options: { + path: `${__dirname}/src/pages`, + name: "pages", + }, + }, + `gatsby-transformer-sharp`, + `gatsby-plugin-emotion`, + { + resolve: `gatsby-plugin-typography`, + options: { + pathToConfigModule: `src/utils/typography`, + }, + }, + { + resolve: `gatsby-transformer-remark`, + options: { + plugins: [ + { + resolve: `gatsby-remark-images`, + options: { + maxWidth: 590, + }, + }, + { + resolve: `gatsby-remark-responsive-iframe`, + options: { + wrapperStyle: `margin-bottom: 1.0725rem`, + }, + }, + "gatsby-remark-prismjs", + "gatsby-remark-copy-linked-files", + "gatsby-remark-smartypants", + ], + }, + }, + `gatsby-plugin-sharp`, + { + resolve: `gatsby-plugin-google-analytics`, + options: { + trackingId: `UA-774017-3`, + }, + }, + { + resolve: `gatsby-plugin-manifest`, + options: { + name: "Bricolage", + short_name: "Bricolage", + icon: "static/logo.png", + start_url: "/", + background_color: redish, + theme_color: redish, + display: "minimal-ui", + }, + }, + `gatsby-plugin-offline`, + // `gatsby-plugin-preact`, + `gatsby-plugin-react-helmet`, + ], +} diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 315357c631c96..aab857c948fdd 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -58,7 +58,6 @@ class BabelPluginAddPluginsToGatsbyConfig { return { visitor: { Program({ node }) { - console.log(node.body[0].expression) const plugins = node.body[0].expression.right.properties.find( p => p.key.name === `plugins` ) diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js new file mode 100644 index 0000000000000..095febe735989 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -0,0 +1,11 @@ +const plugin = require("./plugin") +const fs = require(`fs`) +const path = require(`path`) + +test("babel plugin to get list of plugins and their options!", () => { + const configSrc = fs.readFileSync( + path.join(__dirname, `./fixtures/sample-gatsby-config.js`), + `utf-8` + ) + console.log({ configSrc }) +}) From 716600c8a5a4282a21f9bfc5879f62ce8274c357 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 14:41:31 -0700 Subject: [PATCH 006/128] WIP --- .../gatsby/fixtures/sample-gatsby-config.js | 24 +++++++++---------- .../recipes/providers/gatsby/plugin.test.js | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js index 403a05f490569..a66d8a8311e62 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js @@ -2,16 +2,16 @@ const redish = `#c5484d` module.exports = { siteMetadata: { - title: "Bricolage", - author: "Kyle Mathews", - homeCity: "San Francisco", + title: `Bricolage`, + author: `Kyle Mathews`, + homeCity: `San Francisco`, }, plugins: [ { resolve: `gatsby-source-filesystem`, options: { path: `${__dirname}/src/pages`, - name: "pages", + name: `pages`, }, }, `gatsby-transformer-sharp`, @@ -38,9 +38,9 @@ module.exports = { wrapperStyle: `margin-bottom: 1.0725rem`, }, }, - "gatsby-remark-prismjs", - "gatsby-remark-copy-linked-files", - "gatsby-remark-smartypants", + `gatsby-remark-prismjs`, + `gatsby-remark-copy-linked-files`, + `gatsby-remark-smartypants`, ], }, }, @@ -54,13 +54,13 @@ module.exports = { { resolve: `gatsby-plugin-manifest`, options: { - name: "Bricolage", - short_name: "Bricolage", - icon: "static/logo.png", - start_url: "/", + name: `Bricolage`, + short_name: `Bricolage`, + icon: `static/logo.png`, + start_url: `/`, background_color: redish, theme_color: redish, - display: "minimal-ui", + display: `minimal-ui`, }, }, `gatsby-plugin-offline`, diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 095febe735989..9639fb56392d5 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -1,8 +1,8 @@ -const plugin = require("./plugin") +// const plugin = require(`./plugin`) const fs = require(`fs`) const path = require(`path`) -test("babel plugin to get list of plugins and their options!", () => { +test(`babel plugin to get list of plugins and their options!`, () => { const configSrc = fs.readFileSync( path.join(__dirname, `./fixtures/sample-gatsby-config.js`), `utf-8` From 1fc328ee0275dee8ee223904961ef88f965c7d56 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 15:16:34 -0700 Subject: [PATCH 007/128] update TODOs --- packages/gatsby/src/recipes/todo.md | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 592620d4dd50f..0821bbbd09ac1 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -1,28 +1,28 @@ -Make root configurable/dynamic -Make recipe configurable (theme-ui/eslint/jest) -Exit upon completion +- [x] Make root configurable/dynamic +- [x] Make recipe configurable (theme-ui/eslint/jest) +- [x] Exit upon completion -Move into gatsby repo -Run as a command -Boot up server as a process -Then run the CLI -Clean up server after +- [x] Move into gatsby repo +- [x] Run as a command +- [x] Boot up server as a process +- [x] Then run the CLI +- [ ] Clean up server after ## Near future -- Make it support relative paths for custom recipes (./src/recipes/foo.mdx) -- Document the supported components and trivial guide on recipe authoring (help) -- Theme UI preset selection (runs dependent install and file write) -- Move to more random port +- [ ] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) +- [ ] Document the supported components and trivial guide on recipe authoring (help) +- [ ] Theme UI preset selection (runs dependent install and file write) +- [ ] Move to more random port ## Friday (alpha) -- Handle `dev` in NPMPackage -- Step by step design -- Select input supported recipes -- Make port selection dynamic +- [ ] Handle `dev` in NPMPackage +- [ ] Step by step design +- [ ] Select input supported recipes +- [ ] Make port selection dynamic ## Near-ish future -- Make a proper "Config" provider to add recipes dir, store data, etc. -- Client sends the MDX file to the server (maybe?) +- [ ] Make a proper "Config" provider to add recipes dir, store data, etc. +- [ ] Client sends the MDX file to the server (maybe?) From 27ac5e24d97ce5f4d722cffb439edfdb614106ae Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 15:28:49 -0700 Subject: [PATCH 008/128] Prettier + enable Ink's experimental mode --- packages/gatsby/src/commands/recipes.ts | 29 +++++++++++++------------ packages/gatsby/src/recipes/cli.js | 3 ++- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 30bd1e49cb099..910582f60cc1e 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -4,29 +4,30 @@ import path from "path" module.exports = async (program: IProgram): Promise => { const recipe = program._[1] - telemetry.trackCli(`RECIPE_RUN`, {recipe}) + telemetry.trackCli(`RECIPE_RUN`, { recipe }) // Start GraphQL serve let subprocess - // try { - subprocess = execa(`node`, [`node_modules/gatsby/dist/recipes/graphql.js`], {cwd: program.directory, all: true}) - // subprocess = execa(`echo`, [`world`]) - // } catch(error) { - // console.log(error) - // } - // const subprocess = execa('echo', ['unicorns']); + subprocess = execa(`node`, [`node_modules/gatsby/dist/recipes/graphql.js`], { + cwd: program.directory, + all: true, + }) + process.on("exit", () => + subprocess.kill("SIGTERM", { + forceKillAfterTimeout: 2000, + }) + ) let started = false - subprocess.stdout.on('data', (data) => { + subprocess.stdout.on("data", data => { if (!started) { const runRecipe = require(`../recipes/index`) runRecipe(recipe) started = true } - }); - subprocess.stderr.on('data', (data) => { - console.log(`Received err chunk: ${data}`); - }); + }) + subprocess.stderr.on("data", data => { + console.log(`Received err chunk: ${data}`) + }) // Run command - } diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index f7df315ef53d3..bf69e8d18b2a7 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -416,5 +416,6 @@ module.exports = recipe => { const Recipe = () => - render() + // Enable experimental mode for more efficient reconciler and renderer + render(, { experimental: true }) } From 92b7c04a1f5460cdcb27f3476bea64b465c5ebb0 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 15:30:55 -0700 Subject: [PATCH 009/128] Don't need this anymore --- packages/gatsby/src/recipes/package.json | 45 ------------------------ 1 file changed, 45 deletions(-) delete mode 100644 packages/gatsby/src/recipes/package.json diff --git a/packages/gatsby/src/recipes/package.json b/packages/gatsby/src/recipes/package.json deleted file mode 100644 index dbdaf7d19e3b0..0000000000000 --- a/packages/gatsby/src/recipes/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@webmesh/cli", - "version": "0.0.1", - "license": "MIT", - "private": true, - "main": "index.js", - "scripts": { - "start": "node .", - "graphql": "node graphql" - }, - "bin": { - "webmesh": "index.js" - }, - "dependencies": { - "@mdx-js/mdx": "1.5.7", - "@mdx-js/react": "1.5.7", - "@mdx-js/runtime": "^1.5.7", - "@webmesh/gatsby": "0.0.1", - "better-queue": "^3.8.10", - "execa": "^4.0.0", - "express": "^4.17.1", - "express-graphql": "^0.9.0", - "gatsby-plugin-theme-ui": "^0.3.0", - "graphql": "^14.6.0", - "graphql-subscriptions": "^1.1.0", - "humanize-list": "^1.0.1", - "import-jsx": "^3.1.0", - "ink": "^2.3.0", - "ink-spinner": "^3.0.1", - "lodash.flatten": "^4.4.0", - "lodash.groupby": "^4.6.0", - "mkdirp": "^1.0.3", - "node-fetch": "^2.6.0", - "react": "16.13.1", - "read-package-tree": "^5.3.1", - "remark-stringify": "^7.0.4", - "simplified-jsx-to-json": "^0.1.0", - "subscriptions-transport-ws": "^0.9.16", - "theme-ui": "^0.3.1", - "undefined": "^0.1.0", - "unist-util-visit": "^2.0.2", - "urql": "^1.9.5", - "ws": "^7.2.3" - } -} From 353ae8ff48e983206be48fedfa9cb44247eecb0a Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 15:46:09 -0700 Subject: [PATCH 010/128] Support running local recipes e.g. gatsby recipes ./text.mdx --- packages/gatsby/src/commands/recipes.ts | 2 +- packages/gatsby/src/recipes/cli.js | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 910582f60cc1e..a83894b9468f3 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -21,7 +21,7 @@ module.exports = async (program: IProgram): Promise => { subprocess.stdout.on("data", data => { if (!started) { const runRecipe = require(`../recipes/index`) - runRecipe(recipe) + runRecipe({recipe, projectRoot: program.directory}) started = true } }) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index bf69e8d18b2a7..27f9cd479da2a 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -24,8 +24,21 @@ const { SubscriptionClient } = require(`subscriptions-transport-ws`) const fetch = require(`node-fetch`) const ws = require(`ws`) -module.exports = recipe => { - let recipePath = path.join(__dirname, recipe) +const isRelative = path => { + if (path.slice(0, 1) == `.`) { + return true + } + + return false +} + +module.exports = ({ recipe, projectRoot }) => { + let recipePath + if (isRelative(recipe)) { + recipePath = path.join(projectRoot, recipe) + } else { + let recipePath = path.join(__dirname, recipe) + } if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` } From 3d491409310f32bc2deb83944803643674dc5e2f Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 15:46:33 -0700 Subject: [PATCH 011/128] prettier again --- packages/gatsby/src/commands/recipes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index a83894b9468f3..120fb4b0a2aba 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -21,7 +21,7 @@ module.exports = async (program: IProgram): Promise => { subprocess.stdout.on("data", data => { if (!started) { const runRecipe = require(`../recipes/index`) - runRecipe({recipe, projectRoot: program.directory}) + runRecipe({ recipe, projectRoot: program.directory }) started = true } }) From faa261ffb72dda09a4402162166bd7913209b912 Mon Sep 17 00:00:00 2001 From: John Otander Date: Wed, 1 Apr 2020 16:30:50 -0700 Subject: [PATCH 012/128] Make config slightly more robust (#22743) --- ...mple-gatsby-config.js => gatsby-config.js} | 0 .../src/recipes/providers/gatsby/plugin.js | 62 +++++++++++++++---- .../recipes/providers/gatsby/plugin.test.js | 15 +++-- 3 files changed, 58 insertions(+), 19 deletions(-) rename packages/gatsby/src/recipes/providers/gatsby/fixtures/{sample-gatsby-config.js => gatsby-config.js} (100%) diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js similarity index 100% rename from packages/gatsby/src/recipes/providers/gatsby/fixtures/sample-gatsby-config.js rename to packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index aab857c948fdd..5f7f6f5527a41 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -4,19 +4,39 @@ const babel = require(`@babel/core`) const declare = require(`@babel/helper-plugin-utils`).declare -const create = ({ root }, { name }) => { - const configPath = path.join(root, `gatsby-config.js`) - const configSrc = fs.readFileSync(configPath) +const isDefaultExport = node => { + if (!node || node.type !== `MemberExpression`) { + return false + } + + const { object, property } = node + + if (object.type !== `Identifier` || object.name !== `module`) return false + if (property.type !== `Identifier` || property.name !== `exports`) + return false + + return true +} +const addPluginToConfig = (src, pluginName) => { const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ - pluginOrThemeName: name, + pluginOrThemeName: pluginName, shouldAdd: true, }) - const { code } = babel.transform(configSrc, { + const { code } = babel.transform(src, { plugins: [addPlugins.plugin], }) + return code +} + +const create = ({ root }, { name }) => { + const configPath = path.join(root, `gatsby-config.js`) + const configSrc = fs.readFileSync(configPath) + + const code = addPluginToConfig(configSrc, name) + fs.writeFileSync(configPath, code) } @@ -57,10 +77,16 @@ class BabelPluginAddPluginsToGatsbyConfig { const { types: t } = api return { visitor: { - Program({ node }) { - const plugins = node.body[0].expression.right.properties.find( - p => p.key.name === `plugins` - ) + ExpressionStatement(path) { + const { node } = path + const { left, right } = node.expression + + if (!isDefaultExport(left)) { + return + } + + const plugins = right.properties.find(p => p.key.name === `plugins`) + if (shouldAdd) { const exists = plugins.value.elements.some( node => node.value === pluginOrThemeName @@ -73,6 +99,8 @@ class BabelPluginAddPluginsToGatsbyConfig { node => node.value !== pluginOrThemeName ) } + + path.stop() }, }, } @@ -89,10 +117,16 @@ class BabelPluginGetPluginsFromGatsbyConfig { return { visitor: { - Program: ({ node }) => { - const plugins = node.body[0].expression.right.properties.find( - p => p.key.name === `plugins` - ) + ExpressionStatement: path => { + const { node } = path + const { left, right } = node.expression + + if (!isDefaultExport(left)) { + return + } + + const plugins = right.properties.find(p => p.key.name === `plugins`) + plugins.value.elements.forEach(node => { // TODO: handle { resolve: 'thing' } this.state.push(node.value) @@ -104,6 +138,8 @@ class BabelPluginGetPluginsFromGatsbyConfig { } } +module.exports.addPluginToConfig = addPluginToConfig + module.exports.create = create module.exports.update = create module.exports.read = read diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 9639fb56392d5..dab0f152f3548 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -1,11 +1,14 @@ -// const plugin = require(`./plugin`) const fs = require(`fs`) const path = require(`path`) +const { addPluginToConfig } = require(`./plugin`) + +const CONFIG_PATH = path.join(__dirname, `./fixtures/gatsby-config.js`) + test(`babel plugin to get list of plugins and their options!`, () => { - const configSrc = fs.readFileSync( - path.join(__dirname, `./fixtures/sample-gatsby-config.js`), - `utf-8` - ) - console.log({ configSrc }) + const src = fs.readFileSync(CONFIG_PATH, `utf8`) + + const result = addPluginToConfig(src, `gatsby-plugin-foo`) + + expect(result).toMatch(`gatsby-plugin-foo`) }) From 904e47d6d08a6a0d4af771acda816b14ae33db9c Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 17:29:31 -0700 Subject: [PATCH 013/128] Add support for devDependencies in NPMPackage resource MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also when DEBUG=true – log the recipes server output to recipe-server.log --- packages/gatsby/package.json | 2 +- packages/gatsby/src/commands/recipes.ts | 16 ++++-- packages/gatsby/src/recipes/cli.js | 2 +- packages/gatsby/src/recipes/graphql.js | 1 + .../src/recipes/providers/npm/package.js | 49 ++++++++++++++++--- packages/gatsby/src/recipes/todo.md | 4 +- 6 files changed, 59 insertions(+), 15 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 6cd7e4fb7fca8..50385c9a1c0ff 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -225,7 +225,7 @@ "prebuild": "rimraf dist && rimraf cache-dir/commonjs", "postinstall": "node scripts/postinstall.js", "prepare": "cross-env NODE_ENV=production npm run build", - "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src -- --watch", + "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:recipes && npm run build:src -- --watch", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 120fb4b0a2aba..51a14e1401d7e 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -1,6 +1,7 @@ import telemetry from "gatsby-telemetry" import execa from "execa" import path from "path" +import fs from "fs" module.exports = async (program: IProgram): Promise => { const recipe = program._[1] @@ -8,7 +9,8 @@ module.exports = async (program: IProgram): Promise => { // Start GraphQL serve let subprocess - subprocess = execa(`node`, [`node_modules/gatsby/dist/recipes/graphql.js`], { + const scriptPath = path.join(program.directory, `node_modules/gatsby/dist/recipes/graphql.js`) + subprocess = execa(`node`, [scriptPath], { cwd: program.directory, all: true, }) @@ -17,6 +19,15 @@ module.exports = async (program: IProgram): Promise => { forceKillAfterTimeout: 2000, }) ) + // Log server output to a file. + if (process.env.DEBUG) { + const logFile = path.join(program.directory, './recipe-server.log') + fs.writeFileSync(logFile, `\n-----\n${new Date().toJSON()}\n`) + const writeStream = fs.createWriteStream(logFile, {flags:'a'}); + subprocess.stdout.pipe(writeStream) + // subprocess.stderr.pipe(writeStream) + } + let started = false subprocess.stdout.on("data", data => { if (!started) { @@ -25,9 +36,6 @@ module.exports = async (program: IProgram): Promise => { started = true } }) - subprocess.stderr.on("data", data => { - console.log(`Received err chunk: ${data}`) - }) // Run command } diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 27f9cd479da2a..b5320b7da2960 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -37,7 +37,7 @@ module.exports = ({ recipe, projectRoot }) => { if (isRelative(recipe)) { recipePath = path.join(projectRoot, recipe) } else { - let recipePath = path.join(__dirname, recipe) + recipePath = path.join(__dirname, recipe) } if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 6d832d7cddf0f..e345790dbf3f5 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -69,6 +69,7 @@ const applyStep = plan => async step => { const commandsForStep = Object.keys(step).map(async key => { const resource = componentResourceMapping[key] if (resource && resource.config && resource.config.batch) { + console.log(`resource.create`, { context, step: step[key] }) await resource.create(context, step[key]) step[key].map((_, i) => { diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 8cc8e1f0a84c1..78f10986a456d 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -1,9 +1,42 @@ const execa = require(`execa`) +const _ = require(`lodash`) -const getPackageNames = cmds => cmds.map(n => n.name) +const getPackageNames = packages => packages.map(n => n.name) +const asyncForEach = async (array, callback) => { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array) + } +} + +const create = async ({ root }, packages) => { + const types = _.groupBy(packages, c => c.dependencyType) + + // Run install for each dependency type + await asyncForEach(Object.keys(types), async type => { + let typeFlag = `` + if (type === `dev`) { + typeFlag = `--dev` + } + const command = [ + `yarn`, + [`add`, `-W`, typeFlag, ...getPackageNames(types[type])], + { + cwd: root, + }, + ] + + let commands + if (typeFlag !== ``) { + commands = [`add`, `-W`, typeFlag, ...getPackageNames(types[type])] + } else { + commands = [`add`, `-W`, ...getPackageNames(types[type])] + } -const create = async ({ root }, cmds) => { - await execa(`yarn`, [`add`, `-W`, ...getPackageNames(cmds)], { cwd: root }) + const { stdout } = await execa(`yarn`, commands, { + cwd: root, + }) + console.log(stdout) + }) } const read = async (_, { name }) => { @@ -11,14 +44,16 @@ const read = async (_, { name }) => { return stdout } -const update = async (_, cmds) => { - await execa(`yarn`, [`upgrade`, `-W`, ...getPackageNames(cmds)], { +const update = async (_, packages) => { + await execa(`yarn`, [`upgrade`, `-W`, ...getPackageNames(packages)], { cwd: root, }) } -const destroy = async (_, cmds) => { - await execa(`yarn`, [`remove`, `-W`, ...getPackageNames(cmds)], { cwd: root }) +const destroy = async (_, packages) => { + await execa(`yarn`, [`remove`, `-W`, ...getPackageNames(packages)], { + cwd: root, + }) } module.exports.create = create diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 0821bbbd09ac1..84a48d42ee304 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -10,14 +10,14 @@ ## Near future -- [ ] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) +- [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) - [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Move to more random port ## Friday (alpha) -- [ ] Handle `dev` in NPMPackage +- [x] Handle `dev` in NPMPackage - [ ] Step by step design - [ ] Select input supported recipes - [ ] Make port selection dynamic From cfdb1d275ee272f2c5acf6aef6f091520ae2c712 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 18:13:53 -0700 Subject: [PATCH 014/128] Move package to new prop name --- packages/gatsby/src/recipes/eslint.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/eslint.mdx b/packages/gatsby/src/recipes/eslint.mdx index 2eac037aa458e..b11ada61cad03 100644 --- a/packages/gatsby/src/recipes/eslint.mdx +++ b/packages/gatsby/src/recipes/eslint.mdx @@ -25,7 +25,7 @@ add additional presets, plugins, and rules. Installing necessary packages - + --- From c0e7b8344206cdcc0d41be439396b8a56e8c4235 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 1 Apr 2020 18:39:33 -0700 Subject: [PATCH 015/128] Update todos --- packages/gatsby/src/recipes/todo.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 84a48d42ee304..249767d49d220 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -18,6 +18,8 @@ ## Friday (alpha) - [x] Handle `dev` in NPMPackage +- [ ] Make `dependencyType` in NPMPackage an enum +- [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] Step by step design - [ ] Select input supported recipes - [ ] Make port selection dynamic From f044af7c744b5f4d2cb3704ab8d103ef795f6672 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 2 Apr 2020 08:55:47 -0700 Subject: [PATCH 016/128] add TODO --- packages/gatsby/src/recipes/todo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 249767d49d220..d511761db1d6b 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -23,6 +23,7 @@ - [ ] Step by step design - [ ] Select input supported recipes - [ ] Make port selection dynamic +- [ ] use yarn/npm based on the user config ## Near-ish future From 66ff708d6a0fbe1e93d2bc2390ed29a7f491edc4 Mon Sep 17 00:00:00 2001 From: John Otander Date: Thu, 2 Apr 2020 10:25:57 -0700 Subject: [PATCH 017/128] recipes: Improve providers (#22764) * Don't overwrite files by default * Handle object style plugin config * Handle object style plugin config * Update todo * Use fs-extra, improve plugin config tests * Fix file check * Remove overwrite logic, this will be part of the plan step --- .../gatsby/src/recipes/providers/fs/file.js | 31 +++++--- .../src/recipes/providers/fs/file.test.js | 30 ++++++++ .../gatsby/fixtures/gatsby-config.js | 4 +- .../src/recipes/providers/gatsby/plugin.js | 74 +++++++++++++------ .../recipes/providers/gatsby/plugin.test.js | 35 +++++++-- .../recipes/providers/gatsby/shadow-file.js | 17 ++--- packages/gatsby/src/recipes/todo.md | 5 +- 7 files changed, 139 insertions(+), 57 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/fs/file.test.js diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index a87b46604cac4..26d6eb31e81b7 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -1,35 +1,42 @@ -const fs = require(`fs`) +const fs = require(`fs-extra`) const path = require(`path`) -const { promisify } = require(`util`) const mkdirp = require(`mkdirp`) -const readFile = promisify(fs.readFile) -const writeFile = promisify(fs.writeFile) -const destroyFile = promisify(fs.unlink) +const fileExists = ({ root }, { path: filePath }) => { + const fullPath = path.join(root, filePath) + try { + fs.accessSync(fullPath, fs.constants.F_OK) + return true + } catch (e) { + return false + } +} -const create = async ({ root }, { path: filePath, content, children }) => { +const create = async ({ root }, { path: filePath, content }) => { const fullPath = path.join(root, filePath) const { dir } = path.parse(fullPath) - content = content || children - await mkdirp(dir) - await writeFile(fullPath, content) + await fs.writeFile(fullPath, content) } +const update = create + const read = async ({ root }, { path: filePath }) => { const fullPath = path.join(root, filePath) - const content = await readFile(fullPath, `utf8`) + const content = await fs.readFile(fullPath, `utf8`) return { content } } const destroy = async ({ root }, { path: filePath }) => { const fullPath = path.join(root, filePath) - await destroyFile(fullPath) + await fs.unlink(fullPath) } +module.exports.exists = fileExists + module.exports.create = create -module.exports.update = create +module.exports.update = update module.exports.read = read module.exports.destroy = destroy diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js new file mode 100644 index 0000000000000..b57170e99e550 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -0,0 +1,30 @@ +const file = require(`./file`) + +const root = __dirname +const content = `Hello, world!` + +test(`create writes a file`, async () => { + const filePath = `bar.txt` + + await file.create({ root }, { path: filePath, content }) + + const result = await file.read({ root }, { path: filePath }) + + expect(result.content).toEqual(content) + + await file.destroy({ root }, { path: filePath }) +}) + +test(`update overwrites a file`, async () => { + const filePath = `bar.txt` + const newContent = `new content!` + + await file.create({ root }, { path: filePath, content }) + await file.update({ root }, { path: filePath, content: newContent }) + + const result = await file.read({ root }, { path: filePath }) + + expect(result.content).toEqual(newContent) + + await file.destroy({ root }, { path: filePath }) +}) diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js index a66d8a8311e62..93f6420f76147 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js @@ -1,5 +1,4 @@ const redish = `#c5484d` - module.exports = { siteMetadata: { title: `Bricolage`, @@ -63,8 +62,7 @@ module.exports = { display: `minimal-ui`, }, }, - `gatsby-plugin-offline`, - // `gatsby-plugin-preact`, + `gatsby-plugin-offline`, // `gatsby-plugin-preact`, `gatsby-plugin-react-helmet`, ], } diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 5f7f6f5527a41..6ebb7244d967e 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -1,4 +1,4 @@ -const fs = require(`fs`) +const fs = require(`fs-extra`) const path = require(`path`) const babel = require(`@babel/core`) @@ -18,6 +18,31 @@ const isDefaultExport = node => { return true } +const getValueFromLiteral = node => { + if (node.type === `StringLiteral`) { + return node.value + } + + if (node.type === `TemplateLiteral`) { + return node.quasis[0].value.raw + } + + return null +} + +const getNameForPlugin = node => { + if (node.type === `StringLiteral` || node.type === `TemplateLiteral`) { + return getValueFromLiteral(node) + } + + if (node.type === `ObjectExpression`) { + const resolve = node.properties.find(p => p.key.name === `resolve`) + return resolve ? getValueFromLiteral(resolve.value) : null + } + + return null +} + const addPluginToConfig = (src, pluginName) => { const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ pluginOrThemeName: pluginName, @@ -31,31 +56,35 @@ const addPluginToConfig = (src, pluginName) => { return code } -const create = ({ root }, { name }) => { - const configPath = path.join(root, `gatsby-config.js`) - const configSrc = fs.readFileSync(configPath) +const getPluginsFromConfig = src => { + const getPlugins = new BabelPluginGetPluginsFromGatsbyConfig() - const code = addPluginToConfig(configSrc, name) + babel.transform(src, { + plugins: [getPlugins.plugin], + }) - fs.writeFileSync(configPath, code) + return getPlugins.state } -const read = ({ root }) => { +const create = async ({ root }, { name }) => { const configPath = path.join(root, `gatsby-config.js`) - const configSrc = fs.readFileSync(configPath) + const configSrc = await fs.readFile(configPath, `utf8`) - const getPlugins = new BabelPluginGetPluginsFromGatsbyConfig() + const code = addPluginToConfig(configSrc, name) - babel.transform(configSrc, { - plugins: [getPlugins.plugin], - }) + await fs.writeFile(configPath, code) +} - return getPlugins.state +const read = async ({ root }) => { + const configPath = path.join(root, `gatsby-config.js`) + const configSrc = await fs.readFile(configPath, `utf8`) + + return getPluginsFromConfig(configSrc) } -const destroy = ({ root }, { name }) => { +const destroy = async ({ root }, { name }) => { const configPath = path.join(root, `gatsby-config.js`) - const configSrc = fs.readFileSync(configPath) + const configSrc = await fs.readFile(configPath, `utf8`) const addPlugins = new BabelPluginAddPluginsToGatsbyConfig({ pluginOrThemeName: name, @@ -66,7 +95,7 @@ const destroy = ({ root }, { name }) => { plugins: [addPlugins.plugin], }) - fs.writeFileSync(configPath, code) + await fs.writeFile(configPath, code) } class BabelPluginAddPluginsToGatsbyConfig { @@ -88,15 +117,14 @@ class BabelPluginAddPluginsToGatsbyConfig { const plugins = right.properties.find(p => p.key.name === `plugins`) if (shouldAdd) { - const exists = plugins.value.elements.some( - node => node.value === pluginOrThemeName - ) + const pluginNames = plugins.value.elements.map(getNameForPlugin) + const exists = pluginNames.includes(node.value) if (!exists) { plugins.value.elements.push(t.stringLiteral(pluginOrThemeName)) } } else { plugins.value.elements = plugins.value.elements.filter( - node => node.value !== pluginOrThemeName + node => getNameForPlugin(node) !== pluginOrThemeName ) } @@ -127,9 +155,8 @@ class BabelPluginGetPluginsFromGatsbyConfig { const plugins = right.properties.find(p => p.key.name === `plugins`) - plugins.value.elements.forEach(node => { - // TODO: handle { resolve: 'thing' } - this.state.push(node.value) + plugins.value.elements.map(node => { + this.state.push(getNameForPlugin(node)) }) }, }, @@ -139,6 +166,7 @@ class BabelPluginGetPluginsFromGatsbyConfig { } module.exports.addPluginToConfig = addPluginToConfig +module.exports.getPluginsFromConfig = getPluginsFromConfig module.exports.create = create module.exports.update = create diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index dab0f152f3548..124be6bdf1579 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -1,14 +1,35 @@ -const fs = require(`fs`) const path = require(`path`) -const { addPluginToConfig } = require(`./plugin`) +const plugin = require(`./plugin`) -const CONFIG_PATH = path.join(__dirname, `./fixtures/gatsby-config.js`) +const root = path.join(__dirname, `./fixtures`) +const name = `gatsby-plugin-foo` -test(`babel plugin to get list of plugins and their options!`, () => { - const src = fs.readFileSync(CONFIG_PATH, `utf8`) +describe(`gatsby-config`, () => { + test(`adds a plugin to a gatsby config`, async () => { + await plugin.create({ root }, { name }) - const result = addPluginToConfig(src, `gatsby-plugin-foo`) + const result = await plugin.read({ root }) - expect(result).toMatch(`gatsby-plugin-foo`) + expect(result).toContain(`gatsby-plugin-foo`) + + await plugin.destroy({ root }, { name }) + }) + + test(`retrieves plugins from a config`, async () => { + const result = await plugin.read({ root }) + + expect(result).toEqual([ + `gatsby-source-filesystem`, + `gatsby-transformer-sharp`, + `gatsby-plugin-emotion`, + `gatsby-plugin-typography`, + `gatsby-transformer-remark`, + `gatsby-plugin-sharp`, + `gatsby-plugin-google-analytics`, + `gatsby-plugin-manifest`, + `gatsby-plugin-offline`, + `gatsby-plugin-react-helmet`, + ]) + }) }) diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js index 6ee112ca9f89f..6281c67e98bfa 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js @@ -1,12 +1,7 @@ const path = require(`path`) -const fs = require(`fs`) -const { promisify } = require(`util`) +const fs = require(`fs-extra`) const mkdirp = require(`mkdirp`) -const readFile = promisify(fs.readFile) -const writeFile = promisify(fs.writeFile) -const destroyFile = promisify(fs.unlink) - const create = async ({ root }, { theme, path: filePath }) => { const relativePathInTheme = filePath.replace(theme + `/`, ``) const fullFilePathToShadow = path.join( @@ -16,13 +11,13 @@ const create = async ({ root }, { theme, path: filePath }) => { relativePathInTheme ) - const contents = await readFile(fullFilePathToShadow, `utf8`) + const contents = await fs.readFile(fullFilePathToShadow, `utf8`) const fullPath = path.join(root, filePath) const { dir } = path.parse(fullPath) await mkdirp(dir) - await writeFile(fullPath, contents) + await fs.writeFile(fullPath, contents) } const read = async ({ root }, { theme, path: filePath }) => { @@ -34,13 +29,13 @@ const read = async ({ root }, { theme, path: filePath }) => { relativePathInTheme ) - const contents = await readFile(fullFilePathToShadow, `utf8`) + const contents = await fs.readFile(fullFilePathToShadow, `utf8`) return contents } -const destroy = async ({ root }, { theme, path: filePath }) => { +const destroy = async ({ root }, { path: filePath }) => { const fullPath = path.join(root, filePath) - await destroyFile(fullPath) + await fs.unlink(fullPath) } module.exports.create = create diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index d511761db1d6b..8e3a18069e1b5 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -23,9 +23,12 @@ - [ ] Step by step design - [ ] Select input supported recipes - [ ] Make port selection dynamic +- [x] Use `fs-extra` +- [x] Handle object style plugins +- [x] Improve gatsby-config test - [ ] use yarn/npm based on the user config ## Near-ish future - [ ] Make a proper "Config" provider to add recipes dir, store data, etc. -- [ ] Client sends the MDX file to the server (maybe?) +- [ ] Move parsing to the server From d3d8a7bb70fdfd869fe866300f3ddd7de43084c4 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 2 Apr 2020 20:24:04 -0700 Subject: [PATCH 018/128] Improve recipes providers (#22783) * Don't overwrite files by default * Handle object style plugin config * Handle object style plugin config * Update todo * Use fs-extra, improve plugin config tests * Fix file check * Remove overwrite logic, this will be part of the plan step * Queue operations and prompt user for each step * Remove unused graphql code * Return a plan for next step and reveal in ui * Begin using plan data for rendering Co-authored-by: John Otander --- packages/gatsby/package.json | 2 + packages/gatsby/src/recipes/cli.js | 190 +++++++++--------- packages/gatsby/src/recipes/graphql.js | 109 ++++++---- packages/gatsby/src/recipes/parser.js | 97 +++++++++ .../src/recipes/providers/gatsby/plugin.js | 12 ++ .../src/recipes/providers/npm/package.js | 12 ++ packages/gatsby/src/recipes/theme-ui.mdx | 12 +- 7 files changed, 301 insertions(+), 133 deletions(-) create mode 100644 packages/gatsby/src/recipes/parser.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 50385c9a1c0ff..309759e46e131 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -19,6 +19,7 @@ "@hapi/joi": "^15.1.1", "@mdx-js/mdx": "^1.5.8", "@mdx-js/react": "^1.5.8", + "@mdx-js/runtime": "^1.5.8", "@mikaelkristiansson/domready": "^1.0.10", "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", @@ -144,6 +145,7 @@ "terser-webpack-plugin": "^1.4.3", "true-case-path": "^2.2.1", "type-of": "^2.0.1", + "unist-util-remove": "^2.0.0", "unist-util-visit": "^2.0.2", "url-loader": "^1.1.2", "urql": "^1.9.5", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index b5320b7da2960..995b920b40d37 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -2,15 +2,11 @@ const fs = require(`fs`) const path = require(`path`) const React = require(`react`) -const { useState, useContext, useEffect } = require(`react`) +const { useState, useContext } = require(`react`) const { render, Box, Text, useInput, useApp } = require(`ink`) const Spinner = require(`ink-spinner`).default -const unified = require(`unified`) -const remarkMdx = require(`remark-mdx`) -const remarkParse = require(`remark-parse`) -const remarkStringify = require(`remark-stringify`) -const jsxToJson = require(`simplified-jsx-to-json`) -const visit = require(`unist-util-visit`) +const Link = require(`ink-link`) +const MDX = require(`@mdx-js/runtime`) const humanizeList = require(`humanize-list`) const { createClient, @@ -24,6 +20,40 @@ const { SubscriptionClient } = require(`subscriptions-transport-ws`) const fetch = require(`node-fetch`) const ws = require(`ws`) +const parser = require(`./parser`) + +const PlanDescribe = ({ resourceName }) => { + const { planForNextStep = [] } = usePlan() + const plans = planForNextStep.filter(p => p.resourceName === resourceName) + + return ( + + {plans.map((stepPlan, i) => ( + {stepPlan.describe} + ))} + + ) +} + +const components = { + inlineCode: Text, + h1: props => , + h2: props => , + h3: props => , + h4: props => , + h5: props => , + h6: props => , + a: ({ href, children }) => {children}, + paragraph: props => ( + + ), + Config: () => null, + GatsbyPlugin: () => , + NPMPackage: () => , + File: () => , + ShadowFile: () => +} + const isRelative = path => { if (path.slice(0, 1) == `.`) { return true @@ -32,6 +62,26 @@ const isRelative = path => { return false } +const log = (label, textOrObj) => { + const text = + typeof textOrObj === `string` + ? textOrObj + : JSON.stringify(textOrObj, null, 2) + + let contents = `` + try { + contents = fs.readFileSync(`recipe-client.log`, `utf8`) + } catch (e) { + // File doesn't exist yet + } + + contents += label + `: ` + text + `\n` + fs.writeFileSync(`recipe-client.log`, contents) +} + +const PlanContext = React.createContext({}) +const usePlan = () => useContext(PlanContext) + module.exports = ({ recipe, projectRoot }) => { let recipePath if (isRelative(recipe)) { @@ -42,8 +92,8 @@ module.exports = ({ recipe, projectRoot }) => { if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` } - const recipeSrc = fs.readFileSync(recipePath, `utf8`) + const recipeSrc = fs.readFileSync(recipePath, `utf8`) const GRAPHQL_ENDPOINT = `http://localhost:4000/graphql` const subscriptionClient = new SubscriptionClient( @@ -67,75 +117,18 @@ module.exports = ({ recipe, projectRoot }) => { ], }) + const { + commands: allCommands, + stepsAsMdx: stepsAsMDX, + stepsAsMdxWithoutJsx: stepsAsMDXNoJSX, + } = parser(recipeSrc) + const Div = props => ( ) - const u = unified() - .use(remarkParse) - .use(remarkStringify) - .use(remarkMdx) - - const ast = u.parse(recipeSrc) - - const steps = [] - let index = 0 - ast.children.forEach(node => { - if (node.type === `thematicBreak`) { - index++ - return - } - - steps[index] = steps[index] || [] - steps[index].push(node) - }) - - const asRoot = nodes => { - return { - type: `root`, - children: nodes, - } - } - - const stepsAsMDX = steps.map(nodes => { - const stepAst = asRoot(nodes) - return u.stringify(stepAst) - }) - - const toJson = value => { - const obj = {} - jsxToJson(value).forEach(([type, props = {}]) => { - if (type === `\n`) { - return - } - obj[type] = obj[type] || [] - obj[type].push(props) - }) - return obj - } - - const allCommands = steps - .map(nodes => { - const stepAst = asRoot(nodes) - let cmds = [] - visit(stepAst, `jsx`, node => { - const jsx = node.value - cmds = cmds.concat(toJson(jsx)) - }) - return cmds - }) - .reduce((acc, curr) => { - const cmdByName = {} - curr.map(v => { - Object.entries(v).forEach(([key, value]) => { - cmdByName[key] = cmdByName[key] || [] - cmdByName[key] = cmdByName[key].concat(value) - }) - }) - return [...acc, cmdByName] - }, []) - const RecipeInterpreter = ({ commands }) => { + const [currentStep, setCurrentStep] = useState(0) const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() const [subscriptionResponse] = useSubscription( @@ -145,6 +138,7 @@ module.exports = ({ recipe, projectRoot }) => { operation { state data + planForNextStep } } `, @@ -152,13 +146,18 @@ module.exports = ({ recipe, projectRoot }) => { (_prev, now) => now ) const [_, createOperation] = useMutation(` - mutation ($commands: String!) { - createOperation(commands: $commands) - } - `) + mutation ($commands: String!) { + createOperation(commands: $commands) + } + `) + const [__, applyOperationStep] = useMutation(` + mutation { + applyOperationStep + } + `) - subscriptionClient.connectionCallback = () => { - createOperation({ commands: JSON.stringify(commands) }) + subscriptionClient.connectionCallback = async () => { + await createOperation({ commands: JSON.stringify(commands) }) } const { data } = subscriptionResponse @@ -169,6 +168,13 @@ module.exports = ({ recipe, projectRoot }) => { JSON.parse(data.operation.data)) || commands + const planForNextStep = + (data && + data.operation && + data.operation.planForNextStep && + JSON.parse(data.operation.planForNextStep)) || + [] + const state = data && data.operation && data.operation.state useInput((_, key) => { @@ -178,25 +184,25 @@ module.exports = ({ recipe, projectRoot }) => { exit() // TODO figure out why exiting ink isn't enough. process.exit() + } else if (key.return) { + setCurrentStep(currentStep + 1) + applyOperationStep() } }) + if (process.env.DEBUG) { + log(`subscriptionResponse`, subscriptionResponse) + log(`lastKeyPress`, lastKeyPress) + log(`state`, state) + } + return ( - <> -
- {process.env.DEBUG ? ( - {JSON.stringify(subscriptionResponse, null, 2)} - ) : null} -
-
- {process.env.DEBUG ? ( - Last Key Press: {JSON.stringify(lastKeyPress, null, 2)} - ) : null} -
-
{process.env.DEBUG ? STATE: {state} : null}
+ + {stepsAsMDX[currentStep]} +
+ Press enter to apply! {operation.map((command, i) => (
-
))} @@ -206,7 +212,7 @@ module.exports = ({ recipe, projectRoot }) => { Your recipe is served! Press enter to exit.
) : null} - + ) } diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index e345790dbf3f5..7515a0b3563a5 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -6,15 +6,17 @@ const { GraphQLString, GraphQLList, GraphQLEnumType, + GraphQLInt, execute, subscribe, } = require(`graphql`) -const { PubSub, withFilter } = require(`graphql-subscriptions`) +const { PubSub } = require(`graphql-subscriptions`) const { SubscriptionServer } = require(`subscriptions-transport-ws`) const { createServer } = require(`http`) const fs = require(`fs`) const path = require(`path`) const { promisify } = require(`util`) +const Queue = require(`better-queue`) const fileResource = require(`./providers/fs/file`) const gatsbyPluginResource = require(`./providers/gatsby/plugin`) @@ -29,18 +31,6 @@ const read = promisify(fs.readFile) const pubsub = new PubSub() const PORT = 4000 -const readPackage = async () => { - const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) - return JSON.parse(contents) -} - -const emitOperation = (state = `progress`, data) => { - pubsub.publish(`operation`, { - state, - data: JSON.stringify(data), - }) -} - const context = { root: SITE_ROOT } const configResource = { @@ -48,6 +38,7 @@ const configResource = { read: () => {}, update: () => {}, destroy: () => {}, + plan: () => {}, } const componentResourceMapping = { @@ -59,13 +50,68 @@ const componentResourceMapping = { NPMScript: npmPackageScriptResource, } +let queue = new Queue(async (action, cb) => { + await applyStep(action) + cb() +}) + +queue.pause() +queue.on(`task_finish`, async () => { + if (queue.length > 1) { + queue.pause() + } + + const nextId = queue._store._queue[0] + const task = queue._store._tasks[nextId] + const { plan, ...cmds } = task + + let planForNextStep = [] + const commandPlans = Object.entries(cmds).map(async ([key, val]) => { + const resource = componentResourceMapping[key] + if (!resource || !resource.plan) { + return + } + + if (resource && resource.config && resource.config.batch) { + const cmdPlan = await resource.plan(context, val) + planForNextStep.push({ resourceName: key, cmdPlan }) + } else { + await asyncForEach(cmds[key], async cmd => { + try { + const commandPlan = await resource.plan(context, cmd) + planForNextStep.push({ resourceName: key, ...commandPlan }) + } catch (e) { + console.log(e) + } + }) + } + }) + + await Promise.all(commandPlans) + + emitOperation(`progress`, plan, planForNextStep) +}) + +const readPackage = async () => { + const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) + return JSON.parse(contents) +} + +const emitOperation = (state = `progress`, data, plan = []) => { + pubsub.publish(`operation`, { + state, + data: JSON.stringify(data), + planForNextStep: JSON.stringify(plan), + }) +} + const asyncForEach = async (array, callback) => { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array) } } -const applyStep = plan => async step => { +const applyStep = async ({ plan, ...step }) => { const commandsForStep = Object.keys(step).map(async key => { const resource = componentResourceMapping[key] if (resource && resource.config && resource.config.batch) { @@ -96,11 +142,12 @@ const applyStep = plan => async step => { await Promise.all(commandsForStep) } -const applyPlan = async plan => { - await asyncForEach(plan, applyStep(plan)) - setTimeout(() => { +const applyPlan = plan => { + plan.forEach(step => queue.push({ plan, ...step })) + + queue.on(`drain`, () => { emitOperation(`success`, plan) - }, 1) + }) } const OperationStateEnumType = new GraphQLEnumType({ @@ -116,7 +163,9 @@ const OperationType = new GraphQLObjectType({ name: `Operation`, fields: { state: { type: OperationStateEnumType }, + step: { type: GraphQLInt }, data: { type: GraphQLString }, + planForNextStep: { type: GraphQLString }, }, }) @@ -215,6 +264,12 @@ const rootMutationType = new GraphQLObjectType({ applyPlan(JSON.parse(args.commands)) }, }, + applyOperationStep: { + type: GraphQLString, + resolve: () => { + queue.resume() + }, + }, } }, }) @@ -228,24 +283,6 @@ const rootSubscriptionType = new GraphQLObjectType({ subscribe: () => pubsub.asyncIterator(`operation`), resolve: payload => payload, }, - npmPackageUpdated: { - type: NPMPackageType, - args: { - name: { - type: GraphQLString, - }, - }, - subscribe: withFilter( - () => pubsub.asyncIterator(`npmPackageUpdated`), - (payload, variables) => - true || payload.npmPackageUpdated.dependencies[variables.name] - ), - resolve: () => { - return { - version: `${Math.random()}`, - } - }, - }, } }, }) diff --git a/packages/gatsby/src/recipes/parser.js b/packages/gatsby/src/recipes/parser.js new file mode 100644 index 0000000000000..de7c948810290 --- /dev/null +++ b/packages/gatsby/src/recipes/parser.js @@ -0,0 +1,97 @@ +const unified = require(`unified`) +const remarkMdx = require(`remark-mdx`) +const remarkParse = require(`remark-parse`) +const remarkStringify = require(`remark-stringify`) +const jsxToJson = require(`simplified-jsx-to-json`) +const visit = require(`unist-util-visit`) + +const asRoot = nodes => { + return { + type: `root`, + children: nodes, + } +} + +const toJson = value => { + const obj = {} + jsxToJson(value).forEach(([type, props = {}]) => { + if (type === `\n`) { + return + } + obj[type] = obj[type] || [] + obj[type].push(props) + }) + return obj +} + +const extractCommands = steps => { + const commands = steps + .map(nodes => { + const stepAst = asRoot(nodes) + let cmds = [] + visit(stepAst, `jsx`, node => { + const jsx = node.value + cmds = cmds.concat(toJson(jsx)) + }) + return cmds + }) + .reduce((acc, curr) => { + const cmdByName = {} + curr.map(v => { + Object.entries(v).forEach(([key, value]) => { + cmdByName[key] = cmdByName[key] || [] + cmdByName[key] = cmdByName[key].concat(value) + }) + }) + return [...acc, cmdByName] + }, []) + + return commands +} + +const u = unified() + .use(remarkParse) + .use(remarkStringify) + .use(remarkMdx) + +const partitionSteps = ast => { + const steps = [] + let index = 0 + ast.children.forEach(node => { + if (node.type === `thematicBreak`) { + index++ + return + } + + steps[index] = steps[index] || [] + steps[index].push(node) + }) + + return steps +} + +const toMdx = nodes => { + const stepAst = asRoot(nodes) + return u.stringify(stepAst) +} + +const toMdxWithoutJsx = nodes => { + const stepAst = asRoot(nodes) + visit(stepAst, `jsx`, (node, index, parent) => { + parent.children.splice(index, 1) + }) + return u.stringify(stepAst) +} + +module.exports = src => { + const ast = u.parse(src) + const steps = partitionSteps(ast) + + return { + ast, + steps, + commands: extractCommands(steps), + stepsAsMdx: steps.map(toMdx), + stepsAsMdxWithoutJsx: steps.map(toMdxWithoutJsx), + } +} diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 6ebb7244d967e..e362df7f8e8fa 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -172,3 +172,15 @@ module.exports.create = create module.exports.update = create module.exports.read = read module.exports.destroy = destroy + +module.exports.plan = async ({ root }, { name }) => { + const configPath = path.join(root, `gatsby-config.js`) + const src = await fs.readFile(configPath, `utf8`) + const newContents = addPluginToConfig(src, name) + + return { + currentState: src, + newState: newContents, + describe: `Configure ${name}`, + } +} diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 78f10986a456d..f0292e7a31e1a 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -1,5 +1,6 @@ const execa = require(`execa`) const _ = require(`lodash`) +const humanizeList = require('humanize-list') const getPackageNames = packages => packages.map(n => n.name) const asyncForEach = async (array, callback) => { @@ -9,6 +10,7 @@ const asyncForEach = async (array, callback) => { } const create = async ({ root }, packages) => { + return const types = _.groupBy(packages, c => c.dependencyType) // Run install for each dependency type @@ -63,3 +65,13 @@ module.exports.destroy = destroy module.exports.config = { batch: true, } + +module.exports.plan = (_, packages) => { + const packageNames = getPackageNames(packages) + + return { + currentState: [], + newState: [packageNames], + describe: `Install ${humanizeList(packageNames)}` + } +} diff --git a/packages/gatsby/src/recipes/theme-ui.mdx b/packages/gatsby/src/recipes/theme-ui.mdx index 8489fb1f50b1f..045d7b741f48e 100644 --- a/packages/gatsby/src/recipes/theme-ui.mdx +++ b/packages/gatsby/src/recipes/theme-ui.mdx @@ -8,25 +8,24 @@ This recipe helps you start developing with the [Theme UI](https://theme-ui.com) Install packages. - + --- -Add the plugin `gatsby-plugin-theme-ui` to your `gatsby-config.js` and -shadowing the Theme UI config file into your source. +Add the plugin `gatsby-plugin-theme-ui` to your `gatsby-config.js`. --- +Write out Theme UI configuration files. + ---- - Date: Thu, 2 Apr 2020 20:50:21 -0700 Subject: [PATCH 019/128] Support rendering more markdown --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/cli.js | 41 ++++++++++++++++++------------ 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 309759e46e131..b479a2ce9359b 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -91,6 +91,7 @@ "hasha": "^5.2.0", "humanize-list": "^1.0.1", "import-jsx": "^4.0.0", + "ink-link": "^1.0.0", "invariant": "^2.2.4", "is-relative": "^1.0.0", "is-relative-url": "^3.0.0", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 995b920b40d37..000c5774b90cd 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,5 +1,6 @@ const fs = require(`fs`) const path = require(`path`) +const { inspect } = require(`util`) const React = require(`react`) const { useState, useContext } = require(`react`) @@ -36,22 +37,33 @@ const PlanDescribe = ({ resourceName }) => { } const components = { - inlineCode: Text, + inlineCode: props => ( + // log(`inlineCode`, { props }) + + ), h1: props => , h2: props => , h3: props => , h4: props => , h5: props => , h6: props => , - a: ({ href, children }) => {children}, - paragraph: props => ( - - ), + a: ({ href, children }) => { + log(`Link`, { href, children }) + return {children} + }, + p: props => { + log(`paragraph`, { props }) + return + }, + li: props => { + log(`li`, { props }) + return * {props.children} + }, Config: () => null, - GatsbyPlugin: () => , - NPMPackage: () => , - File: () => , - ShadowFile: () => + GatsbyPlugin: () => , + NPMPackage: () => , + File: () => , + ShadowFile: () => , } const isRelative = path => { @@ -64,9 +76,7 @@ const isRelative = path => { const log = (label, textOrObj) => { const text = - typeof textOrObj === `string` - ? textOrObj - : JSON.stringify(textOrObj, null, 2) + typeof textOrObj === `string` ? textOrObj : inspect(textOrObj, null, 2) let contents = `` try { @@ -191,13 +201,12 @@ module.exports = ({ recipe, projectRoot }) => { }) if (process.env.DEBUG) { - log(`subscriptionResponse`, subscriptionResponse) - log(`lastKeyPress`, lastKeyPress) - log(`state`, state) + // log(`subscriptionResponse`, subscriptionResponse) + // log(`state`, state) } return ( - + {stepsAsMDX[currentStep]}
Press enter to apply! From f00c6a384123a4a330459f06727761618438ef60 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 2 Apr 2020 21:05:41 -0700 Subject: [PATCH 020/128] Support more markdown tags --- packages/gatsby/src/recipes/cli.js | 15 +++++++++++++-- packages/gatsby/src/recipes/theme-ui.mdx | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 000c5774b90cd..dda8a25e496d2 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -51,9 +51,19 @@ const components = { log(`Link`, { href, children }) return {children} }, + strong: props => , + em: props => , p: props => { log(`paragraph`, { props }) - return + return ( + + ) }, li: props => { log(`li`, { props }) @@ -208,7 +218,7 @@ module.exports = ({ recipe, projectRoot }) => { return ( {stepsAsMDX[currentStep]} -
+ {` `} Press enter to apply! {operation.map((command, i) => (
@@ -438,6 +448,7 @@ module.exports = ({ recipe, projectRoot }) => { const Wrapper = () => ( + {` `} ) diff --git a/packages/gatsby/src/recipes/theme-ui.mdx b/packages/gatsby/src/recipes/theme-ui.mdx index 045d7b741f48e..005e67fdfbece 100644 --- a/packages/gatsby/src/recipes/theme-ui.mdx +++ b/packages/gatsby/src/recipes/theme-ui.mdx @@ -33,6 +33,8 @@ Write out Theme UI configuration files. --- +**Success**! + You're ready to get started! - Read the docs: https://theme-ui.com From 140190e5b550b99953d842db7bf79704e7a11669 Mon Sep 17 00:00:00 2001 From: John Otander Date: Fri, 3 Apr 2020 11:42:28 -0600 Subject: [PATCH 021/128] Tweak providers, add more thorough tests --- .../gatsby/src/recipes/providers/fs/file.js | 10 +++++ .../src/recipes/providers/fs/file.test.js | 41 ++++++++++++------- .../gatsby/src/recipes/providers/fs/file.txt | 1 + .../recipes/providers/gatsby/plugin.test.js | 6 +++ .../src/recipes/providers/npm/package.test.js | 10 +++++ 5 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/fs/file.txt create mode 100644 packages/gatsby/src/recipes/providers/npm/package.test.js diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 26d6eb31e81b7..5a6e3f5b898fb 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -40,3 +40,13 @@ module.exports.create = create module.exports.update = update module.exports.read = read module.exports.destroy = destroy + +module.exports.plan = async (context, { path: filePath, content }) => { + const src = await read(context, { path: filePath, content }) + + return { + currentState: src, + newState: content, + describe: `Write ${filePath}`, + } +} diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js index b57170e99e550..35655bf9c3a6a 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.test.js +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -3,28 +3,39 @@ const file = require(`./file`) const root = __dirname const content = `Hello, world!` -test(`create writes a file`, async () => { - const filePath = `bar.txt` +describe(`file resource`, () => { + test(`create writes a file`, async () => { + const filePath = `bar.txt` - await file.create({ root }, { path: filePath, content }) + await file.create({ root }, { path: filePath, content }) - const result = await file.read({ root }, { path: filePath }) + const result = await file.read({ root }, { path: filePath }) - expect(result.content).toEqual(content) + expect(result.content).toEqual(content) - await file.destroy({ root }, { path: filePath }) -}) + await file.destroy({ root }, { path: filePath }) + }) + + test(`update writes a file`, async () => { + const filePath = `bar.txt` + const newContent = `new content!` + + await file.create({ root }, { path: filePath, content }) + await file.update({ root }, { path: filePath, content: newContent }) + + const result = await file.read({ root }, { path: filePath }) -test(`update overwrites a file`, async () => { - const filePath = `bar.txt` - const newContent = `new content!` + expect(result.content).toEqual(newContent) - await file.create({ root }, { path: filePath, content }) - await file.update({ root }, { path: filePath, content: newContent }) + await file.destroy({ root }, { path: filePath }) + }) - const result = await file.read({ root }, { path: filePath }) + test(`plan returns a description`, async () => { + const filePath = `file.txt` + await file.create({ root }, { path: filePath, content }) - expect(result.content).toEqual(newContent) + const result = await file.plan({ root }, { path: filePath, content }) - await file.destroy({ root }, { path: filePath }) + expect(result.describe).toEqual(`Write ${filePath}`) + }) }) diff --git a/packages/gatsby/src/recipes/providers/fs/file.txt b/packages/gatsby/src/recipes/providers/fs/file.txt new file mode 100644 index 0000000000000..5dd01c177f5d7 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/fs/file.txt @@ -0,0 +1 @@ +Hello, world! \ No newline at end of file diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 124be6bdf1579..64c139cf86242 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -32,4 +32,10 @@ describe(`gatsby-config`, () => { `gatsby-plugin-react-helmet`, ]) }) + + test(`plan returns a description`, async () => { + const result = await plugin.plan({ root }, { name }) + + expect(result.describe).toEqual(`Configure ${name}`) + }) }) diff --git a/packages/gatsby/src/recipes/providers/npm/package.test.js b/packages/gatsby/src/recipes/providers/npm/package.test.js new file mode 100644 index 0000000000000..9a1811f50979e --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/package.test.js @@ -0,0 +1,10 @@ +const pkg = require(`./package`) + +const root = __dirname +const commands = [{ name: `foo` }] + +test(`plan returns a description`, async () => { + const result = await pkg.plan({ root }, commands) + + expect(result.describe).toEqual(`Install foo`) +}) From 9df21828894b00af5d0add12247bc7b8f4a2c4d3 Mon Sep 17 00:00:00 2001 From: John Otander Date: Fri, 3 Apr 2020 11:45:19 -0600 Subject: [PATCH 022/128] Clean up file after plan test --- packages/gatsby/src/recipes/providers/fs/file.test.js | 2 ++ packages/gatsby/src/recipes/providers/fs/file.txt | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 packages/gatsby/src/recipes/providers/fs/file.txt diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js index 35655bf9c3a6a..c2bbe5e09862a 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.test.js +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -37,5 +37,7 @@ describe(`file resource`, () => { const result = await file.plan({ root }, { path: filePath, content }) expect(result.describe).toEqual(`Write ${filePath}`) + + await file.destroy({ root }, { path: filePath }) }) }) diff --git a/packages/gatsby/src/recipes/providers/fs/file.txt b/packages/gatsby/src/recipes/providers/fs/file.txt deleted file mode 100644 index 5dd01c177f5d7..0000000000000 --- a/packages/gatsby/src/recipes/providers/fs/file.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, world! \ No newline at end of file From a5db93480534d8430418749a532c5417d0e5d4a6 Mon Sep 17 00:00:00 2001 From: John Otander Date: Fri, 3 Apr 2020 14:12:49 -0700 Subject: [PATCH 023/128] recipes: Add initial package json resource (#22805) --- packages/gatsby/src/recipes/cli.js | 23 +++++--- packages/gatsby/src/recipes/graphql.js | 9 ++- .../gatsby/src/recipes/prettier-git-hook.mdx | 59 +++++++++++++++++++ .../providers/npm/fixtures/package.json | 3 + .../src/recipes/providers/npm/package-json.js | 48 +++++++++++++++ .../providers/npm/package-json.test.js | 23 ++++++++ 6 files changed, 155 insertions(+), 10 deletions(-) create mode 100644 packages/gatsby/src/recipes/prettier-git-hook.mdx create mode 100644 packages/gatsby/src/recipes/providers/npm/fixtures/package.json create mode 100644 packages/gatsby/src/recipes/providers/npm/package-json.js create mode 100644 packages/gatsby/src/recipes/providers/npm/package-json.test.js diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index dda8a25e496d2..8e20960d07f67 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -25,12 +25,13 @@ const parser = require(`./parser`) const PlanDescribe = ({ resourceName }) => { const { planForNextStep = [] } = usePlan() + log('step plan', planForNextStep) const plans = planForNextStep.filter(p => p.resourceName === resourceName) return ( {plans.map((stepPlan, i) => ( - {stepPlan.describe} + {stepPlan.describe || resourceName} ))} ) @@ -48,13 +49,13 @@ const components = { h5: props => , h6: props => , a: ({ href, children }) => { - log(`Link`, { href, children }) + //log(`Link`, { href, children }) return {children} }, strong: props => , em: props => , p: props => { - log(`paragraph`, { props }) + //log(`paragraph`, { props }) return ( { - log(`li`, { props }) + //log(`li`, { props }) return * {props.children} }, Config: () => null, GatsbyPlugin: () => , - NPMPackage: () => , + NPMPackageJson: () => , + NPMPackage: ({ name }) => { + // const { planForNextStep = [] } = usePlan() + + return ( + + {name} + + ) + }, File: () => , ShadowFile: () => , } @@ -139,8 +149,7 @@ module.exports = ({ recipe, projectRoot }) => { const { commands: allCommands, - stepsAsMdx: stepsAsMDX, - stepsAsMdxWithoutJsx: stepsAsMDXNoJSX, + stepsAsMdx: stepsAsMDX } = parser(recipeSrc) const Div = props => ( diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 7515a0b3563a5..b055a2a4bdc13 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -23,6 +23,7 @@ const gatsbyPluginResource = require(`./providers/gatsby/plugin`) const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) const npmPackageResource = require(`./providers/npm/package`) const npmPackageScriptResource = require(`./providers/npm/script`) +const npmPackageJsonResource = require('./providers/npm/package-json') const SITE_ROOT = process.cwd() @@ -48,6 +49,7 @@ const componentResourceMapping = { Config: configResource, NPMPackage: npmPackageResource, NPMScript: npmPackageScriptResource, + NPMPackageJson: npmPackageJsonResource, } let queue = new Queue(async (action, cb) => { @@ -61,7 +63,7 @@ queue.on(`task_finish`, async () => { queue.pause() } - const nextId = queue._store._queue[0] + const nextId = queue._store._queue[1] const task = queue._store._tasks[nextId] const { plan, ...cmds } = task @@ -74,7 +76,7 @@ queue.on(`task_finish`, async () => { if (resource && resource.config && resource.config.batch) { const cmdPlan = await resource.plan(context, val) - planForNextStep.push({ resourceName: key, cmdPlan }) + planForNextStep.push({ resourceName: key, ...cmdPlan }) } else { await asyncForEach(cmds[key], async cmd => { try { @@ -88,6 +90,8 @@ queue.on(`task_finish`, async () => { }) await Promise.all(commandPlans) + console.log('full operation', JSON.stringify(plan, null, 2)) + console.log('step plan', JSON.stringify(planForNextStep, null, 2)) emitOperation(`progress`, plan, planForNextStep) }) @@ -115,7 +119,6 @@ const applyStep = async ({ plan, ...step }) => { const commandsForStep = Object.keys(step).map(async key => { const resource = componentResourceMapping[key] if (resource && resource.config && resource.config.batch) { - console.log(`resource.create`, { context, step: step[key] }) await resource.create(context, step[key]) step[key].map((_, i) => { diff --git a/packages/gatsby/src/recipes/prettier-git-hook.mdx b/packages/gatsby/src/recipes/prettier-git-hook.mdx new file mode 100644 index 0000000000000..6cca5ea05af2f --- /dev/null +++ b/packages/gatsby/src/recipes/prettier-git-hook.mdx @@ -0,0 +1,59 @@ +# Prettier Git Hook + +Make sure all of your code is run through prettier when you commit it to git. +We achieve this by configuring prettier to run on git hooks using husky and +lint-staged. + +--- + +Install packages. + + + + + +--- + +Implement git hooks for prettier. + + + + +--- + +Write prettier config files. + + + + +--- + +Prettier, husky, and lint-staged are now installed! You can edit your `.prettierrc` +if you'd like to change your prettier configuration. diff --git a/packages/gatsby/src/recipes/providers/npm/fixtures/package.json b/packages/gatsby/src/recipes/providers/npm/fixtures/package.json new file mode 100644 index 0000000000000..2f37dc5b09394 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/fixtures/package.json @@ -0,0 +1,3 @@ +{ + "name": "test" +} \ No newline at end of file diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js new file mode 100644 index 0000000000000..5bdb0f7ba54d3 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -0,0 +1,48 @@ +const fs = require(`fs`) +const path = require(`path`) +const { promisify } = require(`util`) + +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) + +const readPackageJson = async root => { + const fullPath = path.join(root, `package.json`) + const contents = await readFile(fullPath, `utf8`) + const obj = JSON.parse(contents) + return obj +} + +const writePackageJson = async (root, obj) => { + const fullPath = path.join(root, `package.json`) + const contents = JSON.stringify(obj, null, 2) + await writeFile(fullPath, contents) +} + +const create = async ({ root }, { name, value }) => { + const pkg = await readPackageJson(root) + pkg[name] = value + await writePackageJson(root, pkg) +} + +const read = async ({ root }, { name }) => { + const pkg = await readPackageJson(root) + + return { + name, + value: pkg[name], + } +} + +const destroy = async ({ root }, { name }) => { + const pkg = await readPackageJson(root) + delete pkg[name] + await writePackageJson(root, pkg) +} + +module.exports.create = create +module.exports.update = create +module.exports.read = read +module.exports.destroy = destroy +module.exports.config = { + serial: true, +} diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.test.js b/packages/gatsby/src/recipes/providers/npm/package-json.test.js new file mode 100644 index 0000000000000..881a2fb9d93d5 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/package-json.test.js @@ -0,0 +1,23 @@ +const path = require('path') +const pkgJson = require(`./package-json`) + +const root = path.join(__dirname, 'fixtures') + +const name = "husky" +const value = { + "hooks": { + "pre-commit": "lint-staged" + } +} + +describe('package-json', () => { + test(`create a config object`, async () => { + await pkgJson.create({ root }, { name, value }) + + const result = await pkgJson.read({ root }, { name, value }) + + expect(result).toEqual({ name, value }) + + await pkgJson.destroy({ root }, { name, value }) + }) +}) From 14b9548dce8e3fdbb63ce932595a2830248dc361 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 3 Apr 2020 15:41:01 -0700 Subject: [PATCH 024/128] Copy recipes on change --- packages/gatsby/package.json | 4 ++- packages/gatsby/src/recipes/cli.js | 2 +- yarn.lock | 57 ++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index b479a2ce9359b..0183a007c83f6 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -168,6 +168,7 @@ "@babel/runtime": "^7.8.7", "@types/socket.io": "^2.1.4", "babel-preset-gatsby-package": "^0.3.1", + "copy-and-watch": "^0.1.4", "cross-env": "^5.2.1", "documentation": "^12.1.4", "eslint-plugin-jsx-a11y": "^6.2.3", @@ -222,13 +223,14 @@ "build:internal-plugins": "copyfiles -u 1 src/internal-plugins/**/package.json dist", "build:rawfiles": "copyfiles -u 1 src/internal-plugins/**/raw_* dist", "build:recipes": "copyfiles -u 1 src/recipes/*.mdx dist", + "watch:recipes": "copy-and-watch src/recipes/*.mdx dist/recipes", "build:cjs": "babel cache-dir --out-dir cache-dir/commonjs --ignore **/__tests__", "build:src": "babel src --out-dir dist --source-maps --verbose --ignore **/gatsby-cli.js,src/internal-plugins/dev-404-page/raw_dev-404-page.js,**/__tests__ --extensions \".ts,.js\"", "clean-test-bundles": "find test/ -type f -name bundle.js* -exec rm -rf {} +", "prebuild": "rimraf dist && rimraf cache-dir/commonjs", "postinstall": "node scripts/postinstall.js", "prepare": "cross-env NODE_ENV=production npm run build", - "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:recipes && npm run build:src -- --watch", + "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src && npm run watch:recipes -- --watch", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 8e20960d07f67..5cacc28d6d706 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -25,7 +25,7 @@ const parser = require(`./parser`) const PlanDescribe = ({ resourceName }) => { const { planForNextStep = [] } = usePlan() - log('step plan', planForNextStep) + log("step plan", planForNextStep) const plans = planForNextStep.filter(p => p.resourceName === resourceName) return ( diff --git a/yarn.lock b/yarn.lock index adf32c1fee9e2..64cd35e15a5d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3552,6 +3552,15 @@ resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.8.tgz#fc38fe0eb278ae24666b2df3c751e726e33f5fac" integrity sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg== +"@mdx-js/runtime@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.5.8.tgz#e1d3672816925f58fe60970b49d35b1de80fd3cf" + integrity sha512-eiF6IOv8+FuUp1Eit5hRiteZ658EtZtqTc1hJ0V9pgBqmT0DswiD/8h1M5+kWItWOtNbvc6Cz7oHMHD3PrfAzA== + dependencies: + "@mdx-js/mdx" "^1.5.8" + "@mdx-js/react" "^1.5.8" + buble-jsx-only "^0.19.8" + "@mdx-js/util@^1.5.7": version "1.5.7" resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.7.tgz#335358feb2d511bfdb3aa46e31752a10aa51270a" @@ -4606,6 +4615,11 @@ accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0, acorn-globals@^4.3.0, acorn-globals@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" @@ -6256,6 +6270,19 @@ btoa-lite@^1.0.0: resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= +buble-jsx-only@^0.19.8: + version "0.19.8" + resolved "https://registry.yarnpkg.com/buble-jsx-only/-/buble-jsx-only-0.19.8.tgz#6e3524aa0f1c523de32496ac9aceb9cc2b493867" + integrity sha512-7AW19pf7PrKFnGTEDzs6u9+JZqQwM1VnLS19OlqYDhXomtFFknnoQJAPHeg84RMFWAvOhYrG7harizJNwUKJsA== + dependencies: + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.3" + minimist "^1.2.0" + regexpu-core "^4.5.4" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -12833,6 +12860,14 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" +ink-link@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ink-link/-/ink-link-1.0.0.tgz#622c348303b75ee1a6b017d48e5e19c29db596fa" + integrity sha512-oIyGm7UYz5e9j9xc3zgzkYBYLCcRKg/deA3jieXqQT6F4mnhdlTQfLv8zfNt+IMsouPEEKuLPZGE5no5SAIEPQ== + dependencies: + prop-types "^15.7.2" + terminal-link "^1.2.0" + ink-spinner@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ink-spinner/-/ink-spinner-3.0.1.tgz#7b4b206d2b18538701fd92593f9acabbfe308dce" @@ -15746,6 +15781,13 @@ magic-string@^0.25.2: dependencies: sourcemap-codec "^1.4.4" +magic-string@^0.25.3: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^1.0.0, make-dir@^1.2.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -22535,6 +22577,14 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.1.0.tgz#3aec444c07a7cf936e157c1dc224b590c3c7eef2" integrity sha512-I42EWhJ+2aeNQawGx1VtpO0DFI9YcfuvAMNIdKyf/6sRbHJ4P+ZQ/zIT87tE+ln1ymAGcCJds4dolfSAS0AcNg== +terminal-link@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-1.3.0.tgz#3e9a308289e13340053aaf40e8f1a06d1335646e" + integrity sha512-nFaWG/gs3brGi3opgWU2+dyFGbQ7tueSRYOBOD8URdDXCbAGqDEZzuskCc+okCClYcJFDPwn8e2mbv4FqAnWFA== + dependencies: + ansi-escapes "^3.2.0" + supports-hyperlinks "^1.0.1" + terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -23376,6 +23426,13 @@ unist-util-remove@^1.0.0, unist-util-remove@^1.0.3: dependencies: unist-util-is "^3.0.0" +unist-util-remove@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488" + integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g== + dependencies: + unist-util-is "^4.0.0" + unist-util-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" From 98054b4e2f37ff3253ddd415a6f7f46697800358 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 3 Apr 2020 15:41:38 -0700 Subject: [PATCH 025/128] improve stylings for h2/h3 --- packages/gatsby/src/recipes/cli.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 5cacc28d6d706..07eea0ce14288 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -43,11 +43,11 @@ const components = { ), h1: props => , - h2: props => , - h3: props => , - h4: props => , - h5: props => , - h6: props => , + h2: props => , + h3: props => , + h4: props => , + h5: props => , + h6: props => , a: ({ href, children }) => { //log(`Link`, { href, children }) return {children} @@ -79,7 +79,7 @@ const components = { return ( {name} - + ) }, File: () => , @@ -147,10 +147,7 @@ module.exports = ({ recipe, projectRoot }) => { ], }) - const { - commands: allCommands, - stepsAsMdx: stepsAsMDX - } = parser(recipeSrc) + const { commands: allCommands, stepsAsMdx: stepsAsMDX } = parser(recipeSrc) const Div = props => ( From 0f1c3f300c130da4ac04f58c014114e1b374ca51 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 3 Apr 2020 20:47:54 -0700 Subject: [PATCH 026/128] Refactor to use xstate --- packages/gatsby/package.json | 2 +- packages/gatsby/src/commands/recipes.ts | 1 - packages/gatsby/src/recipes/apply-plan.js | 15 ++ packages/gatsby/src/recipes/cli.js | 131 +++++++-------- packages/gatsby/src/recipes/create-plan.js | 57 +++++++ packages/gatsby/src/recipes/graphql.js | 151 ++++++------------ .../gatsby/src/recipes/providers/fs/file.js | 2 + .../src/recipes/providers/gatsby/plugin.js | 2 + .../recipes/providers/gatsby/shadow-file.js | 12 ++ .../src/recipes/providers/npm/package.js | 15 +- packages/gatsby/src/recipes/recipe-machine.js | 115 +++++++++++++ packages/gatsby/src/recipes/resources.js | 26 +++ 12 files changed, 346 insertions(+), 183 deletions(-) create mode 100644 packages/gatsby/src/recipes/apply-plan.js create mode 100644 packages/gatsby/src/recipes/create-plan.js create mode 100644 packages/gatsby/src/recipes/recipe-machine.js create mode 100644 packages/gatsby/src/recipes/resources.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 0183a007c83f6..d996307b9ee18 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -230,7 +230,7 @@ "prebuild": "rimraf dist && rimraf cache-dir/commonjs", "postinstall": "node scripts/postinstall.js", "prepare": "cross-env NODE_ENV=production npm run build", - "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src && npm run watch:recipes -- --watch", + "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src -- --watch", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 51a14e1401d7e..db10758566ba7 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -25,7 +25,6 @@ module.exports = async (program: IProgram): Promise => { fs.writeFileSync(logFile, `\n-----\n${new Date().toJSON()}\n`) const writeStream = fs.createWriteStream(logFile, {flags:'a'}); subprocess.stdout.pipe(writeStream) - // subprocess.stderr.pipe(writeStream) } let started = false diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js new file mode 100644 index 0000000000000..120388c7df366 --- /dev/null +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -0,0 +1,15 @@ +const resources = require(`./resources`) +const SITE_ROOT = process.cwd() +const ctx = { root: SITE_ROOT } + +const applyPlan = async plan => { + console.log(`applying plan for`, plan.resourceName, plan.resource) + const resource = resources[plan.resourceName] + + const result = await Promise.all( + plan.resource.map(r => resource.create(ctx, r)) + ) + console.log(`applyPlan result`, result) +} + +module.exports = applyPlan diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 07eea0ce14288..b0a7d3c9ec444 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -25,63 +25,48 @@ const parser = require(`./parser`) const PlanDescribe = ({ resourceName }) => { const { planForNextStep = [] } = usePlan() - log("step plan", planForNextStep) const plans = planForNextStep.filter(p => p.resourceName === resourceName) return ( {plans.map((stepPlan, i) => ( - {stepPlan.describe || resourceName} + {stepPlan.describe || `* ${resourceName}`} ))} ) } const components = { - inlineCode: props => ( - // log(`inlineCode`, { props }) - - ), + inlineCode: props => , h1: props => , h2: props => , h3: props => , h4: props => , h5: props => , h6: props => , - a: ({ href, children }) => { - //log(`Link`, { href, children }) - return {children} - }, + a: ({ href, children }) => {children}, strong: props => , em: props => , - p: props => { - //log(`paragraph`, { props }) - return ( - - ) - }, - li: props => { - //log(`li`, { props }) - return * {props.children} - }, + p: props => ( + + ), + li: props => * {props.children}, Config: () => null, GatsbyPlugin: () => , NPMPackageJson: () => , - NPMPackage: ({ name }) => { + NPMPackage: ({ name }) => ( // const { planForNextStep = [] } = usePlan() - return ( - - {name} - - ) - }, + + * {name} + + ), File: () => , ShadowFile: () => , } @@ -109,6 +94,11 @@ const log = (label, textOrObj) => { fs.writeFileSync(`recipe-client.log`, contents) } +log( + `started client`, + `======================================= ${new Date().toJSON()}` +) + const PlanContext = React.createContext({}) const usePlan = () => useContext(PlanContext) @@ -163,8 +153,6 @@ module.exports = ({ recipe, projectRoot }) => { subscription { operation { state - data - planForNextStep } } `, @@ -176,9 +164,9 @@ module.exports = ({ recipe, projectRoot }) => { createOperation(commands: $commands) } `) - const [__, applyOperationStep] = useMutation(` - mutation { - applyOperationStep + const [__, sendEvent] = useMutation(` + mutation($event: String!) { + sendEvent(event: $event) } `) @@ -186,61 +174,60 @@ module.exports = ({ recipe, projectRoot }) => { await createOperation({ commands: JSON.stringify(commands) }) } - const { data } = subscriptionResponse - const operation = - (data && - data.operation && - data.operation.data && - JSON.parse(data.operation.data)) || - commands - - const planForNextStep = - (data && - data.operation && - data.operation.planForNextStep && - JSON.parse(data.operation.planForNextStep)) || - [] - - const state = data && data.operation && data.operation.state + const state = (subscriptionResponse.data && + JSON.parse(subscriptionResponse.data.operation.state)) || { + state: `waitingForData`, + } useInput((_, key) => { setLastKeyPress(key) - if (key.return && state === `SUCCESS`) { + if (key.return && state.value === `SUCCESS`) { subscriptionClient.close() exit() // TODO figure out why exiting ink isn't enough. process.exit() } else if (key.return) { - setCurrentStep(currentStep + 1) - applyOperationStep() + // setCurrentStep(currentStep + 1) + sendEvent({ event: `CONTINUE` }) } }) + log(`render`, new Date().toJSON()) + + if (!subscriptionResponse.data) { + return null + } + + if (state.value === `done`) { + process.exit() + } + if (process.env.DEBUG) { - // log(`subscriptionResponse`, subscriptionResponse) - // log(`state`, state) + log(`state`, state) } return ( - - {stepsAsMDX[currentStep]} + + + {stepsAsMDX[state.context.currentStep]} + {` `} Press enter to apply! - {operation.map((command, i) => ( -
-
-
- ))} - {state === `SUCCESS` ? ( -
- - Your recipe is served! Press enter to exit. -
- ) : null} ) } + // {operation.map((command, i) => ( + //
+ //
+ //
+ // ))} + // {state === `SUCCESS` ? ( + //
+ // + // Your recipe is served! Press enter to exit. + //
+ // ) : null} const StateIndicator = ({ state }) => { if (state === `complete`) { return diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js new file mode 100644 index 0000000000000..0ebca5f6383ea --- /dev/null +++ b/packages/gatsby/src/recipes/create-plan.js @@ -0,0 +1,57 @@ +const resources = require(`./resources`) +const SITE_ROOT = process.cwd() +const ctx = { root: SITE_ROOT } + +const asyncForEach = async (array, callback) => { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array) + } +} + +module.exports = async context => { + console.log(`createPlan`, context) + const planForNextStep = [] + + // If we're at the end + console.log(`createPlan`, { + currentStep: context.currentStep, + length: context.steps.length, + }) + if (context.currentStep + 1 >= context.steps.length) { + console.log(`we're at end`) + return planForNextStep + } + + const cmds = context.steps[context.currentStep + 1] + const commandPlans = Object.entries(cmds).map(async ([key, val]) => { + const resource = resources[key] + + // Does this resource support creating a plan? + if (!resource || !resource.plan) { + return + } + + // Does the resource support batching? + if (resource && resource.config && resource.config.batch) { + const cmdPlan = await resource.plan(ctx, val) + planForNextStep.push({ resourceName: key, resource: val, ...cmdPlan }) + } else { + await asyncForEach(cmds[key], async cmd => { + try { + const commandPlan = await resource.plan(ctx, cmd) + planForNextStep.push({ + resourceName: key, + resource: val, + ...commandPlan, + }) + } catch (e) { + console.log(e) + } + }) + } + }) + + await Promise.all(commandPlans) + + return planForNextStep +} diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index b055a2a4bdc13..465c08e76e879 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -17,41 +17,18 @@ const fs = require(`fs`) const path = require(`path`) const { promisify } = require(`util`) const Queue = require(`better-queue`) +const { interpret } = require(`xstate`) -const fileResource = require(`./providers/fs/file`) -const gatsbyPluginResource = require(`./providers/gatsby/plugin`) -const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) -const npmPackageResource = require(`./providers/npm/package`) -const npmPackageScriptResource = require(`./providers/npm/script`) -const npmPackageJsonResource = require('./providers/npm/package-json') +const recipeMachine = require(`./recipe-machine`) const SITE_ROOT = process.cwd() +const context = { root: SITE_ROOT } const read = promisify(fs.readFile) const pubsub = new PubSub() const PORT = 4000 -const context = { root: SITE_ROOT } - -const configResource = { - create: () => {}, - read: () => {}, - update: () => {}, - destroy: () => {}, - plan: () => {}, -} - -const componentResourceMapping = { - File: fileResource, - GatsbyPlugin: gatsbyPluginResource, - ShadowFile: gatsbyShadowFileResource, - Config: configResource, - NPMPackage: npmPackageResource, - NPMScript: npmPackageScriptResource, - NPMPackageJson: npmPackageJsonResource, -} - let queue = new Queue(async (action, cb) => { await applyStep(action) cb() @@ -67,32 +44,6 @@ queue.on(`task_finish`, async () => { const task = queue._store._tasks[nextId] const { plan, ...cmds } = task - let planForNextStep = [] - const commandPlans = Object.entries(cmds).map(async ([key, val]) => { - const resource = componentResourceMapping[key] - if (!resource || !resource.plan) { - return - } - - if (resource && resource.config && resource.config.batch) { - const cmdPlan = await resource.plan(context, val) - planForNextStep.push({ resourceName: key, ...cmdPlan }) - } else { - await asyncForEach(cmds[key], async cmd => { - try { - const commandPlan = await resource.plan(context, cmd) - planForNextStep.push({ resourceName: key, ...commandPlan }) - } catch (e) { - console.log(e) - } - }) - } - }) - - await Promise.all(commandPlans) - console.log('full operation', JSON.stringify(plan, null, 2)) - console.log('step plan', JSON.stringify(planForNextStep, null, 2)) - emitOperation(`progress`, plan, planForNextStep) }) @@ -101,11 +52,9 @@ const readPackage = async () => { return JSON.parse(contents) } -const emitOperation = (state = `progress`, data, plan = []) => { +const emitOperation = state => { pubsub.publish(`operation`, { - state, - data: JSON.stringify(data), - planForNextStep: JSON.stringify(plan), + state: JSON.stringify(state), }) } @@ -115,60 +64,51 @@ const asyncForEach = async (array, callback) => { } } -const applyStep = async ({ plan, ...step }) => { - const commandsForStep = Object.keys(step).map(async key => { - const resource = componentResourceMapping[key] - if (resource && resource.config && resource.config.batch) { - await resource.create(context, step[key]) - - step[key].map((_, i) => { - step[key][i].state = `complete` +// only one service can run at a time. +let service +const applyPlan = plan => { + // plan.forEach(step => queue.push({ plan, ...step })) + + // queue.on(`drain`, () => { + // emitOperation(`success`, plan) + // }) + const initialState = { + context: { steps: plan, currentStep: 0 }, + value: `init`, + } + emitOperation(initialState) + + // Interpret the machine, and add a listener for whenever a transition occurs. + service = interpret( + recipeMachine.withContext(initialState.context) + ).onTransition(state => { + // Don't emit again unless there's a state change. + console.log(`===onTransition`, { event: state.event, state: state.value }) + if (state.changed) { + console.log(`===state.changed`, { + state: state.value, + currentStep: state.context.currentStep, + }) + emitOperation({ + context: state.context, + lastEvent: state.event, + value: state.value, }) - emitOperation(`progress`, plan) - return } - - // Run serially for now until we optimize the steps in an operation - await asyncForEach(step[key], async (cmd, i) => { - try { - await resource.create(context, cmd) - step[key][i].state = `complete` - emitOperation(`progress`, plan) - } catch (e) { - step[key][i].state = `error` - step[key][i].errorMessage = e.toString() - emitOperation(`progress`, plan) - } - }) }) - await Promise.all(commandsForStep) -} - -const applyPlan = plan => { - plan.forEach(step => queue.push({ plan, ...step })) - - queue.on(`drain`, () => { - emitOperation(`success`, plan) - }) + // Start the service + try { + service.start() + } catch (e) { + console.log(`recipe machine failed to start`, e) + } } -const OperationStateEnumType = new GraphQLEnumType({ - name: `OperationStateEnum`, - values: { - RUNNING: { value: `progress` }, - SUCCESS: { value: `success` }, - ERROR: { value: `error` }, - }, -}) - const OperationType = new GraphQLObjectType({ name: `Operation`, fields: { - state: { type: OperationStateEnumType }, - step: { type: GraphQLInt }, - data: { type: GraphQLString }, - planForNextStep: { type: GraphQLString }, + state: { type: GraphQLString }, }, }) @@ -267,10 +207,13 @@ const rootMutationType = new GraphQLObjectType({ applyPlan(JSON.parse(args.commands)) }, }, - applyOperationStep: { + sendEvent: { type: GraphQLString, - resolve: () => { - queue.resume() + args: { + event: { type: GraphQLString }, + }, + resolve: (_, args) => { + service.send(args.event) }, }, } diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 5a6e3f5b898fb..43f3034e358e8 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -13,6 +13,7 @@ const fileExists = ({ root }, { path: filePath }) => { } const create = async ({ root }, { path: filePath, content }) => { + console.log(`hi File create`) const fullPath = path.join(root, filePath) const { dir } = path.parse(fullPath) @@ -44,6 +45,7 @@ module.exports.destroy = destroy module.exports.plan = async (context, { path: filePath, content }) => { const src = await read(context, { path: filePath, content }) + console.log(`making file plan`) return { currentState: src, newState: content, diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index e362df7f8e8fa..e2d30b24de4ea 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -67,6 +67,8 @@ const getPluginsFromConfig = src => { } const create = async ({ root }, { name }) => { + // TODO make this more robust. + return const configPath = path.join(root, `gatsby-config.js`) const configSrc = await fs.readFile(configPath, `utf8`) diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js index 6281c67e98bfa..541643bbf0b51 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js @@ -3,7 +3,9 @@ const fs = require(`fs-extra`) const mkdirp = require(`mkdirp`) const create = async ({ root }, { theme, path: filePath }) => { + console.log(`hi ShadowFile create 2`, { theme, filePath }) const relativePathInTheme = filePath.replace(theme + `/`, ``) + console.log(`boo`) const fullFilePathToShadow = path.join( root, `node_modules`, @@ -11,6 +13,8 @@ const create = async ({ root }, { theme, path: filePath }) => { relativePathInTheme ) + console.log({ relativePathInTheme, fullFilePathToShadow }) + const contents = await fs.readFile(fullFilePathToShadow, `utf8`) const fullPath = path.join(root, filePath) @@ -42,3 +46,11 @@ module.exports.create = create module.exports.update = create module.exports.read = read module.exports.destroy = destroy + +module.exports.plan = (_, { theme, path: filePath }) => { + return { + currentState: [], + newState: [filePath], + describe: `Shadow ${filePath} from the theme ${theme}`, + } +} diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index f0292e7a31e1a..055f7214e0afa 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -1,6 +1,6 @@ const execa = require(`execa`) const _ = require(`lodash`) -const humanizeList = require('humanize-list') +const humanizeList = require(`humanize-list`) const getPackageNames = packages => packages.map(n => n.name) const asyncForEach = async (array, callback) => { @@ -9,8 +9,13 @@ const asyncForEach = async (array, callback) => { } } -const create = async ({ root }, packages) => { - return +const create = async ({ root }, packages) => + new Promise(resolve => { + setTimeout(() => { + resolve() + }, 1000) + }) +/* const types = _.groupBy(packages, c => c.dependencyType) // Run install for each dependency type @@ -39,7 +44,7 @@ const create = async ({ root }, packages) => { }) console.log(stdout) }) -} + */ const read = async (_, { name }) => { const { stdout } = await execa(`yarn`, [`why`, name], { cwd: root }) @@ -72,6 +77,6 @@ module.exports.plan = (_, packages) => { return { currentState: [], newState: [packageNames], - describe: `Install ${humanizeList(packageNames)}` + describe: `Install ${humanizeList(packageNames)}`, } } diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js new file mode 100644 index 0000000000000..fac8fcb490456 --- /dev/null +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -0,0 +1,115 @@ +const { Machine, assign } = require(`xstate`) + +const createPlan = require(`./create-plan`) +const applyPlan = require(`./apply-plan`) + +const recipeMachine = Machine( + { + id: `recipe`, + initial: `init`, + context: { + currentStep: 0, + steps: [], + plan: [], + }, + states: { + init: { + on: { + CONTINUE: `creatingPlan`, + }, + }, + creatingPlan: { + invoke: { + id: `createPlan`, + src: (context, event) => { + console.log(`invoking createPlan promise`, { context, event }) + return createPlan(context) + }, + onDone: { + target: `present plan`, + actions: assign({ plan: (context, event) => event.data }), + }, + onError: { + target: `failure`, + actions: assign({ error: (context, event) => event.data }), + }, + }, + }, + failure: { + "": `done`, + }, + "present plan": { + entry: [`incrementStep`], + on: { + CONTINUE: `applyingPlan`, + }, + }, + applyPlan: { + // invoke apply plan machine which sends back state updates for resources + }, + applyingPlan: { + invoke: { + id: `applyPlan`, + src: async (context, event) => { + console.log(`invoking applyingPlan`, { context }) + + if (context.plan.length == 0) { + return + } + + await Promise.all( + context.plan.map(resourcePlan => applyPlan(resourcePlan)) + ) + }, + onDone: `hasAnotherStep`, + onError: { + target: `failure`, + actions: assign({ error: (context, event) => event.data }), + }, + }, + }, + hasAnotherStep: { + on: { + "": [ + { + target: `creatingPlan`, + // The 'searchValid' guard implementation details are + // specified in the machine config + cond: `hasNextStep`, + }, + { + target: `done`, + // The 'searchValid' guard implementation details are + // specified in the machine config + cond: `atLastStep`, + }, + ], + }, + }, + done: { + type: `final`, + }, + }, + }, + { + actions: { + incrementStep: assign((context, event) => { + return { + currentStep: context.currentStep + 1, + } + }), + }, + guards: { + hasNextStep: (context, event) => { + console.log(`GUARDS:::::hasNextStep`, context, event) + return context.currentStep + 1 < context.steps.length + }, + atLastStep: (context, event) => { + console.log(`GUARDS:::::atLastStep`) + return context.currentStep + 1 === context.steps.length + }, + }, + } +) + +module.exports = recipeMachine diff --git a/packages/gatsby/src/recipes/resources.js b/packages/gatsby/src/recipes/resources.js new file mode 100644 index 0000000000000..2e98c4693af65 --- /dev/null +++ b/packages/gatsby/src/recipes/resources.js @@ -0,0 +1,26 @@ +const fileResource = require(`./providers/fs/file`) +const gatsbyPluginResource = require(`./providers/gatsby/plugin`) +const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) +const npmPackageResource = require(`./providers/npm/package`) +const npmPackageScriptResource = require(`./providers/npm/script`) +const npmPackageJsonResource = require(`./providers/npm/package-json`) + +const configResource = { + create: () => {}, + read: () => {}, + update: () => {}, + destroy: () => {}, + plan: () => {}, +} + +const componentResourceMapping = { + File: fileResource, + GatsbyPlugin: gatsbyPluginResource, + ShadowFile: gatsbyShadowFileResource, + Config: configResource, + NPMPackage: npmPackageResource, + NPMScript: npmPackageScriptResource, + NPMPackageJson: npmPackageJsonResource, +} + +module.exports = componentResourceMapping From 587c0ab09c26b6f72a13d888ed297078824b0db1 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 3 Apr 2020 22:40:19 -0700 Subject: [PATCH 027/128] Update TODOs --- packages/gatsby/src/recipes/providers/npm/script.js | 8 ++++++++ packages/gatsby/src/recipes/todo.md | 8 ++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index 41bf282de362f..a58c0ee68f13b 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -41,6 +41,14 @@ const destroy = async ({ root }, { name }) => { await writePackageJson(root, pkg) } +module.exports.plan = async context => { + return { + currentState: ``, + newState: ``, + describe: `do stuff`, + } +} + module.exports.create = create module.exports.update = create module.exports.read = read diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 8e3a18069e1b5..208109df42b54 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -15,18 +15,22 @@ - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Move to more random port -## Friday (alpha) +## alpha - [x] Handle `dev` in NPMPackage - [ ] Make `dependencyType` in NPMPackage an enum - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions -- [ ] Step by step design +- [x] Step by step design - [ ] Select input supported recipes - [ ] Make port selection dynamic - [x] Use `fs-extra` - [x] Handle object style plugins - [x] Improve gatsby-config test - [ ] use yarn/npm based on the user config +- [x] convert to xstate +- [ ] reasonably test resources +- [ ] add Joi for validating resource objects +- [ ] handle error states ## Near-ish future From 23d483e0c59c79318e53acf7cf44a6b7c81e7eeb Mon Sep 17 00:00:00 2001 From: John Otander Date: Sat, 4 Apr 2020 08:14:00 -0600 Subject: [PATCH 028/128] Improve parsing to handle basic template strings --- packages/gatsby/package.json | 6 + packages/gatsby/src/recipes/cli.js | 215 +------- packages/gatsby/src/recipes/graphql.js | 25 +- packages/gatsby/src/recipes/jsx-to-json.js | 131 +++++ packages/gatsby/src/recipes/parser.js | 3 +- packages/gatsby/src/recipes/parser.test.js | 131 +++++ .../src/recipes/react-standard-props.js | 489 ++++++++++++++++++ packages/gatsby/src/recipes/todo.md | 1 + 8 files changed, 776 insertions(+), 225 deletions(-) create mode 100644 packages/gatsby/src/recipes/jsx-to-json.js create mode 100644 packages/gatsby/src/recipes/parser.test.js create mode 100644 packages/gatsby/src/recipes/react-standard-props.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index d996307b9ee18..0525cfd0b6330 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -26,6 +26,8 @@ "@reach/router": "^1.3.3", "@typescript-eslint/eslint-plugin": "^2.24.0", "@typescript-eslint/parser": "^2.24.0", + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", "address": "1.1.2", "autoprefixer": "^9.7.4", "axios": "^0.19.2", @@ -89,12 +91,14 @@ "graphql-playground-middleware-express": "^1.7.12", "graphql-subscriptions": "^1.1.0", "hasha": "^5.2.0", + "html-tag-names": "^1.1.5", "humanize-list": "^1.0.1", "import-jsx": "^4.0.0", "ink-link": "^1.0.0", "invariant": "^2.2.4", "is-relative": "^1.0.0", "is-relative-url": "^3.0.0", + "is-string": "^1.0.5", "is-wsl": "^2.1.1", "jest-worker": "^24.9.0", "json-loader": "^0.5.7", @@ -142,7 +146,9 @@ "stack-trace": "^0.0.10", "string-similarity": "^1.2.2", "style-loader": "^0.23.1", + "style-to-object": "^0.3.0", "subscriptions-transport-ws": "^0.9.16", + "svg-tag-names": "^2.0.1", "terser-webpack-plugin": "^1.4.3", "true-case-path": "^2.2.1", "type-of": "^2.0.1", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index b0a7d3c9ec444..309df33d90625 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -137,14 +137,24 @@ module.exports = ({ recipe, projectRoot }) => { ], }) - const { commands: allCommands, stepsAsMdx: stepsAsMDX } = parser(recipeSrc) + let parsed = {} + try { + parsed = parser(recipeSrc) + } catch (e) { + if (process.env.DEBUG) { + console.log(e) + } + console.log('Unable to parse ', recipe) + process.exit() + } + + const { commands: allCommands, stepsAsMdx: stepsAsMDX } = parsed const Div = props => ( ) const RecipeInterpreter = ({ commands }) => { - const [currentStep, setCurrentStep] = useState(0) const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() const [subscriptionResponse] = useSubscription( @@ -238,207 +248,6 @@ module.exports = ({ recipe, projectRoot }) => { } } - const Config = ({ commands }) => { - const cmd = commands[0] // Config should only be called once. - - const verb = cmd.state !== `complete` ? `Setting` : `Set` - return ( -
- - - - - {verb} up plan for {cmd.name} - - -
- ) - } - - const NPMPackage = ({ commands }) => { - const incomplete = commands.some(c => c.state !== `complete`) - const names = commands.map(c => c.name) - - if (incomplete) { - return ( -
- Installing packages - {commands.map(cmd => ( -
- - - - - {cmd.name} - -
- ))} -
- ) - } - - return ( -
- - - - Installed {humanizeList(names)} - -
- ) - } - - const NPMScript = ({ commands }) => { - const incomplete = commands.some(c => c.state !== `complete`) - const names = commands.map(c => c.name) - - if (incomplete) { - return ( -
- Adding scripts - {commands.map(cmd => ( -
- - - - - {cmd.name} - -
- ))} -
- ) - } - - return ( -
- - - - Added scripts for {humanizeList(names)} - -
- ) - } - - const GatsbyPlugin = ({ commands }) => { - const incomplete = commands.some(c => c.state !== `complete`) - const names = commands.map(c => c.name) - - if (incomplete) { - return ( -
- Configuring plugins - {commands.map(cmd => ( -
- - - - - {cmd.name} - -
- ))} -
- ) - } - - return ( -
- - - - Configured {humanizeList(names)} - -
- ) - } - - const ShadowFile = ({ commands }) => { - const incomplete = commands.some(c => c.state !== `complete`) - const paths = commands.map(c => c.path) - - if (incomplete) { - return ( -
- Shadowing files - {commands.map(cmd => ( -
- - - - - {cmd.path} - -
- ))} -
- ) - } - - return ( -
- - - - Shadowed {humanizeList(paths)} - -
- ) - } - - const File = ({ commands }) => { - const incomplete = commands.some(c => c.state !== `complete`) - const paths = commands.map(c => c.path) - - if (incomplete) { - return ( -
- Writing files - {commands.map(cmd => ( -
- - - - - {cmd.path} - -
- ))} -
- ) - } - - return ( -
- - - - Created file {humanizeList(paths)} - -
- ) - } - - const Step = ({ command }) => - Object.entries(command).map(([cmdName, cmds], i) => { - if (cmdName === `Config`) { - return - } else if (cmdName === `NPMPackage`) { - return - } else if (cmdName === `NPMScript`) { - return - } else if (cmdName === `GatsbyPlugin`) { - return - } else if (cmdName === `ShadowFile`) { - return - } else if (cmdName === `File`) { - return - } else { - return {cmdName} - } - }) - const Wrapper = () => ( {` `} diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 465c08e76e879..92b00de02d947 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -5,8 +5,6 @@ const { GraphQLObjectType, GraphQLString, GraphQLList, - GraphQLEnumType, - GraphQLInt, execute, subscribe, } = require(`graphql`) @@ -22,7 +20,6 @@ const { interpret } = require(`xstate`) const recipeMachine = require(`./recipe-machine`) const SITE_ROOT = process.cwd() -const context = { root: SITE_ROOT } const read = promisify(fs.readFile) @@ -35,17 +32,6 @@ let queue = new Queue(async (action, cb) => { }) queue.pause() -queue.on(`task_finish`, async () => { - if (queue.length > 1) { - queue.pause() - } - - const nextId = queue._store._queue[1] - const task = queue._store._tasks[nextId] - const { plan, ...cmds } = task - - emitOperation(`progress`, plan, planForNextStep) -}) const readPackage = async () => { const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) @@ -58,12 +44,6 @@ const emitOperation = state => { }) } -const asyncForEach = async (array, callback) => { - for (let index = 0; index < array.length; index++) { - await callback(array[index], index, array) - } -} - // only one service can run at a time. let service const applyPlan = plan => { @@ -204,7 +184,9 @@ const rootMutationType = new GraphQLObjectType({ commands: { type: GraphQLString }, }, resolve: (_data, args) => { - applyPlan(JSON.parse(args.commands)) + const commands = JSON.parse(args.commands) + console.log('received operation', commands) + applyPlan(commands) }, }, sendEvent: { @@ -213,6 +195,7 @@ const rootMutationType = new GraphQLObjectType({ event: { type: GraphQLString }, }, resolve: (_, args) => { + console.log('event received', args) service.send(args.event) }, }, diff --git a/packages/gatsby/src/recipes/jsx-to-json.js b/packages/gatsby/src/recipes/jsx-to-json.js new file mode 100644 index 0000000000000..0a7e9497937fa --- /dev/null +++ b/packages/gatsby/src/recipes/jsx-to-json.js @@ -0,0 +1,131 @@ +// Adapted from simplified-jsx-to-json by Dennis Morhardt +// Source: https://github.com/gglnx/simplified-jsx-to-json +// License: https://github.com/gglnx/simplified-jsx-to-json/blob/master/LICENSE +const acorn = require('acorn'); +const jsx = require('acorn-jsx'); +const styleToObject = require('style-to-object'); +const htmlTagNames = require('html-tag-names'); +const svgTagNames = require('svg-tag-names'); +const isString = require('is-string'); + +const possibleStandardNames = require('./react-standard-props'); + +const isHtmlOrSvgTag = (tag) => + htmlTagNames.includes(tag) || svgTagNames.includes(tag); + +const getAttributeValue = (expression) => { + // If the expression is null, this is an implicitly "true" prop, such as readOnly + if (expression === null) { + return true; + } + + if (expression.type === 'Literal') { + return expression.value; + } + + if (expression.type === 'JSXExpressionContainer') { + return getAttributeValue(expression.expression); + } + + if (expression.type === 'ArrayExpression') { + return expression.elements.map((element) => getAttributeValue(element)); + } + + if (expression.type === 'TemplateLiteral') { + return expression.quasis[0].value.raw + } + + if (expression.type === 'ObjectExpression') { + const entries = expression.properties + .map((property) => { + const key = getAttributeValue(property.key); + const value = getAttributeValue(property.value); + + if (key === undefined || value === undefined) { + return null; + } + + return { key, value }; + }) + .filter((property) => property) + .reduce((properties, property) => { + return { ...properties, [property.key]: property.value }; + }, {}); + + return entries; + } + + // Unsupported type + throw new SyntaxError(`${expression.type} is not supported`); +}; + +const getNode = (node) => { + if (node.type === 'JSXFragment') { + return ['Fragment', null].concat(node.children.map(getNode)); + } + + if (node.type === 'JSXElement') { + return [ + node.openingElement.name.name, + node.openingElement.attributes + .map((attribute) => { + if (attribute.type === 'JSXAttribute') { + let attributeName = attribute.name.name; + + if (isHtmlOrSvgTag(node.openingElement.name.name.toLowerCase())) { + if (possibleStandardNames[attributeName.toLowerCase()]) { + attributeName = + possibleStandardNames[attributeName.toLowerCase()]; + } + } + + let attributeValue = getAttributeValue(attribute.value); + + if (attributeValue !== undefined) { + if (attributeName === 'style' && isString(attributeValue)) { + attributeValue = styleToObject(attributeValue); + } + + return { + name: attributeName, + value: attributeValue, + }; + } + } + + return null; + }) + .filter((property) => property) + .reduce((properties, property) => { + return { ...properties, [property.name]: property.value }; + }, {}), + ].concat(node.children.map(getNode)); + } + + if (node.type === 'JSXText') { + return node.value; + } + + // Unsupported type + throw new SyntaxError(`${node.type} is not supported`); +}; + +const jsxToJson = (input) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + const parsed = acorn.Parser.extend(jsx({ allowNamespaces: false })).parse( + `${input}`, + ); + + if (parsed.body[0]) { + return parsed.body[0].expression.children + .map(getNode) + .filter((child) => child); + } + + return []; +}; + +module.exports = jsxToJson; diff --git a/packages/gatsby/src/recipes/parser.js b/packages/gatsby/src/recipes/parser.js index de7c948810290..e64d3ad43db12 100644 --- a/packages/gatsby/src/recipes/parser.js +++ b/packages/gatsby/src/recipes/parser.js @@ -2,9 +2,10 @@ const unified = require(`unified`) const remarkMdx = require(`remark-mdx`) const remarkParse = require(`remark-parse`) const remarkStringify = require(`remark-stringify`) -const jsxToJson = require(`simplified-jsx-to-json`) const visit = require(`unist-util-visit`) +const jsxToJson = require(`./jsx-to-json`) + const asRoot = nodes => { return { type: `root`, diff --git a/packages/gatsby/src/recipes/parser.test.js b/packages/gatsby/src/recipes/parser.test.js new file mode 100644 index 0000000000000..fa4993479f624 --- /dev/null +++ b/packages/gatsby/src/recipes/parser.test.js @@ -0,0 +1,131 @@ +const fs = require(`fs-extra`) +const path = require(`path`) + +const parser = require(`./parser`) + +const fixturePath = path.join(__dirname, "prettier-git-hook.mdx") +const fixtureSrc = fs.readFileSync(fixturePath, "utf8") + +test(`returns a set of commands`, () => { + const result = parser(fixtureSrc) + + expect(result.commands).toMatchInlineSnapshot(` + Array [ + Object {}, + Object { + "NPMPackage": Array [ + Object { + "name": "husky", + }, + Object { + "name": "prettier", + }, + Object { + "name": "lint-staged", + }, + ], + }, + Object { + "NPMPackageJson": Array [ + Object { + "name": "husky", + "value": Object { + "hooks": Object { + "pre-commit": "lint-staged", + }, + }, + }, + Object { + "name": "lint-staged", + "value": Object { + "*.{js,md,mdx,json}": Array [ + "prettier --write", + ], + }, + }, + ], + }, + Object { + "File": Array [ + Object { + "content": "{ + \\"semi\\": false, + \\"singleQuote\\": true, + \\"trailingComma\\": \\"none\\" + }", + "path": ".prettierrc", + }, + Object { + "content": ".cache + public + node_modules + ", + "path": ".prettierignore", + }, + ], + }, + Object {}, + ] + `) +}) + +test(`partitions the MDX into steps`, () => { + const result = parser(fixtureSrc) + + expect(result.stepsAsMdx).toMatchInlineSnapshot(` + Array [ + "# Prettier Git Hook + + Make sure all of your code is run through prettier when you commit it to git. + We achieve this by configuring prettier to run on git hooks using husky and + lint-staged. + ", + "Install packages. + + + + + ", + "Implement git hooks for prettier. + + + + ", + "Write prettier config files. + + + + ", + "Prettier, husky, and lint-staged are now installed! You can edit your \`.prettierrc\` + if you'd like to change your prettier configuration. + ", + ] + `) +}) diff --git a/packages/gatsby/src/recipes/react-standard-props.js b/packages/gatsby/src/recipes/react-standard-props.js new file mode 100644 index 0000000000000..8f8efa2d63551 --- /dev/null +++ b/packages/gatsby/src/recipes/react-standard-props.js @@ -0,0 +1,489 @@ +// Source: https://github.com/facebook/react/blob/dbb060d561b83ad901af3e1f60541e6c313cca4f/packages/react-dom/src/shared/possibleStandardNames.js +const possibleStandardNames = { + // HTML + accept: 'accept', + acceptcharset: 'acceptCharset', + 'accept-charset': 'acceptCharset', + accesskey: 'accessKey', + action: 'action', + allowfullscreen: 'allowFullScreen', + alt: 'alt', + as: 'as', + async: 'async', + autocapitalize: 'autoCapitalize', + autocomplete: 'autoComplete', + autocorrect: 'autoCorrect', + autofocus: 'autoFocus', + autoplay: 'autoPlay', + autosave: 'autoSave', + capture: 'capture', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing', + challenge: 'challenge', + charset: 'charSet', + checked: 'checked', + children: 'children', + cite: 'cite', + class: 'className', + classid: 'classID', + classname: 'className', + cols: 'cols', + colspan: 'colSpan', + content: 'content', + contenteditable: 'contentEditable', + contextmenu: 'contextMenu', + controls: 'controls', + controlslist: 'controlsList', + coords: 'coords', + crossorigin: 'crossOrigin', + dangerouslysetinnerhtml: 'dangerouslySetInnerHTML', + data: 'data', + datetime: 'dateTime', + default: 'default', + defaultchecked: 'defaultChecked', + defaultvalue: 'defaultValue', + defer: 'defer', + dir: 'dir', + disabled: 'disabled', + disablepictureinpicture: 'disablePictureInPicture', + download: 'download', + draggable: 'draggable', + enctype: 'encType', + for: 'htmlFor', + form: 'form', + formmethod: 'formMethod', + formaction: 'formAction', + formenctype: 'formEncType', + formnovalidate: 'formNoValidate', + formtarget: 'formTarget', + frameborder: 'frameBorder', + headers: 'headers', + height: 'height', + hidden: 'hidden', + high: 'high', + href: 'href', + hreflang: 'hrefLang', + htmlfor: 'htmlFor', + httpequiv: 'httpEquiv', + 'http-equiv': 'httpEquiv', + icon: 'icon', + id: 'id', + innerhtml: 'innerHTML', + inputmode: 'inputMode', + integrity: 'integrity', + is: 'is', + itemid: 'itemID', + itemprop: 'itemProp', + itemref: 'itemRef', + itemscope: 'itemScope', + itemtype: 'itemType', + keyparams: 'keyParams', + keytype: 'keyType', + kind: 'kind', + label: 'label', + lang: 'lang', + list: 'list', + loop: 'loop', + low: 'low', + manifest: 'manifest', + marginwidth: 'marginWidth', + marginheight: 'marginHeight', + max: 'max', + maxlength: 'maxLength', + media: 'media', + mediagroup: 'mediaGroup', + method: 'method', + min: 'min', + minlength: 'minLength', + multiple: 'multiple', + muted: 'muted', + name: 'name', + nomodule: 'noModule', + nonce: 'nonce', + novalidate: 'noValidate', + open: 'open', + optimum: 'optimum', + pattern: 'pattern', + placeholder: 'placeholder', + playsinline: 'playsInline', + poster: 'poster', + preload: 'preload', + profile: 'profile', + radiogroup: 'radioGroup', + readonly: 'readOnly', + referrerpolicy: 'referrerPolicy', + rel: 'rel', + required: 'required', + reversed: 'reversed', + role: 'role', + rows: 'rows', + rowspan: 'rowSpan', + sandbox: 'sandbox', + scope: 'scope', + scoped: 'scoped', + scrolling: 'scrolling', + seamless: 'seamless', + selected: 'selected', + shape: 'shape', + size: 'size', + sizes: 'sizes', + span: 'span', + spellcheck: 'spellCheck', + src: 'src', + srcdoc: 'srcDoc', + srclang: 'srcLang', + srcset: 'srcSet', + start: 'start', + step: 'step', + style: 'style', + summary: 'summary', + tabindex: 'tabIndex', + target: 'target', + title: 'title', + type: 'type', + usemap: 'useMap', + value: 'value', + width: 'width', + wmode: 'wmode', + wrap: 'wrap', + + // SVG + about: 'about', + accentheight: 'accentHeight', + 'accent-height': 'accentHeight', + accumulate: 'accumulate', + additive: 'additive', + alignmentbaseline: 'alignmentBaseline', + 'alignment-baseline': 'alignmentBaseline', + allowreorder: 'allowReorder', + alphabetic: 'alphabetic', + amplitude: 'amplitude', + arabicform: 'arabicForm', + 'arabic-form': 'arabicForm', + ascent: 'ascent', + attributename: 'attributeName', + attributetype: 'attributeType', + autoreverse: 'autoReverse', + azimuth: 'azimuth', + basefrequency: 'baseFrequency', + baselineshift: 'baselineShift', + 'baseline-shift': 'baselineShift', + baseprofile: 'baseProfile', + bbox: 'bbox', + begin: 'begin', + bias: 'bias', + by: 'by', + calcmode: 'calcMode', + capheight: 'capHeight', + 'cap-height': 'capHeight', + clip: 'clip', + clippath: 'clipPath', + 'clip-path': 'clipPath', + clippathunits: 'clipPathUnits', + cliprule: 'clipRule', + 'clip-rule': 'clipRule', + color: 'color', + colorinterpolation: 'colorInterpolation', + 'color-interpolation': 'colorInterpolation', + colorinterpolationfilters: 'colorInterpolationFilters', + 'color-interpolation-filters': 'colorInterpolationFilters', + colorprofile: 'colorProfile', + 'color-profile': 'colorProfile', + colorrendering: 'colorRendering', + 'color-rendering': 'colorRendering', + contentscripttype: 'contentScriptType', + contentstyletype: 'contentStyleType', + cursor: 'cursor', + cx: 'cx', + cy: 'cy', + d: 'd', + datatype: 'datatype', + decelerate: 'decelerate', + descent: 'descent', + diffuseconstant: 'diffuseConstant', + direction: 'direction', + display: 'display', + divisor: 'divisor', + dominantbaseline: 'dominantBaseline', + 'dominant-baseline': 'dominantBaseline', + dur: 'dur', + dx: 'dx', + dy: 'dy', + edgemode: 'edgeMode', + elevation: 'elevation', + enablebackground: 'enableBackground', + 'enable-background': 'enableBackground', + end: 'end', + exponent: 'exponent', + externalresourcesrequired: 'externalResourcesRequired', + fill: 'fill', + fillopacity: 'fillOpacity', + 'fill-opacity': 'fillOpacity', + fillrule: 'fillRule', + 'fill-rule': 'fillRule', + filter: 'filter', + filterres: 'filterRes', + filterunits: 'filterUnits', + floodopacity: 'floodOpacity', + 'flood-opacity': 'floodOpacity', + floodcolor: 'floodColor', + 'flood-color': 'floodColor', + focusable: 'focusable', + fontfamily: 'fontFamily', + 'font-family': 'fontFamily', + fontsize: 'fontSize', + 'font-size': 'fontSize', + fontsizeadjust: 'fontSizeAdjust', + 'font-size-adjust': 'fontSizeAdjust', + fontstretch: 'fontStretch', + 'font-stretch': 'fontStretch', + fontstyle: 'fontStyle', + 'font-style': 'fontStyle', + fontvariant: 'fontVariant', + 'font-variant': 'fontVariant', + fontweight: 'fontWeight', + 'font-weight': 'fontWeight', + format: 'format', + from: 'from', + fx: 'fx', + fy: 'fy', + g1: 'g1', + g2: 'g2', + glyphname: 'glyphName', + 'glyph-name': 'glyphName', + glyphorientationhorizontal: 'glyphOrientationHorizontal', + 'glyph-orientation-horizontal': 'glyphOrientationHorizontal', + glyphorientationvertical: 'glyphOrientationVertical', + 'glyph-orientation-vertical': 'glyphOrientationVertical', + glyphref: 'glyphRef', + gradienttransform: 'gradientTransform', + gradientunits: 'gradientUnits', + hanging: 'hanging', + horizadvx: 'horizAdvX', + 'horiz-adv-x': 'horizAdvX', + horizoriginx: 'horizOriginX', + 'horiz-origin-x': 'horizOriginX', + ideographic: 'ideographic', + imagerendering: 'imageRendering', + 'image-rendering': 'imageRendering', + in2: 'in2', + in: 'in', + inlist: 'inlist', + intercept: 'intercept', + k1: 'k1', + k2: 'k2', + k3: 'k3', + k4: 'k4', + k: 'k', + kernelmatrix: 'kernelMatrix', + kernelunitlength: 'kernelUnitLength', + kerning: 'kerning', + keypoints: 'keyPoints', + keysplines: 'keySplines', + keytimes: 'keyTimes', + lengthadjust: 'lengthAdjust', + letterspacing: 'letterSpacing', + 'letter-spacing': 'letterSpacing', + lightingcolor: 'lightingColor', + 'lighting-color': 'lightingColor', + limitingconeangle: 'limitingConeAngle', + local: 'local', + markerend: 'markerEnd', + 'marker-end': 'markerEnd', + markerheight: 'markerHeight', + markermid: 'markerMid', + 'marker-mid': 'markerMid', + markerstart: 'markerStart', + 'marker-start': 'markerStart', + markerunits: 'markerUnits', + markerwidth: 'markerWidth', + mask: 'mask', + maskcontentunits: 'maskContentUnits', + maskunits: 'maskUnits', + mathematical: 'mathematical', + mode: 'mode', + numoctaves: 'numOctaves', + offset: 'offset', + opacity: 'opacity', + operator: 'operator', + order: 'order', + orient: 'orient', + orientation: 'orientation', + origin: 'origin', + overflow: 'overflow', + overlineposition: 'overlinePosition', + 'overline-position': 'overlinePosition', + overlinethickness: 'overlineThickness', + 'overline-thickness': 'overlineThickness', + paintorder: 'paintOrder', + 'paint-order': 'paintOrder', + panose1: 'panose1', + 'panose-1': 'panose1', + pathlength: 'pathLength', + patterncontentunits: 'patternContentUnits', + patterntransform: 'patternTransform', + patternunits: 'patternUnits', + pointerevents: 'pointerEvents', + 'pointer-events': 'pointerEvents', + points: 'points', + pointsatx: 'pointsAtX', + pointsaty: 'pointsAtY', + pointsatz: 'pointsAtZ', + prefix: 'prefix', + preservealpha: 'preserveAlpha', + preserveaspectratio: 'preserveAspectRatio', + primitiveunits: 'primitiveUnits', + property: 'property', + r: 'r', + radius: 'radius', + refx: 'refX', + refy: 'refY', + renderingintent: 'renderingIntent', + 'rendering-intent': 'renderingIntent', + repeatcount: 'repeatCount', + repeatdur: 'repeatDur', + requiredextensions: 'requiredExtensions', + requiredfeatures: 'requiredFeatures', + resource: 'resource', + restart: 'restart', + result: 'result', + results: 'results', + rotate: 'rotate', + rx: 'rx', + ry: 'ry', + scale: 'scale', + security: 'security', + seed: 'seed', + shaperendering: 'shapeRendering', + 'shape-rendering': 'shapeRendering', + slope: 'slope', + spacing: 'spacing', + specularconstant: 'specularConstant', + specularexponent: 'specularExponent', + speed: 'speed', + spreadmethod: 'spreadMethod', + startoffset: 'startOffset', + stddeviation: 'stdDeviation', + stemh: 'stemh', + stemv: 'stemv', + stitchtiles: 'stitchTiles', + stopcolor: 'stopColor', + 'stop-color': 'stopColor', + stopopacity: 'stopOpacity', + 'stop-opacity': 'stopOpacity', + strikethroughposition: 'strikethroughPosition', + 'strikethrough-position': 'strikethroughPosition', + strikethroughthickness: 'strikethroughThickness', + 'strikethrough-thickness': 'strikethroughThickness', + string: 'string', + stroke: 'stroke', + strokedasharray: 'strokeDasharray', + 'stroke-dasharray': 'strokeDasharray', + strokedashoffset: 'strokeDashoffset', + 'stroke-dashoffset': 'strokeDashoffset', + strokelinecap: 'strokeLinecap', + 'stroke-linecap': 'strokeLinecap', + strokelinejoin: 'strokeLinejoin', + 'stroke-linejoin': 'strokeLinejoin', + strokemiterlimit: 'strokeMiterlimit', + 'stroke-miterlimit': 'strokeMiterlimit', + strokewidth: 'strokeWidth', + 'stroke-width': 'strokeWidth', + strokeopacity: 'strokeOpacity', + 'stroke-opacity': 'strokeOpacity', + suppresscontenteditablewarning: 'suppressContentEditableWarning', + suppresshydrationwarning: 'suppressHydrationWarning', + surfacescale: 'surfaceScale', + systemlanguage: 'systemLanguage', + tablevalues: 'tableValues', + targetx: 'targetX', + targety: 'targetY', + textanchor: 'textAnchor', + 'text-anchor': 'textAnchor', + textdecoration: 'textDecoration', + 'text-decoration': 'textDecoration', + textlength: 'textLength', + textrendering: 'textRendering', + 'text-rendering': 'textRendering', + to: 'to', + transform: 'transform', + typeof: 'typeof', + u1: 'u1', + u2: 'u2', + underlineposition: 'underlinePosition', + 'underline-position': 'underlinePosition', + underlinethickness: 'underlineThickness', + 'underline-thickness': 'underlineThickness', + unicode: 'unicode', + unicodebidi: 'unicodeBidi', + 'unicode-bidi': 'unicodeBidi', + unicoderange: 'unicodeRange', + 'unicode-range': 'unicodeRange', + unitsperem: 'unitsPerEm', + 'units-per-em': 'unitsPerEm', + unselectable: 'unselectable', + valphabetic: 'vAlphabetic', + 'v-alphabetic': 'vAlphabetic', + values: 'values', + vectoreffect: 'vectorEffect', + 'vector-effect': 'vectorEffect', + version: 'version', + vertadvy: 'vertAdvY', + 'vert-adv-y': 'vertAdvY', + vertoriginx: 'vertOriginX', + 'vert-origin-x': 'vertOriginX', + vertoriginy: 'vertOriginY', + 'vert-origin-y': 'vertOriginY', + vhanging: 'vHanging', + 'v-hanging': 'vHanging', + videographic: 'vIdeographic', + 'v-ideographic': 'vIdeographic', + viewbox: 'viewBox', + viewtarget: 'viewTarget', + visibility: 'visibility', + vmathematical: 'vMathematical', + 'v-mathematical': 'vMathematical', + vocab: 'vocab', + widths: 'widths', + wordspacing: 'wordSpacing', + 'word-spacing': 'wordSpacing', + writingmode: 'writingMode', + 'writing-mode': 'writingMode', + x1: 'x1', + x2: 'x2', + x: 'x', + xchannelselector: 'xChannelSelector', + xheight: 'xHeight', + 'x-height': 'xHeight', + xlinkactuate: 'xlinkActuate', + 'xlink:actuate': 'xlinkActuate', + xlinkarcrole: 'xlinkArcrole', + 'xlink:arcrole': 'xlinkArcrole', + xlinkhref: 'xlinkHref', + 'xlink:href': 'xlinkHref', + xlinkrole: 'xlinkRole', + 'xlink:role': 'xlinkRole', + xlinkshow: 'xlinkShow', + 'xlink:show': 'xlinkShow', + xlinktitle: 'xlinkTitle', + 'xlink:title': 'xlinkTitle', + xlinktype: 'xlinkType', + 'xlink:type': 'xlinkType', + xmlbase: 'xmlBase', + 'xml:base': 'xmlBase', + xmllang: 'xmlLang', + 'xml:lang': 'xmlLang', + xmlns: 'xmlns', + 'xml:space': 'xmlSpace', + xmlnsxlink: 'xmlnsXlink', + 'xmlns:xlink': 'xmlnsXlink', + xmlspace: 'xmlSpace', + y1: 'y1', + y2: 'y2', + y: 'y', + ychannelselector: 'yChannelSelector', + z: 'z', + zoomandpan: 'zoomAndPan', +}; + +module.exports = possibleStandardNames; diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 208109df42b54..70e26dc3f5b89 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -31,6 +31,7 @@ - [ ] reasonably test resources - [ ] add Joi for validating resource objects - [ ] handle error states +- [x] handle template strings in JSX parser ## Near-ish future From 905b7da22aa75f72fec9f21de35f34dd754afb91 Mon Sep 17 00:00:00 2001 From: John Otander Date: Sat, 4 Apr 2020 08:16:53 -0600 Subject: [PATCH 029/128] Improve parsing to handle basic template strings --- packages/gatsby/src/recipes/cli.js | 2 +- packages/gatsby/src/recipes/graphql.js | 15 +- packages/gatsby/src/recipes/jsx-to-json.js | 118 +-- packages/gatsby/src/recipes/parser.test.js | 4 +- .../src/recipes/react-standard-props.js | 966 +++++++++--------- 5 files changed, 549 insertions(+), 556 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 309df33d90625..0874c9ec82175 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -144,7 +144,7 @@ module.exports = ({ recipe, projectRoot }) => { if (process.env.DEBUG) { console.log(e) } - console.log('Unable to parse ', recipe) + console.log(`Unable to parse `, recipe) process.exit() } diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 92b00de02d947..c662ba6b9b86e 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -14,10 +14,10 @@ const { createServer } = require(`http`) const fs = require(`fs`) const path = require(`path`) const { promisify } = require(`util`) -const Queue = require(`better-queue`) const { interpret } = require(`xstate`) const recipeMachine = require(`./recipe-machine`) +const gatsbyPluginResource = require('./providers/gatsby/plugin') const SITE_ROOT = process.cwd() @@ -26,13 +26,6 @@ const read = promisify(fs.readFile) const pubsub = new PubSub() const PORT = 4000 -let queue = new Queue(async (action, cb) => { - await applyStep(action) - cb() -}) - -queue.pause() - const readPackage = async () => { const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) return JSON.parse(contents) @@ -164,7 +157,7 @@ const rootQueryType = new GraphQLObjectType({ allGatsbyConfigPlugin: { type: new GraphQLList(GatsbyConfigPluginType), resolve: async () => { - const plugins = gatsbyPluginResource.read({ root }) + const plugins = gatsbyPluginResource.read({ root: SITE_ROOT }) return plugins.map(async name => { return { name } }) @@ -185,7 +178,7 @@ const rootMutationType = new GraphQLObjectType({ }, resolve: (_data, args) => { const commands = JSON.parse(args.commands) - console.log('received operation', commands) + console.log(`received operation`, commands) applyPlan(commands) }, }, @@ -195,7 +188,7 @@ const rootMutationType = new GraphQLObjectType({ event: { type: GraphQLString }, }, resolve: (_, args) => { - console.log('event received', args) + console.log(`event received`, args) service.send(args.event) }, }, diff --git a/packages/gatsby/src/recipes/jsx-to-json.js b/packages/gatsby/src/recipes/jsx-to-json.js index 0a7e9497937fa..094f2a1777b7b 100644 --- a/packages/gatsby/src/recipes/jsx-to-json.js +++ b/packages/gatsby/src/recipes/jsx-to-json.js @@ -1,131 +1,131 @@ // Adapted from simplified-jsx-to-json by Dennis Morhardt // Source: https://github.com/gglnx/simplified-jsx-to-json // License: https://github.com/gglnx/simplified-jsx-to-json/blob/master/LICENSE -const acorn = require('acorn'); -const jsx = require('acorn-jsx'); -const styleToObject = require('style-to-object'); -const htmlTagNames = require('html-tag-names'); -const svgTagNames = require('svg-tag-names'); -const isString = require('is-string'); +const acorn = require(`acorn`) +const jsx = require(`acorn-jsx`) +const styleToObject = require(`style-to-object`) +const htmlTagNames = require(`html-tag-names`) +const svgTagNames = require(`svg-tag-names`) +const isString = require(`is-string`) -const possibleStandardNames = require('./react-standard-props'); +const possibleStandardNames = require(`./react-standard-props`) -const isHtmlOrSvgTag = (tag) => - htmlTagNames.includes(tag) || svgTagNames.includes(tag); +const isHtmlOrSvgTag = tag => + htmlTagNames.includes(tag) || svgTagNames.includes(tag) -const getAttributeValue = (expression) => { +const getAttributeValue = expression => { // If the expression is null, this is an implicitly "true" prop, such as readOnly if (expression === null) { - return true; + return true } - if (expression.type === 'Literal') { - return expression.value; + if (expression.type === `Literal`) { + return expression.value } - if (expression.type === 'JSXExpressionContainer') { - return getAttributeValue(expression.expression); + if (expression.type === `JSXExpressionContainer`) { + return getAttributeValue(expression.expression) } - if (expression.type === 'ArrayExpression') { - return expression.elements.map((element) => getAttributeValue(element)); + if (expression.type === `ArrayExpression`) { + return expression.elements.map(element => getAttributeValue(element)) } - if (expression.type === 'TemplateLiteral') { + if (expression.type === `TemplateLiteral`) { return expression.quasis[0].value.raw } - if (expression.type === 'ObjectExpression') { + if (expression.type === `ObjectExpression`) { const entries = expression.properties - .map((property) => { - const key = getAttributeValue(property.key); - const value = getAttributeValue(property.value); + .map(property => { + const key = getAttributeValue(property.key) + const value = getAttributeValue(property.value) if (key === undefined || value === undefined) { - return null; + return null } - return { key, value }; + return { key, value } }) - .filter((property) => property) + .filter(property => property) .reduce((properties, property) => { - return { ...properties, [property.key]: property.value }; - }, {}); + return { ...properties, [property.key]: property.value } + }, {}) - return entries; + return entries } // Unsupported type - throw new SyntaxError(`${expression.type} is not supported`); -}; + throw new SyntaxError(`${expression.type} is not supported`) +} -const getNode = (node) => { - if (node.type === 'JSXFragment') { - return ['Fragment', null].concat(node.children.map(getNode)); +const getNode = node => { + if (node.type === `JSXFragment`) { + return [`Fragment`, null].concat(node.children.map(getNode)) } - if (node.type === 'JSXElement') { + if (node.type === `JSXElement`) { return [ node.openingElement.name.name, node.openingElement.attributes - .map((attribute) => { - if (attribute.type === 'JSXAttribute') { - let attributeName = attribute.name.name; + .map(attribute => { + if (attribute.type === `JSXAttribute`) { + let attributeName = attribute.name.name if (isHtmlOrSvgTag(node.openingElement.name.name.toLowerCase())) { if (possibleStandardNames[attributeName.toLowerCase()]) { attributeName = - possibleStandardNames[attributeName.toLowerCase()]; + possibleStandardNames[attributeName.toLowerCase()] } } - let attributeValue = getAttributeValue(attribute.value); + let attributeValue = getAttributeValue(attribute.value) if (attributeValue !== undefined) { - if (attributeName === 'style' && isString(attributeValue)) { - attributeValue = styleToObject(attributeValue); + if (attributeName === `style` && isString(attributeValue)) { + attributeValue = styleToObject(attributeValue) } return { name: attributeName, value: attributeValue, - }; + } } } - return null; + return null }) - .filter((property) => property) + .filter(property => property) .reduce((properties, property) => { - return { ...properties, [property.name]: property.value }; + return { ...properties, [property.name]: property.value } }, {}), - ].concat(node.children.map(getNode)); + ].concat(node.children.map(getNode)) } - if (node.type === 'JSXText') { - return node.value; + if (node.type === `JSXText`) { + return node.value } // Unsupported type - throw new SyntaxError(`${node.type} is not supported`); -}; + throw new SyntaxError(`${node.type} is not supported`) +} -const jsxToJson = (input) => { - if (typeof input !== 'string') { - throw new TypeError('Expected a string'); +const jsxToJson = input => { + if (typeof input !== `string`) { + throw new TypeError(`Expected a string`) } const parsed = acorn.Parser.extend(jsx({ allowNamespaces: false })).parse( - `${input}`, - ); + `${input}` + ) if (parsed.body[0]) { return parsed.body[0].expression.children .map(getNode) - .filter((child) => child); + .filter(child => child) } - return []; -}; + return [] +} -module.exports = jsxToJson; +module.exports = jsxToJson diff --git a/packages/gatsby/src/recipes/parser.test.js b/packages/gatsby/src/recipes/parser.test.js index fa4993479f624..1a159126570fe 100644 --- a/packages/gatsby/src/recipes/parser.test.js +++ b/packages/gatsby/src/recipes/parser.test.js @@ -3,8 +3,8 @@ const path = require(`path`) const parser = require(`./parser`) -const fixturePath = path.join(__dirname, "prettier-git-hook.mdx") -const fixtureSrc = fs.readFileSync(fixturePath, "utf8") +const fixturePath = path.join(__dirname, `prettier-git-hook.mdx`) +const fixtureSrc = fs.readFileSync(fixturePath, `utf8`) test(`returns a set of commands`, () => { const result = parser(fixtureSrc) diff --git a/packages/gatsby/src/recipes/react-standard-props.js b/packages/gatsby/src/recipes/react-standard-props.js index 8f8efa2d63551..bf3029873f30e 100644 --- a/packages/gatsby/src/recipes/react-standard-props.js +++ b/packages/gatsby/src/recipes/react-standard-props.js @@ -1,489 +1,489 @@ // Source: https://github.com/facebook/react/blob/dbb060d561b83ad901af3e1f60541e6c313cca4f/packages/react-dom/src/shared/possibleStandardNames.js const possibleStandardNames = { // HTML - accept: 'accept', - acceptcharset: 'acceptCharset', - 'accept-charset': 'acceptCharset', - accesskey: 'accessKey', - action: 'action', - allowfullscreen: 'allowFullScreen', - alt: 'alt', - as: 'as', - async: 'async', - autocapitalize: 'autoCapitalize', - autocomplete: 'autoComplete', - autocorrect: 'autoCorrect', - autofocus: 'autoFocus', - autoplay: 'autoPlay', - autosave: 'autoSave', - capture: 'capture', - cellpadding: 'cellPadding', - cellspacing: 'cellSpacing', - challenge: 'challenge', - charset: 'charSet', - checked: 'checked', - children: 'children', - cite: 'cite', - class: 'className', - classid: 'classID', - classname: 'className', - cols: 'cols', - colspan: 'colSpan', - content: 'content', - contenteditable: 'contentEditable', - contextmenu: 'contextMenu', - controls: 'controls', - controlslist: 'controlsList', - coords: 'coords', - crossorigin: 'crossOrigin', - dangerouslysetinnerhtml: 'dangerouslySetInnerHTML', - data: 'data', - datetime: 'dateTime', - default: 'default', - defaultchecked: 'defaultChecked', - defaultvalue: 'defaultValue', - defer: 'defer', - dir: 'dir', - disabled: 'disabled', - disablepictureinpicture: 'disablePictureInPicture', - download: 'download', - draggable: 'draggable', - enctype: 'encType', - for: 'htmlFor', - form: 'form', - formmethod: 'formMethod', - formaction: 'formAction', - formenctype: 'formEncType', - formnovalidate: 'formNoValidate', - formtarget: 'formTarget', - frameborder: 'frameBorder', - headers: 'headers', - height: 'height', - hidden: 'hidden', - high: 'high', - href: 'href', - hreflang: 'hrefLang', - htmlfor: 'htmlFor', - httpequiv: 'httpEquiv', - 'http-equiv': 'httpEquiv', - icon: 'icon', - id: 'id', - innerhtml: 'innerHTML', - inputmode: 'inputMode', - integrity: 'integrity', - is: 'is', - itemid: 'itemID', - itemprop: 'itemProp', - itemref: 'itemRef', - itemscope: 'itemScope', - itemtype: 'itemType', - keyparams: 'keyParams', - keytype: 'keyType', - kind: 'kind', - label: 'label', - lang: 'lang', - list: 'list', - loop: 'loop', - low: 'low', - manifest: 'manifest', - marginwidth: 'marginWidth', - marginheight: 'marginHeight', - max: 'max', - maxlength: 'maxLength', - media: 'media', - mediagroup: 'mediaGroup', - method: 'method', - min: 'min', - minlength: 'minLength', - multiple: 'multiple', - muted: 'muted', - name: 'name', - nomodule: 'noModule', - nonce: 'nonce', - novalidate: 'noValidate', - open: 'open', - optimum: 'optimum', - pattern: 'pattern', - placeholder: 'placeholder', - playsinline: 'playsInline', - poster: 'poster', - preload: 'preload', - profile: 'profile', - radiogroup: 'radioGroup', - readonly: 'readOnly', - referrerpolicy: 'referrerPolicy', - rel: 'rel', - required: 'required', - reversed: 'reversed', - role: 'role', - rows: 'rows', - rowspan: 'rowSpan', - sandbox: 'sandbox', - scope: 'scope', - scoped: 'scoped', - scrolling: 'scrolling', - seamless: 'seamless', - selected: 'selected', - shape: 'shape', - size: 'size', - sizes: 'sizes', - span: 'span', - spellcheck: 'spellCheck', - src: 'src', - srcdoc: 'srcDoc', - srclang: 'srcLang', - srcset: 'srcSet', - start: 'start', - step: 'step', - style: 'style', - summary: 'summary', - tabindex: 'tabIndex', - target: 'target', - title: 'title', - type: 'type', - usemap: 'useMap', - value: 'value', - width: 'width', - wmode: 'wmode', - wrap: 'wrap', + accept: `accept`, + acceptcharset: `acceptCharset`, + "accept-charset": `acceptCharset`, + accesskey: `accessKey`, + action: `action`, + allowfullscreen: `allowFullScreen`, + alt: `alt`, + as: `as`, + async: `async`, + autocapitalize: `autoCapitalize`, + autocomplete: `autoComplete`, + autocorrect: `autoCorrect`, + autofocus: `autoFocus`, + autoplay: `autoPlay`, + autosave: `autoSave`, + capture: `capture`, + cellpadding: `cellPadding`, + cellspacing: `cellSpacing`, + challenge: `challenge`, + charset: `charSet`, + checked: `checked`, + children: `children`, + cite: `cite`, + class: `className`, + classid: `classID`, + classname: `className`, + cols: `cols`, + colspan: `colSpan`, + content: `content`, + contenteditable: `contentEditable`, + contextmenu: `contextMenu`, + controls: `controls`, + controlslist: `controlsList`, + coords: `coords`, + crossorigin: `crossOrigin`, + dangerouslysetinnerhtml: `dangerouslySetInnerHTML`, + data: `data`, + datetime: `dateTime`, + default: `default`, + defaultchecked: `defaultChecked`, + defaultvalue: `defaultValue`, + defer: `defer`, + dir: `dir`, + disabled: `disabled`, + disablepictureinpicture: `disablePictureInPicture`, + download: `download`, + draggable: `draggable`, + enctype: `encType`, + for: `htmlFor`, + form: `form`, + formmethod: `formMethod`, + formaction: `formAction`, + formenctype: `formEncType`, + formnovalidate: `formNoValidate`, + formtarget: `formTarget`, + frameborder: `frameBorder`, + headers: `headers`, + height: `height`, + hidden: `hidden`, + high: `high`, + href: `href`, + hreflang: `hrefLang`, + htmlfor: `htmlFor`, + httpequiv: `httpEquiv`, + "http-equiv": `httpEquiv`, + icon: `icon`, + id: `id`, + innerhtml: `innerHTML`, + inputmode: `inputMode`, + integrity: `integrity`, + is: `is`, + itemid: `itemID`, + itemprop: `itemProp`, + itemref: `itemRef`, + itemscope: `itemScope`, + itemtype: `itemType`, + keyparams: `keyParams`, + keytype: `keyType`, + kind: `kind`, + label: `label`, + lang: `lang`, + list: `list`, + loop: `loop`, + low: `low`, + manifest: `manifest`, + marginwidth: `marginWidth`, + marginheight: `marginHeight`, + max: `max`, + maxlength: `maxLength`, + media: `media`, + mediagroup: `mediaGroup`, + method: `method`, + min: `min`, + minlength: `minLength`, + multiple: `multiple`, + muted: `muted`, + name: `name`, + nomodule: `noModule`, + nonce: `nonce`, + novalidate: `noValidate`, + open: `open`, + optimum: `optimum`, + pattern: `pattern`, + placeholder: `placeholder`, + playsinline: `playsInline`, + poster: `poster`, + preload: `preload`, + profile: `profile`, + radiogroup: `radioGroup`, + readonly: `readOnly`, + referrerpolicy: `referrerPolicy`, + rel: `rel`, + required: `required`, + reversed: `reversed`, + role: `role`, + rows: `rows`, + rowspan: `rowSpan`, + sandbox: `sandbox`, + scope: `scope`, + scoped: `scoped`, + scrolling: `scrolling`, + seamless: `seamless`, + selected: `selected`, + shape: `shape`, + size: `size`, + sizes: `sizes`, + span: `span`, + spellcheck: `spellCheck`, + src: `src`, + srcdoc: `srcDoc`, + srclang: `srcLang`, + srcset: `srcSet`, + start: `start`, + step: `step`, + style: `style`, + summary: `summary`, + tabindex: `tabIndex`, + target: `target`, + title: `title`, + type: `type`, + usemap: `useMap`, + value: `value`, + width: `width`, + wmode: `wmode`, + wrap: `wrap`, // SVG - about: 'about', - accentheight: 'accentHeight', - 'accent-height': 'accentHeight', - accumulate: 'accumulate', - additive: 'additive', - alignmentbaseline: 'alignmentBaseline', - 'alignment-baseline': 'alignmentBaseline', - allowreorder: 'allowReorder', - alphabetic: 'alphabetic', - amplitude: 'amplitude', - arabicform: 'arabicForm', - 'arabic-form': 'arabicForm', - ascent: 'ascent', - attributename: 'attributeName', - attributetype: 'attributeType', - autoreverse: 'autoReverse', - azimuth: 'azimuth', - basefrequency: 'baseFrequency', - baselineshift: 'baselineShift', - 'baseline-shift': 'baselineShift', - baseprofile: 'baseProfile', - bbox: 'bbox', - begin: 'begin', - bias: 'bias', - by: 'by', - calcmode: 'calcMode', - capheight: 'capHeight', - 'cap-height': 'capHeight', - clip: 'clip', - clippath: 'clipPath', - 'clip-path': 'clipPath', - clippathunits: 'clipPathUnits', - cliprule: 'clipRule', - 'clip-rule': 'clipRule', - color: 'color', - colorinterpolation: 'colorInterpolation', - 'color-interpolation': 'colorInterpolation', - colorinterpolationfilters: 'colorInterpolationFilters', - 'color-interpolation-filters': 'colorInterpolationFilters', - colorprofile: 'colorProfile', - 'color-profile': 'colorProfile', - colorrendering: 'colorRendering', - 'color-rendering': 'colorRendering', - contentscripttype: 'contentScriptType', - contentstyletype: 'contentStyleType', - cursor: 'cursor', - cx: 'cx', - cy: 'cy', - d: 'd', - datatype: 'datatype', - decelerate: 'decelerate', - descent: 'descent', - diffuseconstant: 'diffuseConstant', - direction: 'direction', - display: 'display', - divisor: 'divisor', - dominantbaseline: 'dominantBaseline', - 'dominant-baseline': 'dominantBaseline', - dur: 'dur', - dx: 'dx', - dy: 'dy', - edgemode: 'edgeMode', - elevation: 'elevation', - enablebackground: 'enableBackground', - 'enable-background': 'enableBackground', - end: 'end', - exponent: 'exponent', - externalresourcesrequired: 'externalResourcesRequired', - fill: 'fill', - fillopacity: 'fillOpacity', - 'fill-opacity': 'fillOpacity', - fillrule: 'fillRule', - 'fill-rule': 'fillRule', - filter: 'filter', - filterres: 'filterRes', - filterunits: 'filterUnits', - floodopacity: 'floodOpacity', - 'flood-opacity': 'floodOpacity', - floodcolor: 'floodColor', - 'flood-color': 'floodColor', - focusable: 'focusable', - fontfamily: 'fontFamily', - 'font-family': 'fontFamily', - fontsize: 'fontSize', - 'font-size': 'fontSize', - fontsizeadjust: 'fontSizeAdjust', - 'font-size-adjust': 'fontSizeAdjust', - fontstretch: 'fontStretch', - 'font-stretch': 'fontStretch', - fontstyle: 'fontStyle', - 'font-style': 'fontStyle', - fontvariant: 'fontVariant', - 'font-variant': 'fontVariant', - fontweight: 'fontWeight', - 'font-weight': 'fontWeight', - format: 'format', - from: 'from', - fx: 'fx', - fy: 'fy', - g1: 'g1', - g2: 'g2', - glyphname: 'glyphName', - 'glyph-name': 'glyphName', - glyphorientationhorizontal: 'glyphOrientationHorizontal', - 'glyph-orientation-horizontal': 'glyphOrientationHorizontal', - glyphorientationvertical: 'glyphOrientationVertical', - 'glyph-orientation-vertical': 'glyphOrientationVertical', - glyphref: 'glyphRef', - gradienttransform: 'gradientTransform', - gradientunits: 'gradientUnits', - hanging: 'hanging', - horizadvx: 'horizAdvX', - 'horiz-adv-x': 'horizAdvX', - horizoriginx: 'horizOriginX', - 'horiz-origin-x': 'horizOriginX', - ideographic: 'ideographic', - imagerendering: 'imageRendering', - 'image-rendering': 'imageRendering', - in2: 'in2', - in: 'in', - inlist: 'inlist', - intercept: 'intercept', - k1: 'k1', - k2: 'k2', - k3: 'k3', - k4: 'k4', - k: 'k', - kernelmatrix: 'kernelMatrix', - kernelunitlength: 'kernelUnitLength', - kerning: 'kerning', - keypoints: 'keyPoints', - keysplines: 'keySplines', - keytimes: 'keyTimes', - lengthadjust: 'lengthAdjust', - letterspacing: 'letterSpacing', - 'letter-spacing': 'letterSpacing', - lightingcolor: 'lightingColor', - 'lighting-color': 'lightingColor', - limitingconeangle: 'limitingConeAngle', - local: 'local', - markerend: 'markerEnd', - 'marker-end': 'markerEnd', - markerheight: 'markerHeight', - markermid: 'markerMid', - 'marker-mid': 'markerMid', - markerstart: 'markerStart', - 'marker-start': 'markerStart', - markerunits: 'markerUnits', - markerwidth: 'markerWidth', - mask: 'mask', - maskcontentunits: 'maskContentUnits', - maskunits: 'maskUnits', - mathematical: 'mathematical', - mode: 'mode', - numoctaves: 'numOctaves', - offset: 'offset', - opacity: 'opacity', - operator: 'operator', - order: 'order', - orient: 'orient', - orientation: 'orientation', - origin: 'origin', - overflow: 'overflow', - overlineposition: 'overlinePosition', - 'overline-position': 'overlinePosition', - overlinethickness: 'overlineThickness', - 'overline-thickness': 'overlineThickness', - paintorder: 'paintOrder', - 'paint-order': 'paintOrder', - panose1: 'panose1', - 'panose-1': 'panose1', - pathlength: 'pathLength', - patterncontentunits: 'patternContentUnits', - patterntransform: 'patternTransform', - patternunits: 'patternUnits', - pointerevents: 'pointerEvents', - 'pointer-events': 'pointerEvents', - points: 'points', - pointsatx: 'pointsAtX', - pointsaty: 'pointsAtY', - pointsatz: 'pointsAtZ', - prefix: 'prefix', - preservealpha: 'preserveAlpha', - preserveaspectratio: 'preserveAspectRatio', - primitiveunits: 'primitiveUnits', - property: 'property', - r: 'r', - radius: 'radius', - refx: 'refX', - refy: 'refY', - renderingintent: 'renderingIntent', - 'rendering-intent': 'renderingIntent', - repeatcount: 'repeatCount', - repeatdur: 'repeatDur', - requiredextensions: 'requiredExtensions', - requiredfeatures: 'requiredFeatures', - resource: 'resource', - restart: 'restart', - result: 'result', - results: 'results', - rotate: 'rotate', - rx: 'rx', - ry: 'ry', - scale: 'scale', - security: 'security', - seed: 'seed', - shaperendering: 'shapeRendering', - 'shape-rendering': 'shapeRendering', - slope: 'slope', - spacing: 'spacing', - specularconstant: 'specularConstant', - specularexponent: 'specularExponent', - speed: 'speed', - spreadmethod: 'spreadMethod', - startoffset: 'startOffset', - stddeviation: 'stdDeviation', - stemh: 'stemh', - stemv: 'stemv', - stitchtiles: 'stitchTiles', - stopcolor: 'stopColor', - 'stop-color': 'stopColor', - stopopacity: 'stopOpacity', - 'stop-opacity': 'stopOpacity', - strikethroughposition: 'strikethroughPosition', - 'strikethrough-position': 'strikethroughPosition', - strikethroughthickness: 'strikethroughThickness', - 'strikethrough-thickness': 'strikethroughThickness', - string: 'string', - stroke: 'stroke', - strokedasharray: 'strokeDasharray', - 'stroke-dasharray': 'strokeDasharray', - strokedashoffset: 'strokeDashoffset', - 'stroke-dashoffset': 'strokeDashoffset', - strokelinecap: 'strokeLinecap', - 'stroke-linecap': 'strokeLinecap', - strokelinejoin: 'strokeLinejoin', - 'stroke-linejoin': 'strokeLinejoin', - strokemiterlimit: 'strokeMiterlimit', - 'stroke-miterlimit': 'strokeMiterlimit', - strokewidth: 'strokeWidth', - 'stroke-width': 'strokeWidth', - strokeopacity: 'strokeOpacity', - 'stroke-opacity': 'strokeOpacity', - suppresscontenteditablewarning: 'suppressContentEditableWarning', - suppresshydrationwarning: 'suppressHydrationWarning', - surfacescale: 'surfaceScale', - systemlanguage: 'systemLanguage', - tablevalues: 'tableValues', - targetx: 'targetX', - targety: 'targetY', - textanchor: 'textAnchor', - 'text-anchor': 'textAnchor', - textdecoration: 'textDecoration', - 'text-decoration': 'textDecoration', - textlength: 'textLength', - textrendering: 'textRendering', - 'text-rendering': 'textRendering', - to: 'to', - transform: 'transform', - typeof: 'typeof', - u1: 'u1', - u2: 'u2', - underlineposition: 'underlinePosition', - 'underline-position': 'underlinePosition', - underlinethickness: 'underlineThickness', - 'underline-thickness': 'underlineThickness', - unicode: 'unicode', - unicodebidi: 'unicodeBidi', - 'unicode-bidi': 'unicodeBidi', - unicoderange: 'unicodeRange', - 'unicode-range': 'unicodeRange', - unitsperem: 'unitsPerEm', - 'units-per-em': 'unitsPerEm', - unselectable: 'unselectable', - valphabetic: 'vAlphabetic', - 'v-alphabetic': 'vAlphabetic', - values: 'values', - vectoreffect: 'vectorEffect', - 'vector-effect': 'vectorEffect', - version: 'version', - vertadvy: 'vertAdvY', - 'vert-adv-y': 'vertAdvY', - vertoriginx: 'vertOriginX', - 'vert-origin-x': 'vertOriginX', - vertoriginy: 'vertOriginY', - 'vert-origin-y': 'vertOriginY', - vhanging: 'vHanging', - 'v-hanging': 'vHanging', - videographic: 'vIdeographic', - 'v-ideographic': 'vIdeographic', - viewbox: 'viewBox', - viewtarget: 'viewTarget', - visibility: 'visibility', - vmathematical: 'vMathematical', - 'v-mathematical': 'vMathematical', - vocab: 'vocab', - widths: 'widths', - wordspacing: 'wordSpacing', - 'word-spacing': 'wordSpacing', - writingmode: 'writingMode', - 'writing-mode': 'writingMode', - x1: 'x1', - x2: 'x2', - x: 'x', - xchannelselector: 'xChannelSelector', - xheight: 'xHeight', - 'x-height': 'xHeight', - xlinkactuate: 'xlinkActuate', - 'xlink:actuate': 'xlinkActuate', - xlinkarcrole: 'xlinkArcrole', - 'xlink:arcrole': 'xlinkArcrole', - xlinkhref: 'xlinkHref', - 'xlink:href': 'xlinkHref', - xlinkrole: 'xlinkRole', - 'xlink:role': 'xlinkRole', - xlinkshow: 'xlinkShow', - 'xlink:show': 'xlinkShow', - xlinktitle: 'xlinkTitle', - 'xlink:title': 'xlinkTitle', - xlinktype: 'xlinkType', - 'xlink:type': 'xlinkType', - xmlbase: 'xmlBase', - 'xml:base': 'xmlBase', - xmllang: 'xmlLang', - 'xml:lang': 'xmlLang', - xmlns: 'xmlns', - 'xml:space': 'xmlSpace', - xmlnsxlink: 'xmlnsXlink', - 'xmlns:xlink': 'xmlnsXlink', - xmlspace: 'xmlSpace', - y1: 'y1', - y2: 'y2', - y: 'y', - ychannelselector: 'yChannelSelector', - z: 'z', - zoomandpan: 'zoomAndPan', -}; + about: `about`, + accentheight: `accentHeight`, + "accent-height": `accentHeight`, + accumulate: `accumulate`, + additive: `additive`, + alignmentbaseline: `alignmentBaseline`, + "alignment-baseline": `alignmentBaseline`, + allowreorder: `allowReorder`, + alphabetic: `alphabetic`, + amplitude: `amplitude`, + arabicform: `arabicForm`, + "arabic-form": `arabicForm`, + ascent: `ascent`, + attributename: `attributeName`, + attributetype: `attributeType`, + autoreverse: `autoReverse`, + azimuth: `azimuth`, + basefrequency: `baseFrequency`, + baselineshift: `baselineShift`, + "baseline-shift": `baselineShift`, + baseprofile: `baseProfile`, + bbox: `bbox`, + begin: `begin`, + bias: `bias`, + by: `by`, + calcmode: `calcMode`, + capheight: `capHeight`, + "cap-height": `capHeight`, + clip: `clip`, + clippath: `clipPath`, + "clip-path": `clipPath`, + clippathunits: `clipPathUnits`, + cliprule: `clipRule`, + "clip-rule": `clipRule`, + color: `color`, + colorinterpolation: `colorInterpolation`, + "color-interpolation": `colorInterpolation`, + colorinterpolationfilters: `colorInterpolationFilters`, + "color-interpolation-filters": `colorInterpolationFilters`, + colorprofile: `colorProfile`, + "color-profile": `colorProfile`, + colorrendering: `colorRendering`, + "color-rendering": `colorRendering`, + contentscripttype: `contentScriptType`, + contentstyletype: `contentStyleType`, + cursor: `cursor`, + cx: `cx`, + cy: `cy`, + d: `d`, + datatype: `datatype`, + decelerate: `decelerate`, + descent: `descent`, + diffuseconstant: `diffuseConstant`, + direction: `direction`, + display: `display`, + divisor: `divisor`, + dominantbaseline: `dominantBaseline`, + "dominant-baseline": `dominantBaseline`, + dur: `dur`, + dx: `dx`, + dy: `dy`, + edgemode: `edgeMode`, + elevation: `elevation`, + enablebackground: `enableBackground`, + "enable-background": `enableBackground`, + end: `end`, + exponent: `exponent`, + externalresourcesrequired: `externalResourcesRequired`, + fill: `fill`, + fillopacity: `fillOpacity`, + "fill-opacity": `fillOpacity`, + fillrule: `fillRule`, + "fill-rule": `fillRule`, + filter: `filter`, + filterres: `filterRes`, + filterunits: `filterUnits`, + floodopacity: `floodOpacity`, + "flood-opacity": `floodOpacity`, + floodcolor: `floodColor`, + "flood-color": `floodColor`, + focusable: `focusable`, + fontfamily: `fontFamily`, + "font-family": `fontFamily`, + fontsize: `fontSize`, + "font-size": `fontSize`, + fontsizeadjust: `fontSizeAdjust`, + "font-size-adjust": `fontSizeAdjust`, + fontstretch: `fontStretch`, + "font-stretch": `fontStretch`, + fontstyle: `fontStyle`, + "font-style": `fontStyle`, + fontvariant: `fontVariant`, + "font-variant": `fontVariant`, + fontweight: `fontWeight`, + "font-weight": `fontWeight`, + format: `format`, + from: `from`, + fx: `fx`, + fy: `fy`, + g1: `g1`, + g2: `g2`, + glyphname: `glyphName`, + "glyph-name": `glyphName`, + glyphorientationhorizontal: `glyphOrientationHorizontal`, + "glyph-orientation-horizontal": `glyphOrientationHorizontal`, + glyphorientationvertical: `glyphOrientationVertical`, + "glyph-orientation-vertical": `glyphOrientationVertical`, + glyphref: `glyphRef`, + gradienttransform: `gradientTransform`, + gradientunits: `gradientUnits`, + hanging: `hanging`, + horizadvx: `horizAdvX`, + "horiz-adv-x": `horizAdvX`, + horizoriginx: `horizOriginX`, + "horiz-origin-x": `horizOriginX`, + ideographic: `ideographic`, + imagerendering: `imageRendering`, + "image-rendering": `imageRendering`, + in2: `in2`, + in: `in`, + inlist: `inlist`, + intercept: `intercept`, + k1: `k1`, + k2: `k2`, + k3: `k3`, + k4: `k4`, + k: `k`, + kernelmatrix: `kernelMatrix`, + kernelunitlength: `kernelUnitLength`, + kerning: `kerning`, + keypoints: `keyPoints`, + keysplines: `keySplines`, + keytimes: `keyTimes`, + lengthadjust: `lengthAdjust`, + letterspacing: `letterSpacing`, + "letter-spacing": `letterSpacing`, + lightingcolor: `lightingColor`, + "lighting-color": `lightingColor`, + limitingconeangle: `limitingConeAngle`, + local: `local`, + markerend: `markerEnd`, + "marker-end": `markerEnd`, + markerheight: `markerHeight`, + markermid: `markerMid`, + "marker-mid": `markerMid`, + markerstart: `markerStart`, + "marker-start": `markerStart`, + markerunits: `markerUnits`, + markerwidth: `markerWidth`, + mask: `mask`, + maskcontentunits: `maskContentUnits`, + maskunits: `maskUnits`, + mathematical: `mathematical`, + mode: `mode`, + numoctaves: `numOctaves`, + offset: `offset`, + opacity: `opacity`, + operator: `operator`, + order: `order`, + orient: `orient`, + orientation: `orientation`, + origin: `origin`, + overflow: `overflow`, + overlineposition: `overlinePosition`, + "overline-position": `overlinePosition`, + overlinethickness: `overlineThickness`, + "overline-thickness": `overlineThickness`, + paintorder: `paintOrder`, + "paint-order": `paintOrder`, + panose1: `panose1`, + "panose-1": `panose1`, + pathlength: `pathLength`, + patterncontentunits: `patternContentUnits`, + patterntransform: `patternTransform`, + patternunits: `patternUnits`, + pointerevents: `pointerEvents`, + "pointer-events": `pointerEvents`, + points: `points`, + pointsatx: `pointsAtX`, + pointsaty: `pointsAtY`, + pointsatz: `pointsAtZ`, + prefix: `prefix`, + preservealpha: `preserveAlpha`, + preserveaspectratio: `preserveAspectRatio`, + primitiveunits: `primitiveUnits`, + property: `property`, + r: `r`, + radius: `radius`, + refx: `refX`, + refy: `refY`, + renderingintent: `renderingIntent`, + "rendering-intent": `renderingIntent`, + repeatcount: `repeatCount`, + repeatdur: `repeatDur`, + requiredextensions: `requiredExtensions`, + requiredfeatures: `requiredFeatures`, + resource: `resource`, + restart: `restart`, + result: `result`, + results: `results`, + rotate: `rotate`, + rx: `rx`, + ry: `ry`, + scale: `scale`, + security: `security`, + seed: `seed`, + shaperendering: `shapeRendering`, + "shape-rendering": `shapeRendering`, + slope: `slope`, + spacing: `spacing`, + specularconstant: `specularConstant`, + specularexponent: `specularExponent`, + speed: `speed`, + spreadmethod: `spreadMethod`, + startoffset: `startOffset`, + stddeviation: `stdDeviation`, + stemh: `stemh`, + stemv: `stemv`, + stitchtiles: `stitchTiles`, + stopcolor: `stopColor`, + "stop-color": `stopColor`, + stopopacity: `stopOpacity`, + "stop-opacity": `stopOpacity`, + strikethroughposition: `strikethroughPosition`, + "strikethrough-position": `strikethroughPosition`, + strikethroughthickness: `strikethroughThickness`, + "strikethrough-thickness": `strikethroughThickness`, + string: `string`, + stroke: `stroke`, + strokedasharray: `strokeDasharray`, + "stroke-dasharray": `strokeDasharray`, + strokedashoffset: `strokeDashoffset`, + "stroke-dashoffset": `strokeDashoffset`, + strokelinecap: `strokeLinecap`, + "stroke-linecap": `strokeLinecap`, + strokelinejoin: `strokeLinejoin`, + "stroke-linejoin": `strokeLinejoin`, + strokemiterlimit: `strokeMiterlimit`, + "stroke-miterlimit": `strokeMiterlimit`, + strokewidth: `strokeWidth`, + "stroke-width": `strokeWidth`, + strokeopacity: `strokeOpacity`, + "stroke-opacity": `strokeOpacity`, + suppresscontenteditablewarning: `suppressContentEditableWarning`, + suppresshydrationwarning: `suppressHydrationWarning`, + surfacescale: `surfaceScale`, + systemlanguage: `systemLanguage`, + tablevalues: `tableValues`, + targetx: `targetX`, + targety: `targetY`, + textanchor: `textAnchor`, + "text-anchor": `textAnchor`, + textdecoration: `textDecoration`, + "text-decoration": `textDecoration`, + textlength: `textLength`, + textrendering: `textRendering`, + "text-rendering": `textRendering`, + to: `to`, + transform: `transform`, + typeof: `typeof`, + u1: `u1`, + u2: `u2`, + underlineposition: `underlinePosition`, + "underline-position": `underlinePosition`, + underlinethickness: `underlineThickness`, + "underline-thickness": `underlineThickness`, + unicode: `unicode`, + unicodebidi: `unicodeBidi`, + "unicode-bidi": `unicodeBidi`, + unicoderange: `unicodeRange`, + "unicode-range": `unicodeRange`, + unitsperem: `unitsPerEm`, + "units-per-em": `unitsPerEm`, + unselectable: `unselectable`, + valphabetic: `vAlphabetic`, + "v-alphabetic": `vAlphabetic`, + values: `values`, + vectoreffect: `vectorEffect`, + "vector-effect": `vectorEffect`, + version: `version`, + vertadvy: `vertAdvY`, + "vert-adv-y": `vertAdvY`, + vertoriginx: `vertOriginX`, + "vert-origin-x": `vertOriginX`, + vertoriginy: `vertOriginY`, + "vert-origin-y": `vertOriginY`, + vhanging: `vHanging`, + "v-hanging": `vHanging`, + videographic: `vIdeographic`, + "v-ideographic": `vIdeographic`, + viewbox: `viewBox`, + viewtarget: `viewTarget`, + visibility: `visibility`, + vmathematical: `vMathematical`, + "v-mathematical": `vMathematical`, + vocab: `vocab`, + widths: `widths`, + wordspacing: `wordSpacing`, + "word-spacing": `wordSpacing`, + writingmode: `writingMode`, + "writing-mode": `writingMode`, + x1: `x1`, + x2: `x2`, + x: `x`, + xchannelselector: `xChannelSelector`, + xheight: `xHeight`, + "x-height": `xHeight`, + xlinkactuate: `xlinkActuate`, + "xlink:actuate": `xlinkActuate`, + xlinkarcrole: `xlinkArcrole`, + "xlink:arcrole": `xlinkArcrole`, + xlinkhref: `xlinkHref`, + "xlink:href": `xlinkHref`, + xlinkrole: `xlinkRole`, + "xlink:role": `xlinkRole`, + xlinkshow: `xlinkShow`, + "xlink:show": `xlinkShow`, + xlinktitle: `xlinkTitle`, + "xlink:title": `xlinkTitle`, + xlinktype: `xlinkType`, + "xlink:type": `xlinkType`, + xmlbase: `xmlBase`, + "xml:base": `xmlBase`, + xmllang: `xmlLang`, + "xml:lang": `xmlLang`, + xmlns: `xmlns`, + "xml:space": `xmlSpace`, + xmlnsxlink: `xmlnsXlink`, + "xmlns:xlink": `xmlnsXlink`, + xmlspace: `xmlSpace`, + y1: `y1`, + y2: `y2`, + y: `y`, + ychannelselector: `yChannelSelector`, + z: `z`, + zoomandpan: `zoomAndPan`, +} -module.exports = possibleStandardNames; +module.exports = possibleStandardNames From 1231d9485f6e050731bbc6a0f6d9ace03b1b8ed2 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Sat, 4 Apr 2020 14:07:13 -0700 Subject: [PATCH 030/128] Chore(Recipes): Add recipes machine tests (#22823) * Add tests for recipe machine & some refactorings * Lint fixes * Cleanup --- packages/gatsby/package.json | 2 + .../__snapshots__/recipe-machine.test.js.snap | 20 ++++++ packages/gatsby/src/recipes/apply-plan.js | 2 - packages/gatsby/src/recipes/cli.js | 45 ++++++++++--- packages/gatsby/src/recipes/create-plan.js | 11 +-- packages/gatsby/src/recipes/graphql.js | 9 ++- .../gatsby/src/recipes/providers/fs/file.js | 9 ++- packages/gatsby/src/recipes/recipe-machine.js | 44 ++++++------ .../gatsby/src/recipes/recipe-machine.test.js | 67 +++++++++++++++++++ 9 files changed, 163 insertions(+), 46 deletions(-) create mode 100644 packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap create mode 100644 packages/gatsby/src/recipes/recipe-machine.test.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 0525cfd0b6330..8046d197ed351 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -26,6 +26,8 @@ "@reach/router": "^1.3.3", "@typescript-eslint/eslint-plugin": "^2.24.0", "@typescript-eslint/parser": "^2.24.0", + "@xstate/graph": "^1.0.0", + "@xstate/test": "^0.3.0", "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", "address": "1.1.2", diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap new file mode 100644 index 0000000000000..0f2c58710ca2b --- /dev/null +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should create plan for File resources 1`] = ` +Array [ + Object { + "currentState": Object { + "content": "", + }, + "describe": "Write ./hi.md", + "newState": "#yo", + "resource": Array [ + Object { + "content": "#yo", + "path": "./hi.md", + }, + ], + "resourceName": "File", + }, +] +`; diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js index 120388c7df366..c2921d3c591d3 100644 --- a/packages/gatsby/src/recipes/apply-plan.js +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -3,13 +3,11 @@ const SITE_ROOT = process.cwd() const ctx = { root: SITE_ROOT } const applyPlan = async plan => { - console.log(`applying plan for`, plan.resourceName, plan.resource) const resource = resources[plan.resourceName] const result = await Promise.all( plan.resource.map(r => resource.create(ctx, r)) ) - console.log(`applyPlan result`, result) } module.exports = applyPlan diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 0874c9ec82175..a0320e8da0d6e 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -8,7 +8,6 @@ const { render, Box, Text, useInput, useApp } = require(`ink`) const Spinner = require(`ink-spinner`).default const Link = require(`ink-link`) const MDX = require(`@mdx-js/runtime`) -const humanizeList = require(`humanize-list`) const { createClient, useMutation, @@ -154,6 +153,32 @@ module.exports = ({ recipe, projectRoot }) => { ) + class ErrorBoundary extends React.Component { + constructor(props) { + super(props) + this.state = { hasError: false } + } + + static getDerivedStateFromError(error) { + // Update state so the next render will show the fallback UI. + return { hasError: true } + } + + componentDidCatch(error, errorInfo) { + // You can also log the error to an error reporting service + log(`error`, { error, errorInfo }) + } + + render() { + if (this.state.hasError) { + // You can render any custom fallback UI + return

Something went wrong.

+ } + + return this.props.children + } + } + const RecipeInterpreter = ({ commands }) => { const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() @@ -197,7 +222,6 @@ module.exports = ({ recipe, projectRoot }) => { // TODO figure out why exiting ink isn't enough. process.exit() } else if (key.return) { - // setCurrentStep(currentStep + 1) sendEvent({ event: `CONTINUE` }) } }) @@ -214,16 +238,19 @@ module.exports = ({ recipe, projectRoot }) => { if (process.env.DEBUG) { log(`state`, state) + log(`plan`, state.context.plan) } return ( - - - {stepsAsMDX[state.context.currentStep]} - - {` `} - Press enter to apply! - + + + + {stepsAsMDX[state.context.currentStep]} + + {` `} + Press enter to apply! + + ) } diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js index 0ebca5f6383ea..b53ae631cde6b 100644 --- a/packages/gatsby/src/recipes/create-plan.js +++ b/packages/gatsby/src/recipes/create-plan.js @@ -9,20 +9,13 @@ const asyncForEach = async (array, callback) => { } module.exports = async context => { - console.log(`createPlan`, context) const planForNextStep = [] - // If we're at the end - console.log(`createPlan`, { - currentStep: context.currentStep, - length: context.steps.length, - }) - if (context.currentStep + 1 >= context.steps.length) { - console.log(`we're at end`) + if (context.currentStep >= context.steps.length) { return planForNextStep } - const cmds = context.steps[context.currentStep + 1] + const cmds = context.steps[context.currentStep] const commandPlans = Object.entries(cmds).map(async ([key, val]) => { const resource = resources[key] diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index c662ba6b9b86e..236ab5b427ccd 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -17,7 +17,7 @@ const { promisify } = require(`util`) const { interpret } = require(`xstate`) const recipeMachine = require(`./recipe-machine`) -const gatsbyPluginResource = require('./providers/gatsby/plugin') +const gatsbyPluginResource = require(`./providers/gatsby/plugin`) const SITE_ROOT = process.cwd() @@ -56,7 +56,12 @@ const applyPlan = plan => { recipeMachine.withContext(initialState.context) ).onTransition(state => { // Don't emit again unless there's a state change. - console.log(`===onTransition`, { event: state.event, state: state.value }) + console.log(`===onTransition`, { + event: state.event, + state: state.value, + context: state.context, + plan: state.context.plan, + }) if (state.changed) { console.log(`===state.changed`, { state: state.value, diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 43f3034e358e8..d1acb2939a407 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -13,19 +13,23 @@ const fileExists = ({ root }, { path: filePath }) => { } const create = async ({ root }, { path: filePath, content }) => { - console.log(`hi File create`) const fullPath = path.join(root, filePath) const { dir } = path.parse(fullPath) await mkdirp(dir) await fs.writeFile(fullPath, content) + + return { path: fullPath, content } } const update = create const read = async ({ root }, { path: filePath }) => { const fullPath = path.join(root, filePath) - const content = await fs.readFile(fullPath, `utf8`) + let content = `` + if (fileExists({ root }, { path: filePath })) { + content = await fs.readFile(fullPath, `utf8`) + } return { content } } @@ -45,7 +49,6 @@ module.exports.destroy = destroy module.exports.plan = async (context, { path: filePath, content }) => { const src = await read(context, { path: filePath, content }) - console.log(`making file plan`) return { currentState: src, newState: content, diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index fac8fcb490456..8d4537b95d60a 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -6,28 +6,26 @@ const applyPlan = require(`./apply-plan`) const recipeMachine = Machine( { id: `recipe`, - initial: `init`, + initial: `creatingPlan`, context: { currentStep: 0, steps: [], plan: [], }, states: { - init: { - on: { - CONTINUE: `creatingPlan`, - }, - }, creatingPlan: { + entry: [`deleteOldPlan`], invoke: { id: `createPlan`, - src: (context, event) => { - console.log(`invoking createPlan promise`, { context, event }) - return createPlan(context) + src: async (context, event) => { + const result = await createPlan(context) + return result }, onDone: { target: `present plan`, - actions: assign({ plan: (context, event) => event.data }), + actions: assign({ + plan: (context, event) => event.data, + }), }, onError: { target: `failure`, @@ -39,10 +37,14 @@ const recipeMachine = Machine( "": `done`, }, "present plan": { - entry: [`incrementStep`], on: { CONTINUE: `applyingPlan`, }, + meta: { + test: (_, state) => { + expect(state.context.plan).toBeTruthy() + }, + }, }, applyPlan: { // invoke apply plan machine which sends back state updates for resources @@ -51,8 +53,6 @@ const recipeMachine = Machine( invoke: { id: `applyPlan`, src: async (context, event) => { - console.log(`invoking applyingPlan`, { context }) - if (context.plan.length == 0) { return } @@ -69,6 +69,7 @@ const recipeMachine = Machine( }, }, hasAnotherStep: { + entry: [`incrementStep`], on: { "": [ { @@ -98,16 +99,17 @@ const recipeMachine = Machine( currentStep: context.currentStep + 1, } }), + deleteOldPlan: assign((context, event) => { + return { + plan: [], + } + }), }, guards: { - hasNextStep: (context, event) => { - console.log(`GUARDS:::::hasNextStep`, context, event) - return context.currentStep + 1 < context.steps.length - }, - atLastStep: (context, event) => { - console.log(`GUARDS:::::atLastStep`) - return context.currentStep + 1 === context.steps.length - }, + hasNextStep: (context, event) => + context.currentStep < context.steps.length, + atLastStep: (context, event) => + context.currentStep === context.steps.length, }, } ) diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js new file mode 100644 index 0000000000000..8dcdedd4198b1 --- /dev/null +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -0,0 +1,67 @@ +const { interpret } = require(`xstate`) +const fs = require(`fs-extra`) +const path = require(`path`) + +const recipeMachine = require(`./recipe-machine`) + +it(`should create empty plan when the step has no resources`, done => { + const initialContext = { + steps: [{}, {}, {}], + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `present plan`) { + expect(state.context.plan).toEqual([]) + service.stop() + done() + } + }) + + service.start() +}) + +it(`should create plan for File resources`, done => { + const initialContext = { + steps: [{ File: [{ path: `./hi.md`, content: `#yo` }] }], + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `present plan`) { + expect(state.context.plan).toMatchSnapshot() + service.stop() + done() + } + }) + + service.start() +}) + +it(`it should switch to done after the final apply step`, done => { + const filePath = `./hi.md` + const initialContext = { + steps: [{ File: [{ path: filePath, content: `#yo` }] }, {}, {}], + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + // Keep simulating moving onto the next step + if (state.value === `present plan`) { + service.send(`CONTINUE`) + } + if (state.value === `done`) { + const fullPath = path.join(process.cwd(), filePath) + const fileExists = fs.pathExistsSync(fullPath) + expect(fileExists).toBeTruthy() + // Clean up file + fs.unlinkSync(fullPath) + done() + } + }) + + service.start() +}) From 2b33c6a475d4bd41fca5d7e90f7d48f47e8018c7 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 6 Apr 2020 09:24:58 -0700 Subject: [PATCH 031/128] feat(recipes): Add resource schema/validation support (#22830) * Add tests for recipe machine & some refactorings * Lint fixes * Cleanup * Add start to e2e resource test example + resource schema + resource validation * Add e2e resource test helper & improve File resource code for it --- .../gatsby/src/recipes/providers/README.md | 17 +++++ .../fs/__snapshots__/file.test.js.snap | 35 +++++++++++ .../gatsby/src/recipes/providers/fs/file.js | 62 ++++++++++++------- .../src/recipes/providers/fs/file.test.js | 46 ++++---------- .../src/recipes/providers/resource-schema.js | 14 +++++ .../recipes/providers/resource-test-helper.js | 39 ++++++++++++ packages/gatsby/src/recipes/todo.md | 2 + 7 files changed, 157 insertions(+), 58 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/README.md create mode 100644 packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap create mode 100644 packages/gatsby/src/recipes/providers/resource-schema.js create mode 100644 packages/gatsby/src/recipes/providers/resource-test-helper.js diff --git a/packages/gatsby/src/recipes/providers/README.md b/packages/gatsby/src/recipes/providers/README.md new file mode 100644 index 0000000000000..d41285ffb2101 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/README.md @@ -0,0 +1,17 @@ +# Providers + +create/update/destroy — call `read` and return it + +## How to test + +maybe create a helper function for setting up tests + +- pass object for new object + - validate it + - plan for it + - create it + - read it + - update it (another bit of info passed in + - delete it + +// Validate at each step that the response matches the schema + has required id field diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap new file mode 100644 index 0000000000000..319a9e0210cbf --- /dev/null +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`file resource e2e file resource test 1`] = ` +Object { + "currentState": "", + "describe": "Write /Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "newState": "Hello, world!", +} +`; + +exports[`file resource e2e file resource test 2`] = ` +Object { + "content": "Hello, world!", + "id": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "path": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", +} +`; + +exports[`file resource e2e file resource test 3`] = ` +Object { + "currentState": "Hello, world!", + "describe": "Write /Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "newState": "Hello, world!1", +} +`; + +exports[`file resource e2e file resource test 4`] = ` +Object { + "content": "Hello, world!1", + "id": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "path": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", +} +`; + +exports[`file resource e2e file resource test 5`] = `undefined`; diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index d1acb2939a407..00e6d5e34f6ba 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -1,9 +1,9 @@ const fs = require(`fs-extra`) const path = require(`path`) const mkdirp = require(`mkdirp`) +const Joi = require(`@hapi/joi`) -const fileExists = ({ root }, { path: filePath }) => { - const fullPath = path.join(root, filePath) +const fileExists = fullPath => { try { fs.accessSync(fullPath, fs.constants.F_OK) return true @@ -12,31 +12,57 @@ const fileExists = ({ root }, { path: filePath }) => { } } -const create = async ({ root }, { path: filePath, content }) => { +const create = async ({ root }, { id, path: filePath, content }) => { const fullPath = path.join(root, filePath) const { dir } = path.parse(fullPath) await mkdirp(dir) + await fs.writeFile(fullPath, content) - return { path: fullPath, content } + return await read({ root }, fullPath) } -const update = create +const update = async (context, resource) => { + await fs.writeFile(resource.id, resource.content) + return await read(context, resource.id) +} -const read = async ({ root }, { path: filePath }) => { - const fullPath = path.join(root, filePath) +const read = async (context, id) => { let content = `` - if (fileExists({ root }, { path: filePath })) { - content = await fs.readFile(fullPath, `utf8`) + if (fileExists(id)) { + content = await fs.readFile(id, `utf8`) } - return { content } + return { id, path: id, content } } -const destroy = async ({ root }, { path: filePath }) => { - const fullPath = path.join(root, filePath) - await fs.unlink(fullPath) +const destroy = async (context, fileResource) => { + await fs.unlink(fileResource.path) +} + +// TODO pass action to plan +module.exports.plan = async (context, { id, path: filePath, content }) => { + let fullPath + if (!id) { + fullPath = path.join(context.root, filePath) + } else { + fullPath = id + } + const currentResource = await read(context, fullPath) + + return { + currentState: currentResource.content, + newState: content, + describe: `Write ${fullPath}`, + } +} + +exports.validate = () => { + return { + path: Joi.string(), + content: Joi.string(), + } } module.exports.exists = fileExists @@ -45,13 +71,3 @@ module.exports.create = create module.exports.update = update module.exports.read = read module.exports.destroy = destroy - -module.exports.plan = async (context, { path: filePath, content }) => { - const src = await read(context, { path: filePath, content }) - - return { - currentState: src, - newState: content, - describe: `Write ${filePath}`, - } -} diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js index c2bbe5e09862a..2e1329d16cb57 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.test.js +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -1,43 +1,19 @@ +const Joi = require(`@hapi/joi`) + const file = require(`./file`) +const resourceTestHelper = require(`../resource-test-helper`) const root = __dirname const content = `Hello, world!` describe(`file resource`, () => { - test(`create writes a file`, async () => { - const filePath = `bar.txt` - - await file.create({ root }, { path: filePath, content }) - - const result = await file.read({ root }, { path: filePath }) - - expect(result.content).toEqual(content) - - await file.destroy({ root }, { path: filePath }) - }) - - test(`update writes a file`, async () => { - const filePath = `bar.txt` - const newContent = `new content!` - - await file.create({ root }, { path: filePath, content }) - await file.update({ root }, { path: filePath, content: newContent }) - - const result = await file.read({ root }, { path: filePath }) - - expect(result.content).toEqual(newContent) - - await file.destroy({ root }, { path: filePath }) - }) - - test(`plan returns a description`, async () => { - const filePath = `file.txt` - await file.create({ root }, { path: filePath, content }) - - const result = await file.plan({ root }, { path: filePath, content }) - - expect(result.describe).toEqual(`Write ${filePath}`) - - await file.destroy({ root }, { path: filePath }) + test(`e2e file resource test`, async () => { + await resourceTestHelper({ + resourceModule: file, + resourceName: `File`, + context: { root }, + initialObject: { path: `file.txt`, content }, + partialUpdate: { content: content + `1` }, + }) }) }) diff --git a/packages/gatsby/src/recipes/providers/resource-schema.js b/packages/gatsby/src/recipes/providers/resource-schema.js new file mode 100644 index 0000000000000..39a31e58f10d8 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/resource-schema.js @@ -0,0 +1,14 @@ +const Joi = require(`joi`) + +// heh +// createResource —> when comes from the user +// — when there's an ID — it's now "created" +// read — just grabs it off the same place. +// +// This is freakin Gatsby all over again!!! + +module.exports = { + // ID of a file should be relative to the root of the git repo + // or the absolute path if we can't find one + id: Joi.string(), +} diff --git a/packages/gatsby/src/recipes/providers/resource-test-helper.js b/packages/gatsby/src/recipes/providers/resource-test-helper.js new file mode 100644 index 0000000000000..f7cb2344f19b0 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/resource-test-helper.js @@ -0,0 +1,39 @@ +const resourceSchema = require(`./resource-schema`) +const Joi = require(`joi`) + +module.exports = async ({ + resourceModule: resource, + context, + resourceName, + initialObject, + partialUpdate, +}) => { + // Test the plan + const createPlan = await resource.plan(context, initialObject) + expect(createPlan).toMatchSnapshot() + + // Test creating the resource + const createResponse = await resource.create(context, initialObject) + const validateResult = Joi.validate(createResponse, { + ...resource.validate(), + ...resourceSchema, + }) + expect(validateResult.error).toBeNull() + expect(createResponse).toMatchSnapshot() + + // Test reading the resource + const readResponse = await resource.read(context, createResponse.id) + expect(readResponse).toEqual(createResponse) + + // Test updating the resource + const updatedResource = { ...readResponse, ...partialUpdate } + const updatePlan = await resource.plan(context, updatedResource) + expect(updatePlan).toMatchSnapshot() + + const updateResponse = await resource.update(context, updatedResource) + expect(updateResponse).toMatchSnapshot() + + // Test destroying the resource. + const destroyReponse = await resource.destroy(context, updateResponse) + expect(destroyReponse).toMatchSnapshot() +} diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 70e26dc3f5b89..be272869191e5 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -32,8 +32,10 @@ - [ ] add Joi for validating resource objects - [ ] handle error states - [x] handle template strings in JSX parser +- [ ] integration test for each resource (read, create, update, delete) ## Near-ish future - [ ] Make a proper "Config" provider to add recipes dir, store data, etc. - [ ] Move parsing to the server +- [ ] init.js for providers to setup clients From 4f60b912e59c20480c042db43feb9ac2e2d94a09 Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 6 Apr 2020 11:00:31 -0600 Subject: [PATCH 032/128] fix(recipes): Don't duplicate plugin configuration by default (#22861) Also moves gatsby plugin provider to new structure for resources. --- .../src/recipes/providers/fs/file.test.js | 2 - .../gatsby/__snapshots__/plugin.test.js.snap | 241 ++++++++++++++++++ .../src/recipes/providers/gatsby/plugin.js | 32 ++- .../recipes/providers/gatsby/plugin.test.js | 52 ++-- 4 files changed, 288 insertions(+), 39 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js index 2e1329d16cb57..971e776eee56b 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.test.js +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -1,5 +1,3 @@ -const Joi = require(`@hapi/joi`) - const file = require(`./file`) const resourceTestHelper = require(`../resource-test-helper`) diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap new file mode 100644 index 0000000000000..555d600378172 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -0,0 +1,241 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`gatsby-plugin resource e2e file resource test 1`] = ` +Object { + "currentState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`] +};", + "describe": "Configure gatsby-plugin-foo", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", +} +`; + +exports[`gatsby-plugin resource e2e file resource test 2`] = ` +Object { + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e file resource test 3`] = ` +Object { + "currentState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", + "describe": "Configure gatsby-plugin-foo", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", +} +`; + +exports[`gatsby-plugin resource e2e file resource test 4`] = ` +Object { + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e file resource test 5`] = `undefined`; diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index e2d30b24de4ea..1cb5ec82a9678 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -1,6 +1,7 @@ const fs = require(`fs-extra`) const path = require(`path`) const babel = require(`@babel/core`) +const Joi = require(`@hapi/joi`) const declare = require(`@babel/helper-plugin-utils`).declare @@ -67,21 +68,27 @@ const getPluginsFromConfig = src => { } const create = async ({ root }, { name }) => { - // TODO make this more robust. - return const configPath = path.join(root, `gatsby-config.js`) const configSrc = await fs.readFile(configPath, `utf8`) const code = addPluginToConfig(configSrc, name) await fs.writeFile(configPath, code) + + return { id: name, name } } -const read = async ({ root }) => { +const read = async ({ root }, id) => { const configPath = path.join(root, `gatsby-config.js`) const configSrc = await fs.readFile(configPath, `utf8`) - return getPluginsFromConfig(configSrc) + const name = getPluginsFromConfig(configSrc).find(name => name === id) + + if (name) { + return { id, name } + } else { + return null + } } const destroy = async ({ root }, { name }) => { @@ -120,7 +127,7 @@ class BabelPluginAddPluginsToGatsbyConfig { if (shouldAdd) { const pluginNames = plugins.value.elements.map(getNameForPlugin) - const exists = pluginNames.includes(node.value) + const exists = pluginNames.includes(pluginOrThemeName) if (!exists) { plugins.value.elements.push(t.stringLiteral(pluginOrThemeName)) } @@ -175,14 +182,23 @@ module.exports.update = create module.exports.read = read module.exports.destroy = destroy -module.exports.plan = async ({ root }, { name }) => { +module.exports.validate = () => { + return { + name: Joi.string(), + } +} + +module.exports.plan = async ({ root }, { id, name }) => { + const fullName = id || name const configPath = path.join(root, `gatsby-config.js`) const src = await fs.readFile(configPath, `utf8`) - const newContents = addPluginToConfig(src, name) + const newContents = addPluginToConfig(src, fullName) return { + id: fullName, + name, currentState: src, newState: newContents, - describe: `Configure ${name}`, + describe: `Configure ${fullName}`, } } diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 64c139cf86242..b7017031b05f0 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -1,41 +1,35 @@ +const fs = require(`fs-extra`) const path = require(`path`) const plugin = require(`./plugin`) +const { addPluginToConfig, getPluginsFromConfig } = require(`./plugin`) +const resourceTestHelper = require(`../resource-test-helper`) const root = path.join(__dirname, `./fixtures`) const name = `gatsby-plugin-foo` - -describe(`gatsby-config`, () => { - test(`adds a plugin to a gatsby config`, async () => { - await plugin.create({ root }, { name }) - - const result = await plugin.read({ root }) - - expect(result).toContain(`gatsby-plugin-foo`) - - await plugin.destroy({ root }, { name }) +const configPath = path.join(root, `gatsby-config.js`) + +describe(`gatsby-plugin resource`, () => { + test(`e2e file resource test`, async () => { + await resourceTestHelper({ + resourceModule: plugin, + resourceName: `File`, + context: { root }, + initialObject: { id: name, name }, + partialUpdate: { id: name }, + }) }) - test(`retrieves plugins from a config`, async () => { - const result = await plugin.read({ root }) - - expect(result).toEqual([ - `gatsby-source-filesystem`, - `gatsby-transformer-sharp`, - `gatsby-plugin-emotion`, - `gatsby-plugin-typography`, - `gatsby-transformer-remark`, - `gatsby-plugin-sharp`, - `gatsby-plugin-google-analytics`, - `gatsby-plugin-manifest`, - `gatsby-plugin-offline`, - `gatsby-plugin-react-helmet`, - ]) - }) + test(`does not add the same plugin twice by default`, async () => { + const configSrc = await fs.readFile(configPath, `utf8`) + const newConfigSrc = addPluginToConfig( + configSrc, + `gatsby-plugin-react-helmet` + ) + const plugins = getPluginsFromConfig(newConfigSrc) - test(`plan returns a description`, async () => { - const result = await plugin.plan({ root }, { name }) + const result = [...new Set(plugins)] - expect(result.describe).toEqual(`Configure ${name}`) + expect(result).toEqual(plugins) }) }) From 310abd2ebc2266c90fd5a1820c04445bb1ff7f90 Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 6 Apr 2020 13:10:39 -0600 Subject: [PATCH 033/128] feat(recipes): Generate graphql schema from resources (#22864) * Add destroy cleanup verification * Update package json to use new provider structure * Update tests and port package json to new structure * feat(recipes): Generate graphql schema from resources --- packages/gatsby/package.json | 1 + .../__snapshots__/create-types.test.js.snap | 33 +++++++ packages/gatsby/src/recipes/create-types.js | 39 ++++++++ .../gatsby/src/recipes/create-types.test.js | 6 ++ packages/gatsby/src/recipes/graphql.js | 98 +------------------ .../fs/__snapshots__/file.test.js.snap | 36 +++---- .../gatsby/src/recipes/providers/fs/file.js | 4 +- .../gatsby/__snapshots__/plugin.test.js.snap | 24 ++--- .../src/recipes/providers/gatsby/plugin.js | 4 +- .../recipes/providers/gatsby/plugin.test.js | 4 +- .../__snapshots__/package-json.test.js.snap | 49 ++++++++++ .../src/recipes/providers/npm/package-json.js | 42 ++++++-- .../providers/npm/package-json.test.js | 47 +++++---- .../recipes/providers/resource-test-helper.js | 18 +++- 14 files changed, 248 insertions(+), 157 deletions(-) create mode 100644 packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap create mode 100644 packages/gatsby/src/recipes/create-types.js create mode 100644 packages/gatsby/src/recipes/create-types.test.js create mode 100644 packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 8046d197ed351..f490776d9a2a5 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -103,6 +103,7 @@ "is-string": "^1.0.5", "is-wsl": "^2.1.1", "jest-worker": "^24.9.0", + "joi2gql": "^1.3.1", "json-loader": "^0.5.7", "json-stringify-safe": "^5.0.1", "latest-version": "5.1.0", diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap new file mode 100644 index 0000000000000..ec6e8af2e49a8 --- /dev/null +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`create-types 1`] = ` +Object { + "file": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "File", + }, + "gatsbyPlugin": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "GatsbyPlugin", + }, + "npmPackageJson": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "NPMPackageJson", + }, +} +`; diff --git a/packages/gatsby/src/recipes/create-types.js b/packages/gatsby/src/recipes/create-types.js new file mode 100644 index 0000000000000..cde2a92d5c173 --- /dev/null +++ b/packages/gatsby/src/recipes/create-types.js @@ -0,0 +1,39 @@ +const Joi2GQL = require(`joi2gql`) +const Joi = require(`@hapi/joi`) +const { GraphQLString } = require(`graphql`) +const _ = require(`lodash`) + +const resources = require(`./resources`) + +module.exports = () => { + const types = Object.entries(resources) + .map(([resourceName, resource]) => { + if (!resource.validate) { + return undefined + } + + const joiSchema = Joi.object().keys(resource.validate()) + + const config = { + name: resourceName, + } + + const type = Joi2GQL.transmuteType(joiSchema, config) + + return { + type, + args: { + id: { type: GraphQLString }, + }, + resolve: async (_root, args, context) => + await resource.read(context, args.id), + } + }) + .filter(Boolean) + .reduce((acc, curr) => { + acc[_.camelCase(curr.type.toString())] = curr + return acc + }, {}) + + return types +} diff --git a/packages/gatsby/src/recipes/create-types.test.js b/packages/gatsby/src/recipes/create-types.test.js new file mode 100644 index 0000000000000..3ce7f69350d74 --- /dev/null +++ b/packages/gatsby/src/recipes/create-types.test.js @@ -0,0 +1,6 @@ +const createTypes = require(`./create-types`) + +test(`create-types`, () => { + const result = createTypes() + expect(result).toMatchSnapshot() +}) diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 236ab5b427ccd..e3d768fd6b92e 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -4,33 +4,22 @@ const { GraphQLSchema, GraphQLObjectType, GraphQLString, - GraphQLList, execute, subscribe, } = require(`graphql`) const { PubSub } = require(`graphql-subscriptions`) const { SubscriptionServer } = require(`subscriptions-transport-ws`) const { createServer } = require(`http`) -const fs = require(`fs`) -const path = require(`path`) -const { promisify } = require(`util`) const { interpret } = require(`xstate`) const recipeMachine = require(`./recipe-machine`) -const gatsbyPluginResource = require(`./providers/gatsby/plugin`) +const createTypes = require(`./create-types`) const SITE_ROOT = process.cwd() -const read = promisify(fs.readFile) - const pubsub = new PubSub() const PORT = 4000 -const readPackage = async () => { - const contents = await read(path.join(SITE_ROOT, `package.json`), `utf8`) - return JSON.parse(contents) -} - const emitOperation = state => { pubsub.publish(`operation`, { state: JSON.stringify(state), @@ -40,11 +29,6 @@ const emitOperation = state => { // only one service can run at a time. let service const applyPlan = plan => { - // plan.forEach(step => queue.push({ plan, ...step })) - - // queue.on(`drain`, () => { - // emitOperation(`success`, plan) - // }) const initialState = { context: { steps: plan, currentStep: 0 }, value: `init`, @@ -90,86 +74,11 @@ const OperationType = new GraphQLObjectType({ }, }) -const NPMPackageScriptType = new GraphQLObjectType({ - name: `NPMPackageScript`, - fields: { - name: { type: GraphQLString }, - script: { type: GraphQLString }, - }, -}) - -const NPMPackageType = new GraphQLObjectType({ - name: `NPMPackage`, - fields: { - name: { type: GraphQLString }, - version: { type: GraphQLString }, - path: { type: GraphQLString }, - scripts: { type: new GraphQLList(NPMPackageScriptType) }, - }, -}) - -const GatsbyConfigPluginType = new GraphQLObjectType({ - name: `GatsbyConfigPlugin`, - fields: { - name: { type: GraphQLString }, - version: { type: GraphQLString }, - }, -}) +const types = createTypes() const rootQueryType = new GraphQLObjectType({ name: `Root`, - fields: () => { - return { - npmPackage: { - type: NPMPackageType, - args: { - name: { - type: GraphQLString, - }, - }, - resolve: async (_, args) => { - // TODO: peer/dev - const { dependencies } = await readPackage() - const version = dependencies[args.name] - return { name: args.name, version } - }, - }, - allNpmPackage: { - type: new GraphQLList(NPMPackageType), - resolve: async () => { - const { dependencies } = await readPackage() - - return Object.entries(dependencies).map(([name, version]) => { - return { - name, - version, - } - }) - }, - }, - allNpmPackageScripts: { - type: new GraphQLList(NPMPackageScriptType), - resolve: async () => { - const { scripts } = await readPackage() - return Object.entries(scripts).map(([name, script]) => { - return { - name, - script, - } - }) - }, - }, - allGatsbyConfigPlugin: { - type: new GraphQLList(GatsbyConfigPluginType), - resolve: async () => { - const plugins = gatsbyPluginResource.read({ root: SITE_ROOT }) - return plugins.map(async name => { - return { name } - }) - }, - }, - } - }, + fields: () => types, }) const rootMutationType = new GraphQLObjectType({ @@ -230,6 +139,7 @@ app.use( graphqlHTTP({ schema, graphiql: true, + context: { root: SITE_ROOT }, }) ) diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index 319a9e0210cbf..53162522ebd1b 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -1,35 +1,35 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`file resource e2e file resource test 1`] = ` +exports[`file resource e2e file resource test: File create 1`] = ` Object { - "currentState": "", - "describe": "Write /Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "newState": "Hello, world!", + "content": "Hello, world!", + "id": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "path": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", } `; -exports[`file resource e2e file resource test 2`] = ` +exports[`file resource e2e file resource test: File create plan 1`] = ` Object { - "content": "Hello, world!", - "id": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "path": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "currentState": undefined, + "describe": "Write /Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "newState": "Hello, world!", } `; -exports[`file resource e2e file resource test 3`] = ` +exports[`file resource e2e file resource test: File destroy 1`] = `undefined`; + +exports[`file resource e2e file resource test: File update 1`] = ` Object { - "currentState": "Hello, world!", - "describe": "Write /Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "newState": "Hello, world!1", + "content": "Hello, world!1", + "id": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "path": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", } `; -exports[`file resource e2e file resource test 4`] = ` +exports[`file resource e2e file resource test: File update plan 1`] = ` Object { - "content": "Hello, world!1", - "id": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "path": "/Users/kylemathews/programs/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "currentState": "Hello, world!", + "describe": "Write /Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "newState": "Hello, world!1", } `; - -exports[`file resource e2e file resource test 5`] = `undefined`; diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 00e6d5e34f6ba..eba2c893fa87f 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -32,6 +32,8 @@ const read = async (context, id) => { let content = `` if (fileExists(id)) { content = await fs.readFile(id, `utf8`) + } else { + return undefined } return { id, path: id, content } @@ -52,7 +54,7 @@ module.exports.plan = async (context, { id, path: filePath, content }) => { const currentResource = await read(context, fullPath) return { - currentState: currentResource.content, + currentState: currentResource && currentResource.content, newState: content, describe: `Write ${fullPath}`, } diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index 555d600378172..ee01b83ef5588 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -1,6 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`gatsby-plugin resource e2e file resource test 1`] = ` +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create 1`] = ` +Object { + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create plan 1`] = ` Object { "currentState": "const redish = \`#c5484d\`; module.exports = { @@ -112,14 +119,16 @@ module.exports = { } `; -exports[`gatsby-plugin resource e2e file resource test 2`] = ` +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin destroy 1`] = `undefined`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update 1`] = ` Object { "id": "gatsby-plugin-foo", "name": "gatsby-plugin-foo", } `; -exports[`gatsby-plugin resource e2e file resource test 3`] = ` +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update plan 1`] = ` Object { "currentState": "const redish = \`#c5484d\`; module.exports = { @@ -230,12 +239,3 @@ module.exports = { };", } `; - -exports[`gatsby-plugin resource e2e file resource test 4`] = ` -Object { - "id": "gatsby-plugin-foo", - "name": "gatsby-plugin-foo", -} -`; - -exports[`gatsby-plugin resource e2e file resource test 5`] = `undefined`; diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 1cb5ec82a9678..504a8445da930 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -75,7 +75,7 @@ const create = async ({ root }, { name }) => { await fs.writeFile(configPath, code) - return { id: name, name } + return await read({ root }, name) } const read = async ({ root }, id) => { @@ -87,7 +87,7 @@ const read = async ({ root }, id) => { if (name) { return { id, name } } else { - return null + return undefined } } diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index b7017031b05f0..b85a42445fa09 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -10,10 +10,10 @@ const name = `gatsby-plugin-foo` const configPath = path.join(root, `gatsby-config.js`) describe(`gatsby-plugin resource`, () => { - test(`e2e file resource test`, async () => { + test(`e2e plugin resource test`, async () => { await resourceTestHelper({ resourceModule: plugin, - resourceName: `File`, + resourceName: `GatsbyPlugin`, context: { root }, initialObject: { id: name, name }, partialUpdate: { id: name }, diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap new file mode 100644 index 0000000000000..63133631bc138 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap @@ -0,0 +1,49 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`packageJson resource e2e package resource test: PackageJson create 1`] = ` +Object { + "id": "husky", + "name": "husky", + "value": "{ + \\"hooks\\": {} +}", +} +`; + +exports[`packageJson resource e2e package resource test: PackageJson create plan 1`] = ` +Object { + "currentState": "{}", + "describe": "Add husky to package.json", + "id": "husky", + "name": "husky", + "newState": "{ + \\"husky\\": \\"{\\\\n \\\\\\"hooks\\\\\\": {}\\\\n}\\" +}", +} +`; + +exports[`packageJson resource e2e package resource test: PackageJson destroy 1`] = `undefined`; + +exports[`packageJson resource e2e package resource test: PackageJson update 1`] = ` +Object { + "id": "husky", + "name": "husky", + "value": "{ + \\"hooks\\": { + \\"pre-commit\\": \\"lint-staged\\" + } +}", +} +`; + +exports[`packageJson resource e2e package resource test: PackageJson update plan 1`] = ` +Object { + "currentState": "{}", + "describe": "Add husky to package.json", + "id": "husky", + "name": "husky", + "newState": "{ + \\"husky\\": \\"{\\\\n \\\\\\"hooks\\\\\\": {\\\\n \\\\\\"pre-commit\\\\\\": \\\\\\"lint-staged\\\\\\"\\\\n }\\\\n}\\" +}", +} +`; diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index 5bdb0f7ba54d3..82e0ddad497df 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -1,6 +1,7 @@ const fs = require(`fs`) const path = require(`path`) const { promisify } = require(`util`) +const Joi = require(`@hapi/joi`) const readFile = promisify(fs.readFile) const writeFile = promisify(fs.writeFile) @@ -20,25 +21,54 @@ const writePackageJson = async (root, obj) => { const create = async ({ root }, { name, value }) => { const pkg = await readPackageJson(root) - pkg[name] = value + pkg[name] = JSON.parse(value) + await writePackageJson(root, pkg) + + return await read({ root }, name) } -const read = async ({ root }, { name }) => { +const read = async ({ root }, id) => { const pkg = await readPackageJson(root) + if (!pkg[id]) { + return undefined + } + return { - name, - value: pkg[name], + id, + name: id, + value: JSON.stringify(pkg[id], null, 2), } } -const destroy = async ({ root }, { name }) => { +const destroy = async ({ root }, { id }) => { const pkg = await readPackageJson(root) - delete pkg[name] + delete pkg[id] await writePackageJson(root, pkg) } +module.exports.validate = () => { + return { + name: Joi.string(), + value: Joi.string(), + } +} + +module.exports.plan = async ({ root }, { id, name, value }) => { + const key = id || name + const currentState = readPackageJson(root) + const newState = { ...currentState, [key]: value } + + return { + id: key, + name, + currentState: JSON.stringify(currentState, null, 2), + newState: JSON.stringify(newState, null, 2), + describe: `Add ${key} to package.json`, + } +} + module.exports.create = create module.exports.update = create module.exports.read = read diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.test.js b/packages/gatsby/src/recipes/providers/npm/package-json.test.js index 881a2fb9d93d5..99b82585b34b3 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.test.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.test.js @@ -1,23 +1,36 @@ -const path = require('path') -const pkgJson = require(`./package-json`) - -const root = path.join(__dirname, 'fixtures') +const path = require(`path`) -const name = "husky" -const value = { - "hooks": { - "pre-commit": "lint-staged" - } -} - -describe('package-json', () => { - test(`create a config object`, async () => { - await pkgJson.create({ root }, { name, value }) +const pkgJson = require(`./package-json`) +const resourceTestHelper = require(`../resource-test-helper`) - const result = await pkgJson.read({ root }, { name, value }) +const root = path.join(__dirname, `fixtures`) - expect(result).toEqual({ name, value }) +const name = `husky` +const initialValue = JSON.stringify( + { + hooks: {}, + }, + null, + 2 +) +const updateValue = JSON.stringify( + { + hooks: { + "pre-commit": `lint-staged`, + }, + }, + null, + 2 +) - await pkgJson.destroy({ root }, { name, value }) +describe(`packageJson resource`, () => { + test(`e2e package resource test`, async () => { + await resourceTestHelper({ + resourceModule: pkgJson, + resourceName: `PackageJson`, + context: { root }, + initialObject: { name, value: initialValue }, + partialUpdate: { value: updateValue }, + }) }) }) diff --git a/packages/gatsby/src/recipes/providers/resource-test-helper.js b/packages/gatsby/src/recipes/providers/resource-test-helper.js index f7cb2344f19b0..56ecdaf732f8e 100644 --- a/packages/gatsby/src/recipes/providers/resource-test-helper.js +++ b/packages/gatsby/src/recipes/providers/resource-test-helper.js @@ -10,7 +10,7 @@ module.exports = async ({ }) => { // Test the plan const createPlan = await resource.plan(context, initialObject) - expect(createPlan).toMatchSnapshot() + expect(createPlan).toMatchSnapshot(`${resourceName} create plan`) // Test creating the resource const createResponse = await resource.create(context, initialObject) @@ -19,7 +19,7 @@ module.exports = async ({ ...resourceSchema, }) expect(validateResult.error).toBeNull() - expect(createResponse).toMatchSnapshot() + expect(createResponse).toMatchSnapshot(`${resourceName} create`) // Test reading the resource const readResponse = await resource.read(context, createResponse.id) @@ -28,12 +28,20 @@ module.exports = async ({ // Test updating the resource const updatedResource = { ...readResponse, ...partialUpdate } const updatePlan = await resource.plan(context, updatedResource) - expect(updatePlan).toMatchSnapshot() + expect(updatePlan).toMatchSnapshot(`${resourceName} update plan`) const updateResponse = await resource.update(context, updatedResource) - expect(updateResponse).toMatchSnapshot() + expect(updateResponse).toMatchSnapshot(`${resourceName} update`) // Test destroying the resource. + // TODO: Read resource, destroy it, and return thing that's destroyed const destroyReponse = await resource.destroy(context, updateResponse) - expect(destroyReponse).toMatchSnapshot() + expect(destroyReponse).toMatchSnapshot(`${resourceName} destroy`) + + // Ensure that resource was destroyed + const postDestroyReadResponse = await resource.read( + context, + createResponse.id + ) + expect(postDestroyReadResponse).toBeUndefined() } From e22d67eb08a9e6041780fde62d79b6306038c360 Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 6 Apr 2020 17:13:57 -0600 Subject: [PATCH 034/128] feat(recipes): Create connection types for resources (#22876) --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/create-types.js | 62 +++++++++++++++---- .../gatsby/__snapshots__/plugin.test.js.snap | 45 ++++++++++++++ .../src/recipes/providers/gatsby/plugin.js | 14 +++++ .../recipes/providers/gatsby/plugin.test.js | 6 ++ 5 files changed, 117 insertions(+), 11 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index f490776d9a2a5..f6f48f401b531 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -92,6 +92,7 @@ "graphql-compose": "^6.3.8", "graphql-playground-middleware-express": "^1.7.12", "graphql-subscriptions": "^1.1.0", + "graphql-type-json": "^0.3.1", "hasha": "^5.2.0", "html-tag-names": "^1.1.5", "humanize-list": "^1.0.1", diff --git a/packages/gatsby/src/recipes/create-types.js b/packages/gatsby/src/recipes/create-types.js index cde2a92d5c173..0630c9b075520 100644 --- a/packages/gatsby/src/recipes/create-types.js +++ b/packages/gatsby/src/recipes/create-types.js @@ -1,26 +1,38 @@ const Joi2GQL = require(`joi2gql`) const Joi = require(`@hapi/joi`) -const { GraphQLString } = require(`graphql`) +const { GraphQLString, GraphQLObjectType, GraphQLList } = require(`graphql`) const _ = require(`lodash`) const resources = require(`./resources`) +const resourceSchema = require(`./providers/resource-schema`) + +const typeNameToHumanName = name => { + if (name.endsWith(`Connection`)) { + return `all` + name.replace(/Connection$/, ``) + } else { + return _.camelCase(name) + } +} module.exports = () => { - const types = Object.entries(resources) - .map(([resourceName, resource]) => { + const resourceTypes = Object.entries(resources).map( + ([resourceName, resource]) => { if (!resource.validate) { return undefined } - const joiSchema = Joi.object().keys(resource.validate()) + const types = [] - const config = { - name: resourceName, - } + const joiSchema = Joi.object().keys({ + ...resource.validate(), + ...resourceSchema, + }) - const type = Joi2GQL.transmuteType(joiSchema, config) + const type = Joi2GQL.transmuteType(joiSchema, { + name: resourceName, + }) - return { + const resourceType = { type, args: { id: { type: GraphQLString }, @@ -28,10 +40,38 @@ module.exports = () => { resolve: async (_root, args, context) => await resource.read(context, args.id), } - }) + types.push(resourceType) + + if (resource.all) { + const connectionTypeName = resourceName + `Connection` + + const ConnectionType = new GraphQLObjectType({ + name: connectionTypeName, + fields: { + nodes: { type: new GraphQLList(type) }, + }, + }) + + const connectionType = { + type: ConnectionType, + resolve: async (_root, _args, context) => { + const nodes = await resource.all(context) + return { nodes } + }, + } + + types.push(connectionType) + } + + return types + } + ) + + const types = _.flatten(resourceTypes) .filter(Boolean) .reduce((acc, curr) => { - acc[_.camelCase(curr.type.toString())] = curr + const typeName = typeNameToHumanName(curr.type.toString()) + acc[typeName] = curr return acc }, {}) diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index ee01b83ef5588..d4a38df527514 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -1,5 +1,50 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`gatsby-plugin resource all returns an array of plugins 1`] = ` +Array [ + Object { + "id": "gatsby-source-filesystem", + "name": "gatsby-source-filesystem", + }, + Object { + "id": "gatsby-transformer-sharp", + "name": "gatsby-transformer-sharp", + }, + Object { + "id": "gatsby-plugin-emotion", + "name": "gatsby-plugin-emotion", + }, + Object { + "id": "gatsby-plugin-typography", + "name": "gatsby-plugin-typography", + }, + Object { + "id": "gatsby-transformer-remark", + "name": "gatsby-transformer-remark", + }, + Object { + "id": "gatsby-plugin-sharp", + "name": "gatsby-plugin-sharp", + }, + Object { + "id": "gatsby-plugin-google-analytics", + "name": "gatsby-plugin-google-analytics", + }, + Object { + "id": "gatsby-plugin-manifest", + "name": "gatsby-plugin-manifest", + }, + Object { + "id": "gatsby-plugin-offline", + "name": "gatsby-plugin-offline", + }, + Object { + "id": "gatsby-plugin-react-helmet", + "name": "gatsby-plugin-react-helmet", + }, +] +`; + exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create 1`] = ` Object { "id": "gatsby-plugin-foo", diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 504a8445da930..38d24d7c7386d 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -182,6 +182,20 @@ module.exports.update = create module.exports.read = read module.exports.destroy = destroy +module.exports.all = async ({ root }) => { + const configPath = path.join(root, `gatsby-config.js`) + const src = await fs.readFile(configPath, `utf8`) + const plugins = getPluginsFromConfig(src) + + // TODO: Consider mapping to read function + return plugins.map(name => { + return { + id: name, + name, + } + }) +} + module.exports.validate = () => { return { name: Joi.string(), diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index b85a42445fa09..10d2d5c6d241e 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -32,4 +32,10 @@ describe(`gatsby-plugin resource`, () => { expect(result).toEqual(plugins) }) + + test(`all returns an array of plugins`, async () => { + const result = await plugin.all({ root }) + + expect(result).toMatchSnapshot() + }) }) From 7f7ac9653e9502ae64b44baecedf640ef13963b6 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 6 Apr 2020 16:54:31 -0700 Subject: [PATCH 035/128] Find the root directory of the Node.js project/npm package and use that as the base for File resources --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/graphql.js | 3 ++- .../fs/__snapshots__/file.test.js.snap | 22 ++++++++++------- .../gatsby/src/recipes/providers/fs/file.js | 24 ++++++++++++------- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index f6f48f401b531..6cba29edfeef0 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -126,6 +126,7 @@ "p-defer": "^3.0.0", "parseurl": "^1.3.3", "physical-cpu-count": "^2.0.0", + "pkg-dir": "^4.2.0", "pnp-webpack-plugin": "^1.6.4", "postcss-flexbugs-fixes": "^4.2.0", "postcss-loader": "^3.0.0", diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index e3d768fd6b92e..58703e77f8aba 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -11,11 +11,12 @@ const { PubSub } = require(`graphql-subscriptions`) const { SubscriptionServer } = require(`subscriptions-transport-ws`) const { createServer } = require(`http`) const { interpret } = require(`xstate`) +const pkgDir = require(`pkg-dir`) const recipeMachine = require(`./recipe-machine`) const createTypes = require(`./create-types`) -const SITE_ROOT = process.cwd() +const SITE_ROOT = pkgDir(process.cwd()) const pubsub = new PubSub() const PORT = 4000 diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index 53162522ebd1b..d2bbd316dc2d8 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -3,33 +3,39 @@ exports[`file resource e2e file resource test: File create 1`] = ` Object { "content": "Hello, world!", - "id": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "path": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "id": "file.txt", + "path": "file.txt", } `; exports[`file resource e2e file resource test: File create plan 1`] = ` Object { "currentState": undefined, - "describe": "Write /Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "describe": "Write file.txt", "newState": "Hello, world!", } `; -exports[`file resource e2e file resource test: File destroy 1`] = `undefined`; +exports[`file resource e2e file resource test: File destroy 1`] = ` +Object { + "content": "Hello, world!1", + "id": "file.txt", + "path": "file.txt", +} +`; exports[`file resource e2e file resource test: File update 1`] = ` Object { "content": "Hello, world!1", - "id": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", - "path": "/Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "id": "file.txt", + "path": "file.txt", } `; exports[`file resource e2e file resource test: File update plan 1`] = ` Object { - "currentState": "Hello, world!", - "describe": "Write /Users/johno-mini/c/gatsby/packages/gatsby/src/recipes/providers/fs/file.txt", + "currentState": undefined, + "describe": "Write file.txt", "newState": "Hello, world!1", } `; diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index eba2c893fa87f..d846be7d1fe34 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -3,6 +3,8 @@ const path = require(`path`) const mkdirp = require(`mkdirp`) const Joi = require(`@hapi/joi`) +const makePath = (root, relativePath) => path.join(root, relativePath) + const fileExists = fullPath => { try { fs.accessSync(fullPath, fs.constants.F_OK) @@ -13,25 +15,28 @@ const fileExists = fullPath => { } const create = async ({ root }, { id, path: filePath, content }) => { - const fullPath = path.join(root, filePath) + const fullPath = makePath(root, filePath) const { dir } = path.parse(fullPath) await mkdirp(dir) await fs.writeFile(fullPath, content) - return await read({ root }, fullPath) + return await read({ root }, filePath) } const update = async (context, resource) => { - await fs.writeFile(resource.id, resource.content) + const fullPath = makePath(context.root, resource.id) + await fs.writeFile(fullPath, resource.content) return await read(context, resource.id) } const read = async (context, id) => { + const fullPath = makePath(context.root, id) + let content = `` - if (fileExists(id)) { - content = await fs.readFile(id, `utf8`) + if (fileExists(fullPath)) { + content = await fs.readFile(fullPath, `utf8`) } else { return undefined } @@ -40,7 +45,9 @@ const read = async (context, id) => { } const destroy = async (context, fileResource) => { - await fs.unlink(fileResource.path) + const fullPath = makePath(context.root, fileResource.id) + await fs.unlink(fullPath) + return fileResource } // TODO pass action to plan @@ -48,15 +55,16 @@ module.exports.plan = async (context, { id, path: filePath, content }) => { let fullPath if (!id) { fullPath = path.join(context.root, filePath) + fullPath = makePath(context.root, filePath) } else { - fullPath = id + fullPath = makePath(context.root, id) } const currentResource = await read(context, fullPath) return { currentState: currentResource && currentResource.content, newState: content, - describe: `Write ${fullPath}`, + describe: `Write ${filePath}`, } } From bb7a4c9a7c245a3ca8604e3b9845707588232347 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 6 Apr 2020 18:20:53 -0700 Subject: [PATCH 036/128] Fix --- packages/gatsby/src/recipes/graphql.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 58703e77f8aba..891bed917db70 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -16,7 +16,7 @@ const pkgDir = require(`pkg-dir`) const recipeMachine = require(`./recipe-machine`) const createTypes = require(`./create-types`) -const SITE_ROOT = pkgDir(process.cwd()) +const SITE_ROOT = pkgDir.sync(process.cwd()) const pubsub = new PubSub() const PORT = 4000 From 07860d6b358ac29fc3c00d0c8ed8180fbc9c7a90 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 6 Apr 2020 20:40:20 -0700 Subject: [PATCH 037/128] update tests --- .../src/recipes/__snapshots__/create-types.test.js.snap | 4 ++++ .../src/recipes/__snapshots__/recipe-machine.test.js.snap | 4 +--- packages/gatsby/src/recipes/todo.md | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap index ec6e8af2e49a8..e2652b8bfa349 100644 --- a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -2,6 +2,10 @@ exports[`create-types 1`] = ` Object { + "allGatsbyPlugin": Object { + "resolve": [Function], + "type": "GatsbyPluginConnection", + }, "file": Object { "args": Object { "id": Object { diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 0f2c58710ca2b..104a1adb3d54f 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -3,9 +3,7 @@ exports[`should create plan for File resources 1`] = ` Array [ Object { - "currentState": Object { - "content": "", - }, + "currentState": undefined, "describe": "Write ./hi.md", "newState": "#yo", "resource": Array [ diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index be272869191e5..065cdaa46611d 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -29,7 +29,7 @@ - [ ] use yarn/npm based on the user config - [x] convert to xstate - [ ] reasonably test resources -- [ ] add Joi for validating resource objects +- [x] add Joi for validating resource objects - [ ] handle error states - [x] handle template strings in JSX parser - [ ] integration test for each resource (read, create, update, delete) From c88c6a54ff4bc38770c41afe837786bebf979b38 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 6 Apr 2020 21:19:13 -0700 Subject: [PATCH 038/128] Write e2e tests for npm package scripts & add validate/all implementations --- .../__snapshots__/create-types.test.js.snap | 13 ++ .../gatsby/__snapshots__/plugin.test.js.snap | 111 ++++++++++-------- .../npm/__snapshots__/script.test.js.snap | 35 ++++++ .../providers/npm/fixtures/package.json | 3 +- .../src/recipes/providers/npm/script.js | 52 ++++++-- .../src/recipes/providers/npm/script.test.js | 18 +++ 6 files changed, 175 insertions(+), 57 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap create mode 100644 packages/gatsby/src/recipes/providers/npm/script.test.js diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap index e2652b8bfa349..df79f2636a313 100644 --- a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -6,6 +6,10 @@ Object { "resolve": [Function], "type": "GatsbyPluginConnection", }, + "allNPMScript": Object { + "resolve": [Function], + "type": "NPMScriptConnection", + }, "file": Object { "args": Object { "id": Object { @@ -33,5 +37,14 @@ Object { "resolve": [Function], "type": "NPMPackageJson", }, + "npmScript": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "NPMScript", + }, } `; diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index d4a38df527514..e8efd14ac8e44 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -54,58 +54,75 @@ Object { exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create plan 1`] = ` Object { - "currentState": "const redish = \`#c5484d\`; + "currentState": "const redish = \`#c5484d\` module.exports = { siteMetadata: { title: \`Bricolage\`, author: \`Kyle Mathews\`, - homeCity: \`San Francisco\` + homeCity: \`San Francisco\`, }, - plugins: [{ - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\` - } - }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\` - } - }, { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [{ - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590 - } - }, { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\` - } - }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] - } - }, \`gatsby-plugin-sharp\`, { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\` - } - }, { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\` - } - }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`] -};", + plugins: [ + { + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\`, + }, + }, + \`gatsby-transformer-sharp\`, + \`gatsby-plugin-emotion\`, + { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\`, + }, + }, + { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [ + { + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590, + }, + }, + { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\`, + }, + }, + \`gatsby-remark-prismjs\`, + \`gatsby-remark-copy-linked-files\`, + \`gatsby-remark-smartypants\`, + ], + }, + }, + \`gatsby-plugin-sharp\`, + { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\`, + }, + }, + { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\`, + }, + }, + \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, + ], +} +", "describe": "Configure gatsby-plugin-foo", "id": "gatsby-plugin-foo", "name": "gatsby-plugin-foo", diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap new file mode 100644 index 0000000000000..2b5a96ba6630b --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`npm script resource e2e script resource test: NPMScript create 1`] = ` +Object { + "command": "foot", + "id": "apple", + "name": "apple", +} +`; + +exports[`npm script resource e2e script resource test: NPMScript create plan 1`] = ` +Object { + "currentState": "\\"apple\\": \\"ooo", + "describe": "Add new command to your package.json — \\"apple\\": \\"foot", + "newState": "\\"apple\\": \\"foot", +} +`; + +exports[`npm script resource e2e script resource test: NPMScript destroy 1`] = `undefined`; + +exports[`npm script resource e2e script resource test: NPMScript update 1`] = ` +Object { + "command": "foot2", + "id": "apple", + "name": "apple", +} +`; + +exports[`npm script resource e2e script resource test: NPMScript update plan 1`] = ` +Object { + "currentState": "\\"apple\\": \\"foot", + "describe": "Add new command to your package.json — \\"apple\\": \\"foot2", + "newState": "\\"apple\\": \\"foot2", +} +`; diff --git a/packages/gatsby/src/recipes/providers/npm/fixtures/package.json b/packages/gatsby/src/recipes/providers/npm/fixtures/package.json index 2f37dc5b09394..3e53932c9b0a5 100644 --- a/packages/gatsby/src/recipes/providers/npm/fixtures/package.json +++ b/packages/gatsby/src/recipes/providers/npm/fixtures/package.json @@ -1,3 +1,4 @@ { - "name": "test" + "name": "test", + "scripts": {} } \ No newline at end of file diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index a58c0ee68f13b..cea6d49c76bf3 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -1,7 +1,7 @@ const fs = require(`fs`) const path = require(`path`) +const Joi = require(`@hapi/joi`) const { promisify } = require(`util`) - const readFile = promisify(fs.readFile) const writeFile = promisify(fs.writeFile) @@ -23,15 +23,22 @@ const create = async ({ root }, { name, command }) => { pkg.scripts = pkg.scripts || {} pkg.scripts[name] = command await writePackageJson(root, pkg) + + return await read({ root }, name) } -const read = async ({ root }, { name }) => { +const read = async ({ root }, id) => { const pkg = await readPackageJson(root) - return { - name, - command: pkg.scripts && pkg.scripts[name], + if (pkg.scripts && pkg.scripts[id]) { + return { + id, + name: id, + command: pkg.scripts[id], + } } + + return undefined } const destroy = async ({ root }, { name }) => { @@ -41,11 +48,38 @@ const destroy = async ({ root }, { name }) => { await writePackageJson(root, pkg) } -module.exports.plan = async context => { +module.exports.validate = () => { + return { + name: Joi.string(), + command: Joi.string(), + } +} + +module.exports.all = async ({ root }) => { + const pkg = await readPackageJson(root) + const scripts = pkg.scripts || {} + + return Object.entries(scripts).map(arr => { + return { name: arr[0], command: arr[1] } + }) +} + +module.exports.plan = async ({ root }, { name, command }) => { + const resource = await read({ root }, name) + + const scriptDescription = (name, command) => `"${name}": "${command}` + + let currentState = `` + if (resource) { + currentState = scriptDescription(resource.name, resource.command) + } return { - currentState: ``, - newState: ``, - describe: `do stuff`, + currentState, + newState: scriptDescription(name, command), + describe: `Add new command to your package.json — ${scriptDescription( + name, + command + )}`, } } diff --git a/packages/gatsby/src/recipes/providers/npm/script.test.js b/packages/gatsby/src/recipes/providers/npm/script.test.js new file mode 100644 index 0000000000000..6b01cde109914 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/script.test.js @@ -0,0 +1,18 @@ +const path = require(`path`) + +const script = require(`./script`) +const resourceTestHelper = require(`../resource-test-helper`) + +const root = path.join(__dirname, `fixtures`) + +describe(`npm script resource`, () => { + test(`e2e script resource test`, async () => { + await resourceTestHelper({ + resourceModule: script, + resourceName: `NPMScript`, + context: { root }, + initialObject: { name: `apple`, command: `foot` }, + partialUpdate: { command: `foot2` }, + }) + }) +}) From fca6807b9b0df7e4ee37879e66837773915cab60 Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Tue, 7 Apr 2020 16:29:17 +0200 Subject: [PATCH 039/128] Fix recipes (#22885) * Log errors happening in startup * import joi -> import @hapi/joi * Support for object values --- packages/gatsby/src/commands/recipes.ts | 13 +++++++++---- .../npm/__snapshots__/package-json.test.js.snap | 10 ++++++++++ .../src/recipes/providers/npm/package-json.js | 2 +- .../recipes/providers/npm/package-json.test.js | 16 ++++++++++++++++ .../src/recipes/providers/resource-schema.js | 2 +- .../recipes/providers/resource-test-helper.js | 2 +- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index db10758566ba7..37206ed2c31b2 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -9,11 +9,17 @@ module.exports = async (program: IProgram): Promise => { // Start GraphQL serve let subprocess - const scriptPath = path.join(program.directory, `node_modules/gatsby/dist/recipes/graphql.js`) + const scriptPath = path.join( + program.directory, + `node_modules/gatsby/dist/recipes/graphql.js` + ) subprocess = execa(`node`, [scriptPath], { cwd: program.directory, all: true, }) + subprocess.stderr.on("data", data => { + console.log(data.toString()) + }) process.on("exit", () => subprocess.kill("SIGTERM", { forceKillAfterTimeout: 2000, @@ -21,9 +27,9 @@ module.exports = async (program: IProgram): Promise => { ) // Log server output to a file. if (process.env.DEBUG) { - const logFile = path.join(program.directory, './recipe-server.log') + const logFile = path.join(program.directory, "./recipe-server.log") fs.writeFileSync(logFile, `\n-----\n${new Date().toJSON()}\n`) - const writeStream = fs.createWriteStream(logFile, {flags:'a'}); + const writeStream = fs.createWriteStream(logFile, { flags: "a" }) subprocess.stdout.pipe(writeStream) } @@ -35,6 +41,5 @@ module.exports = async (program: IProgram): Promise => { started = true } }) - // Run command } diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap index 63133631bc138..142f48bace8e2 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap @@ -47,3 +47,13 @@ Object { }", } `; + +exports[`packageJson resource handles object values 1`] = ` +Object { + "id": "husky", + "name": "husky", + "value": "{ + \\"hooks\\": {} +}", +} +`; diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index 82e0ddad497df..cf7686952d0d8 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -21,7 +21,7 @@ const writePackageJson = async (root, obj) => { const create = async ({ root }, { name, value }) => { const pkg = await readPackageJson(root) - pkg[name] = JSON.parse(value) + pkg[name] = typeof value === `string` ? JSON.parse(value) : value await writePackageJson(root, pkg) diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.test.js b/packages/gatsby/src/recipes/providers/npm/package-json.test.js index 99b82585b34b3..3210ea086bda5 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.test.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.test.js @@ -33,4 +33,20 @@ describe(`packageJson resource`, () => { partialUpdate: { value: updateValue }, }) }) + + test(`handles object values`, async () => { + const result = await pkgJson.create( + { + root, + }, + { + name, + value: JSON.parse(initialValue), + } + ) + + expect(result).toMatchSnapshot() + + await pkgJson.destroy({ root }, result) + }) }) diff --git a/packages/gatsby/src/recipes/providers/resource-schema.js b/packages/gatsby/src/recipes/providers/resource-schema.js index 39a31e58f10d8..7e45505f57f87 100644 --- a/packages/gatsby/src/recipes/providers/resource-schema.js +++ b/packages/gatsby/src/recipes/providers/resource-schema.js @@ -1,4 +1,4 @@ -const Joi = require(`joi`) +const Joi = require(`@hapi/joi`) // heh // createResource —> when comes from the user diff --git a/packages/gatsby/src/recipes/providers/resource-test-helper.js b/packages/gatsby/src/recipes/providers/resource-test-helper.js index 56ecdaf732f8e..01a5be3821d91 100644 --- a/packages/gatsby/src/recipes/providers/resource-test-helper.js +++ b/packages/gatsby/src/recipes/providers/resource-test-helper.js @@ -1,5 +1,5 @@ const resourceSchema = require(`./resource-schema`) -const Joi = require(`joi`) +const Joi = require(`@hapi/joi`) module.exports = async ({ resourceModule: resource, From fb46a1ea3278a648f66309a697a96024e510e6ed Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Tue, 7 Apr 2020 17:23:27 +0200 Subject: [PATCH 040/128] Fix some more recipes (#22889) * Log errors happening in startup * import joi -> import @hapi/joi * Support for object values * Fix serial/batch/parallel * resource => resourceDefinition --- packages/gatsby/src/recipes/apply-plan.js | 29 +++++++++++++++---- packages/gatsby/src/recipes/create-plan.js | 8 +++-- packages/gatsby/src/recipes/recipe-machine.js | 6 ++-- packages/gatsby/src/recipes/todo.md | 1 + 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js index c2921d3c591d3..d730ef818f3f2 100644 --- a/packages/gatsby/src/recipes/apply-plan.js +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -2,12 +2,29 @@ const resources = require(`./resources`) const SITE_ROOT = process.cwd() const ctx = { root: SITE_ROOT } -const applyPlan = async plan => { - const resource = resources[plan.resourceName] - - const result = await Promise.all( - plan.resource.map(r => resource.create(ctx, r)) - ) +const asyncForEach = async (array, callback) => { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array) + } } +const applyPlan = async stepPlan => + await asyncForEach(stepPlan, async resourcePlan => { + const resource = resources[resourcePlan.resourceName] + + if (resource.config?.serial) { + return await asyncForEach(resourcePlan.resourceDefinitions, r => + resource.create(ctx, r) + ) + } + + if (resource.config?.batch) { + return await resource.create(ctx, resourcePlan.resourceDefinitions) + } + + return await Promise.all( + resourcePlan.resourceDefinitions.map(r => resource.create(ctx, r)) + ) + }) + module.exports = applyPlan diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js index b53ae631cde6b..6429c020717d8 100644 --- a/packages/gatsby/src/recipes/create-plan.js +++ b/packages/gatsby/src/recipes/create-plan.js @@ -27,14 +27,18 @@ module.exports = async context => { // Does the resource support batching? if (resource && resource.config && resource.config.batch) { const cmdPlan = await resource.plan(ctx, val) - planForNextStep.push({ resourceName: key, resource: val, ...cmdPlan }) + planForNextStep.push({ + resourceName: key, + resourceDefinitions: val, + ...cmdPlan, + }) } else { await asyncForEach(cmds[key], async cmd => { try { const commandPlan = await resource.plan(ctx, cmd) planForNextStep.push({ resourceName: key, - resource: val, + resourceDefinitions: val, ...commandPlan, }) } catch (e) { diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index 8d4537b95d60a..3b3cd2a653f7c 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -54,12 +54,10 @@ const recipeMachine = Machine( id: `applyPlan`, src: async (context, event) => { if (context.plan.length == 0) { - return + return undefined } - await Promise.all( - context.plan.map(resourcePlan => applyPlan(resourcePlan)) - ) + return applyPlan(context.plan) }, onDone: `hasAnotherStep`, onError: { diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 065cdaa46611d..9332a4016b137 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -39,3 +39,4 @@ - [ ] Make a proper "Config" provider to add recipes dir, store data, etc. - [ ] Move parsing to the server - [ ] init.js for providers to setup clients +- [ ] validate resource config From c8d103e8d66133d88d714d29a51bb317fa413fee Mon Sep 17 00:00:00 2001 From: Max Stoiber Date: Tue, 7 Apr 2020 17:51:35 +0200 Subject: [PATCH 041/128] Fix more recipes stuff (#22891) * Log errors happening in startup * import joi -> import @hapi/joi * Support for object values * Fix serial/batch/parallel * resource => resourceDefinition * Add ids to allNPMScript * Fix snapshot * Add allNPMPackageJson --- .../providers/npm/__snapshots__/script.test.js.snap | 2 +- .../gatsby/src/recipes/providers/npm/package-json.js | 11 +++++++++++ packages/gatsby/src/recipes/providers/npm/script.js | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap index 2b5a96ba6630b..9af551ca5b1e8 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap @@ -10,7 +10,7 @@ Object { exports[`npm script resource e2e script resource test: NPMScript create plan 1`] = ` Object { - "currentState": "\\"apple\\": \\"ooo", + "currentState": "", "describe": "Add new command to your package.json — \\"apple\\": \\"foot", "newState": "\\"apple\\": \\"foot", } diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index cf7686952d0d8..97f0fe507f296 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -69,6 +69,17 @@ module.exports.plan = async ({ root }, { id, name, value }) => { } } +module.exports.all = async ({ root }) => { + const pkg = await readPackageJson(root) + + return Object.keys(pkg).map(key => { + return { + name: key, + value: JSON.stringify(pkg[key]), + } + }) +} + module.exports.create = create module.exports.update = create module.exports.read = read diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index cea6d49c76bf3..8893c52664ad0 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -60,7 +60,7 @@ module.exports.all = async ({ root }) => { const scripts = pkg.scripts || {} return Object.entries(scripts).map(arr => { - return { name: arr[0], command: arr[1] } + return { name: arr[0], command: arr[1], id: arr[0] } }) } From 04ac784f204c9283f999d9128fa7af0428220bec Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 7 Apr 2020 08:52:56 -0700 Subject: [PATCH 042/128] Fix typo --- packages/gatsby/src/recipes/jest.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/jest.mdx b/packages/gatsby/src/recipes/jest.mdx index ba97b3fcd5ad6..e5142bb1bc8f1 100644 --- a/packages/gatsby/src/recipes/jest.mdx +++ b/packages/gatsby/src/recipes/jest.mdx @@ -3,7 +3,7 @@ This recipe helps you setup Jest in your Gatsby site to test components and utilities --- From 6d390c53e52792427d0ea691729cbdc86ce0d970 Mon Sep 17 00:00:00 2001 From: John Otander Date: Tue, 7 Apr 2020 17:25:49 -0600 Subject: [PATCH 043/128] feat(recipes): Implement shadowable files for themes (#22909) --- packages/gatsby/src/recipes/apply-plan.js | 4 +- packages/gatsby/src/recipes/create-types.js | 10 +- .../gatsby/src/recipes/joi-to-graphql/LICENSE | 35 +++ .../recipes/joi-to-graphql/helpers/index.js | 6 + .../joi-to-graphql/helpers/joi-to-graphql.js | 217 ++++++++++++++++++ .../joi-to-graphql/helpers/type-dictionary.js | 25 ++ .../src/recipes/joi-to-graphql/index.js | 2 + .../joi-to-graphql/methods/composeSchema.js | 66 ++++++ .../joi-to-graphql/methods/composeType.js | 29 +++ .../src/recipes/providers/gatsby/plugin.js | 32 +++ 10 files changed, 421 insertions(+), 5 deletions(-) create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/LICENSE create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/helpers/index.js create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/helpers/joi-to-graphql.js create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/helpers/type-dictionary.js create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/index.js create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js create mode 100644 packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js index d730ef818f3f2..6f8d50fe9f41f 100644 --- a/packages/gatsby/src/recipes/apply-plan.js +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -12,13 +12,13 @@ const applyPlan = async stepPlan => await asyncForEach(stepPlan, async resourcePlan => { const resource = resources[resourcePlan.resourceName] - if (resource.config?.serial) { + if (resource.config && resource.config.serial) { return await asyncForEach(resourcePlan.resourceDefinitions, r => resource.create(ctx, r) ) } - if (resource.config?.batch) { + if (resource.config && resource.config.batch) { return await resource.create(ctx, resourcePlan.resourceDefinitions) } diff --git a/packages/gatsby/src/recipes/create-types.js b/packages/gatsby/src/recipes/create-types.js index 0630c9b075520..79fefb76c45d9 100644 --- a/packages/gatsby/src/recipes/create-types.js +++ b/packages/gatsby/src/recipes/create-types.js @@ -1,4 +1,4 @@ -const Joi2GQL = require(`joi2gql`) +const Joi2GQL = require(`./joi-to-graphql`) const Joi = require(`@hapi/joi`) const { GraphQLString, GraphQLObjectType, GraphQLList } = require(`graphql`) const _ = require(`lodash`) @@ -26,6 +26,7 @@ module.exports = () => { const joiSchema = Joi.object().keys({ ...resource.validate(), ...resourceSchema, + _typeName: Joi.string(), }) const type = Joi2GQL.transmuteType(joiSchema, { @@ -37,9 +38,12 @@ module.exports = () => { args: { id: { type: GraphQLString }, }, - resolve: async (_root, args, context) => - await resource.read(context, args.id), + resolve: async (_root, args, context) => { + const value = await resource.read(context, args.id) + return { ...value, _typeName: resourceName } + }, } + types.push(resourceType) if (resource.all) { diff --git a/packages/gatsby/src/recipes/joi-to-graphql/LICENSE b/packages/gatsby/src/recipes/joi-to-graphql/LICENSE new file mode 100644 index 0000000000000..0457d6ab90635 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/LICENSE @@ -0,0 +1,35 @@ +BSD 3-Clause License + +Copyright (c) 2017, Project contributors +Copyright (c) 2017, XO Group +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + * * * + +The complete list of contributors can be found at: https://github.com/xogroup/joi2gql/graphs/contributors diff --git a/packages/gatsby/src/recipes/joi-to-graphql/helpers/index.js b/packages/gatsby/src/recipes/joi-to-graphql/helpers/index.js new file mode 100644 index 0000000000000..e952f560806b9 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/helpers/index.js @@ -0,0 +1,6 @@ +"use strict" + +module.exports = { + joiToGraphql: require(`./joi-to-graphql`), + typeDictionary: require(`./type-dictionary`), +} diff --git a/packages/gatsby/src/recipes/joi-to-graphql/helpers/joi-to-graphql.js b/packages/gatsby/src/recipes/joi-to-graphql/helpers/joi-to-graphql.js new file mode 100644 index 0000000000000..3dff3b8bc7d69 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/helpers/joi-to-graphql.js @@ -0,0 +1,217 @@ +"use strict" + +const { + GraphQLObjectType, + GraphQLInputObjectType, + GraphQLList, +} = require(`graphql`) +const TypeDictionary = require(`./type-dictionary`) +const Hoek = require(`hoek`) +const internals = {} +let cache = {} +const lazyLoadQueue = [] + +module.exports = constructor => { + let target + const { name, args, resolve, description } = constructor._meta[0] + + Hoek.assert( + Hoek.reach(constructor, `_inner.children.length`) > 0, + `Joi object must have at least 1 key` + ) + + const compiledFields = internals.buildFields(constructor._inner.children) + + if (lazyLoadQueue.length) { + target = new GraphQLObjectType({ + name, + description, + fields: function() { + return compiledFields(target) + }, + args: internals.buildArgs(args), + resolve, + }) + } else { + target = new GraphQLObjectType({ + name, + description, + fields: compiledFields(), + args: internals.buildArgs(args), + resolve, + }) + } + + return target +} + +internals.buildEnumFields = values => { + const attrs = {} + + for (let i = 0; i < values.length; ++i) { + attrs[values[i].value] = { value: values[i].derivedFrom } + } + + return attrs +} + +internals.setType = schema => { + // Helpful for Int or Float + + if (schema._tests.length) { + if (schema._flags.presence) { + return { + type: new TypeDictionary.required( + TypeDictionary[schema._tests[0].name] + ), + } + } + + return { type: TypeDictionary[schema._tests[0].name] } + } + + if (schema._flags.presence === `required`) { + return { type: new TypeDictionary.required(TypeDictionary[schema._type]) } + } + + if (schema._flags.allowOnly) { + // GraphQLEnumType + + const name = Hoek.reach(schema, `_meta.0.name`) || `Anon` + + const config = { + name, + values: internals.buildEnumFields(schema._valids._set), + } + + return { type: new TypeDictionary.enum(config) } + } + + return { type: TypeDictionary[schema._type] } +} + +internals.processLazyLoadQueue = (attrs, recursiveType) => { + for (let i = 0; i < lazyLoadQueue.length; ++i) { + if (lazyLoadQueue[i].type === `object`) { + attrs[lazyLoadQueue[i].key] = { type: recursiveType } + } else { + attrs[lazyLoadQueue[i].key] = { + type: new TypeDictionary[lazyLoadQueue[i].type](recursiveType), + } + } + } + + return attrs +} + +internals.buildFields = fields => { + const attrs = {} + + for (let i = 0; i < fields.length; ++i) { + const field = fields[i] + const key = field.key + + if (field.schema._type === `object`) { + const Type = new GraphQLObjectType({ + name: field.key.charAt(0).toUpperCase() + field.key.slice(1), + fields: internals.buildFields(field.schema._inner.children), + }) + + attrs[key] = { + type: Type, + } + + cache[key] = Type + } + + if (field.schema._type === `array`) { + let Type + const pathToMethod = `schema._inner.items.0._flags.lazy` + + if (Hoek.reach(field, pathToMethod)) { + Type = field.schema._inner.items[0]._description + + lazyLoadQueue.push({ + key, + type: field.schema._type, + }) + } else { + Hoek.assert( + field.schema._inner.items.length > 0, + `Need to provide scalar type as an item when using joi array` + ) + + if (Hoek.reach(field, `schema._inner.items.0._type`) === `object`) { + const { name } = Hoek.reach(field, `schema._inner.items.0._meta.0`) + const Item = new GraphQLObjectType({ + name, + fields: internals.buildFields( + field.schema._inner.items[0]._inner.children + ), + }) + Type = new GraphQLList(Item) + } else { + Type = new GraphQLList( + TypeDictionary[field.schema._inner.items[0]._type] + ) + } + } + + attrs[key] = { + type: Type, + } + + cache[key] = Type + } + + if (field.schema._type === `lazy`) { + const Type = field.schema._description + + lazyLoadQueue.push({ + key, + type: `object`, + }) + + attrs[key] = { + type: Type, + } + + cache[key] = Type + } + + if (cache[key]) { + continue + } + + attrs[key] = internals.setType(field.schema) + } + + cache = Object.create(null) //Empty cache + + return function(recursiveType) { + if (recursiveType) { + return internals.processLazyLoadQueue(attrs, recursiveType) + } + + return attrs + } +} + +internals.buildArgs = args => { + const argAttrs = {} + + for (const key in args) { + if (args[key]._type === `object`) { + argAttrs[key] = { + type: new GraphQLInputObjectType({ + name: key.charAt(0).toUpperCase() + key.slice(1), + fields: internals.buildFields(args[key]._inner.children), + }), + } + } else { + argAttrs[key] = { type: TypeDictionary[args[key]._type] } + } + } + + return argAttrs +} diff --git a/packages/gatsby/src/recipes/joi-to-graphql/helpers/type-dictionary.js b/packages/gatsby/src/recipes/joi-to-graphql/helpers/type-dictionary.js new file mode 100644 index 0000000000000..29a67491b2da4 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/helpers/type-dictionary.js @@ -0,0 +1,25 @@ +"use strict" + +const { + GraphQLObjectType, + GraphQLString, + GraphQLID, + GraphQLFloat, + GraphQLInt, + GraphQLList, + GraphQLBoolean, + GraphQLNonNull, + GraphQLEnumType, +} = require(`graphql`) + +module.exports = { + object: GraphQLObjectType, + string: GraphQLString, + guid: GraphQLID, + integer: GraphQLInt, + number: GraphQLFloat, + array: GraphQLList, + boolean: GraphQLBoolean, + required: GraphQLNonNull, + enum: GraphQLEnumType, +} diff --git a/packages/gatsby/src/recipes/joi-to-graphql/index.js b/packages/gatsby/src/recipes/joi-to-graphql/index.js new file mode 100644 index 0000000000000..c03a004fc1415 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/index.js @@ -0,0 +1,2 @@ +exports.transmuteType = exports.type = require(`./methods/composeType`) +exports.transmuteSchema = exports.schema = require(`./methods/composeSchema`) diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js new file mode 100644 index 0000000000000..47be6a04ba468 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js @@ -0,0 +1,66 @@ +"use strict" + +const { GraphQLObjectType, GraphQLSchema } = require(`graphql`) +const Hoek = require(`hoek`) +const Joi = require(`joi`) +const { typeDictionary } = require(`../helpers`) +const internals = {} + +internals.inputSchema = Joi.object().keys({ + query: Joi.object(), + mutation: Joi.object(), + subscription: Joi.object(), +}) + +module.exports = (schema = {}) => { + schema = Joi.attempt(schema, internals.inputSchema) + + Hoek.assert(Object.keys(schema).length > 0, `Must provide a schema`) + + const attrs = {} + + if (schema.query) { + attrs.query = new GraphQLObjectType({ + name: `Query`, + fields: internals.buildFields(schema.query), + }) + } + + if (schema.mutation) { + attrs.query = new GraphQLObjectType({ + name: `Mutation`, + fields: internals.buildFields(schema.mutation), + }) + } + + if (schema.subscription) { + attrs.query = new GraphQLObjectType({ + name: `Subscription`, + fields: internals.buildFields(schema.subscription), + }) + } + + return new GraphQLSchema(attrs) +} + +internals.buildFields = obj => { + const attrs = {} + + for (const key in obj) { + if (obj[key].isJoi) { + attrs[key] = { + type: typeDictionary[obj[key]._type], + resolve: obj[key]._meta.find(item => item.resolve instanceof Function) + .resolve, + } + } else { + attrs[key] = { + type: obj[key], + args: obj[key]._typeConfig.args, + resolve: obj[key]._typeConfig.resolve, + } + } + } + + return attrs +} diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js new file mode 100644 index 0000000000000..0220d53b0ebd2 --- /dev/null +++ b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js @@ -0,0 +1,29 @@ +"use strict" + +const Hoek = require(`hoek`) +const Joi = require(`joi`) +const { joiToGraphql } = require(`../helpers`) + +const internals = {} + +internals.configSchema = Joi.object().keys({ + name: Joi.string().default(`Anon`), + args: Joi.object(), + resolve: Joi.func(), + description: Joi.string(), +}) + +module.exports = (schema, config = {}) => { + config = Joi.attempt(config, internals.configSchema) + + Hoek.assert(typeof schema !== `undefined`, `schema argument must be defined`) + + const typeConstructor = schema.meta(config) + + Hoek.assert( + typeConstructor._type === `object`, + `schema must be a Joi Object type.` + ) + + return joiToGraphql(typeConstructor) +} diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 38d24d7c7386d..29005c7a03c06 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -2,9 +2,31 @@ const fs = require(`fs-extra`) const path = require(`path`) const babel = require(`@babel/core`) const Joi = require(`@hapi/joi`) +const glob = require(`glob`) const declare = require(`@babel/helper-plugin-utils`).declare +const fileExists = filePath => fs.existsSync(filePath) + +const listShadowableFilesForTheme = (directory, theme) => { + const fullThemePath = path.join(directory, `node_modules`, theme, `src`) + const shadowableThemeFiles = glob.sync(fullThemePath + `/**/*.*`, { + follow: true, + }) + + const toShadowPath = filePath => { + const themePath = filePath.replace(fullThemePath, ``) + return path.join(`src`, theme, themePath) + } + + const shadowPaths = shadowableThemeFiles.map(toShadowPath) + + const shadowedFiles = shadowPaths.filter(fileExists) + const shadowableFiles = shadowPaths.filter(filePath => !fileExists(filePath)) + + return { shadowedFiles, shadowableFiles } +} + const isDefaultExport = node => { if (!node || node.type !== `MemberExpression`) { return false @@ -181,6 +203,7 @@ module.exports.create = create module.exports.update = create module.exports.read = read module.exports.destroy = destroy +module.exports.config = {} module.exports.all = async ({ root }) => { const configPath = path.join(root, `gatsby-config.js`) @@ -189,9 +212,16 @@ module.exports.all = async ({ root }) => { // TODO: Consider mapping to read function return plugins.map(name => { + const { shadowedFiles, shadowableFiles } = listShadowableFilesForTheme( + root, + name + ) + return { id: name, name, + shadowedFiles, + shadowableFiles, } }) } @@ -199,6 +229,8 @@ module.exports.all = async ({ root }) => { module.exports.validate = () => { return { name: Joi.string(), + shadowableFiles: Joi.array().items(Joi.string()), + shadowedFiles: Joi.array().items(Joi.string()), } } From a08e7677f9c0fd54eb692aa571d4f2694824b771 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 7 Apr 2020 17:42:53 -0700 Subject: [PATCH 044/128] feat(recipes): iterate on recipe design (#22911) --- packages/gatsby/src/recipes/cli.js | 120 +++++++++++++++--- packages/gatsby/src/recipes/create-plan.js | 4 + packages/gatsby/src/recipes/eslint.mdx | 7 +- packages/gatsby/src/recipes/graphql.js | 13 +- .../src/recipes/providers/gatsby/plugin.js | 2 +- .../src/recipes/providers/npm/script.js | 4 +- packages/gatsby/src/recipes/todo.md | 9 +- 7 files changed, 127 insertions(+), 32 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index a0320e8da0d6e..b809d95af2245 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -3,8 +3,8 @@ const path = require(`path`) const { inspect } = require(`util`) const React = require(`react`) -const { useState, useContext } = require(`react`) -const { render, Box, Text, useInput, useApp } = require(`ink`) +const { useState, useContext, useEffect } = require(`react`) +const { render, Box, Text, useInput, useApp, Static } = require(`ink`) const Spinner = require(`ink-spinner`).default const Link = require(`ink-link`) const MDX = require(`@mdx-js/runtime`) @@ -26,6 +26,7 @@ const PlanDescribe = ({ resourceName }) => { const { planForNextStep = [] } = usePlan() const plans = planForNextStep.filter(p => p.resourceName === resourceName) + return null return ( {plans.map((stepPlan, i) => ( @@ -35,9 +36,17 @@ const PlanDescribe = ({ resourceName }) => { ) } +const Div = props => ( + +) + const components = { inlineCode: props => , - h1: props => , + h1: props => ( +
+ +
+ ), h2: props => , h3: props => , h4: props => , @@ -55,19 +64,15 @@ const components = { {...props} /> ), + ul: props =>
{props.children}
, li: props => * {props.children}, Config: () => null, GatsbyPlugin: () => , NPMPackageJson: () => , - NPMPackage: ({ name }) => ( - // const { planForNextStep = [] } = usePlan() - - - * {name} - - ), + NPMPackage: () => null, File: () => , ShadowFile: () => , + NPMScript: () => null, } const isRelative = path => { @@ -149,10 +154,6 @@ module.exports = ({ recipe, projectRoot }) => { const { commands: allCommands, stepsAsMdx: stepsAsMDX } = parsed - const Div = props => ( - - ) - class ErrorBoundary extends React.Component { constructor(props) { super(props) @@ -179,6 +180,7 @@ module.exports = ({ recipe, projectRoot }) => { } } + let renderCount = 1 const RecipeInterpreter = ({ commands }) => { const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() @@ -226,12 +228,20 @@ module.exports = ({ recipe, projectRoot }) => { } }) - log(`render`, new Date().toJSON()) + /* + * TODOs + * on last step w/ no plan just exit + * show what's happened in Static — probably the state machine should put these in new context key. + */ + + log(`render`, `${renderCount} ${new Date().toJSON()}`) + renderCount += 1 if (!subscriptionResponse.data) { return null } + // If we're done, exit. if (state.value === `done`) { process.exit() } @@ -241,14 +251,90 @@ module.exports = ({ recipe, projectRoot }) => { log(`plan`, state.context.plan) } + const PresentStep = ({ state }) => { + const isPlan = state.context.plan && state.context.plan.length > 0 + const isPresetPlanState = state.value === `present plan` + const isRunningStep = state.value === `applyingPlan` + + if (isRunningStep) { + return null + } + + if (!isPlan || !isPresetPlanState) { + return ( +
+ Press enter to continue +
+ ) + } + + return ( +
+ {state.context.plan.map(p => { + return ( +
+ {p.resourceName}: + * {p.describe} +
+ ) + })} +
+ Do you want to run this step? Y/n +
+
+ ) + } + + const RunningStep = ({ state }) => { + const isPlan = state.context.plan && state.context.plan.length > 0 + const isRunningStep = state.value === `applyingPlan` + + if (!isPlan || !isRunningStep) { + return null + } + + return ( +
+ {state.context.plan.map(p => { + return ( +
+ {p.resourceName}: + + {` `} + {p.describe} + +
+ ) + })} +
+ ) + } + + // + // Finished + // Step 1 + // ✅ Wrote out file to src/pages/what-about-bob.js + // Step 2 + // + // ✅ Shadowed file src/gatsby-theme-blog/foo.js from gatsby-theme-blog + // + // return ( + {state.context.currentStep > 0 && ( +
+ + Step {state.context.currentStep} /{` `} + {state.context.steps.length - 1} + +
+ )} {stepsAsMDX[state.context.currentStep]} - {` `} - Press enter to apply! + +
) diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js index 6429c020717d8..518ae55b95461 100644 --- a/packages/gatsby/src/recipes/create-plan.js +++ b/packages/gatsby/src/recipes/create-plan.js @@ -18,6 +18,10 @@ module.exports = async context => { const cmds = context.steps[context.currentStep] const commandPlans = Object.entries(cmds).map(async ([key, val]) => { const resource = resources[key] + // Filter out the Config resource + if (key === `Config`) { + return + } // Does this resource support creating a plan? if (!resource || !resource.plan) { diff --git a/packages/gatsby/src/recipes/eslint.mdx b/packages/gatsby/src/recipes/eslint.mdx index b11ada61cad03..60e51407acef7 100644 --- a/packages/gatsby/src/recipes/eslint.mdx +++ b/packages/gatsby/src/recipes/eslint.mdx @@ -1,5 +1,6 @@ # Add a custom ESLint config +## Introduction to ESLint ESLint is an open source JavaScript linting utility. Code linting is a type of static analysis that is frequently used to find problematic patterns. There are code linters for most programming languages, and compilers sometimes @@ -11,19 +12,19 @@ is typically executed in order to find syntax or other errors. Linting tools like ESLint allow developers to discover problems with their JavaScript code without executing it. -## How to use ESLint +## Why use this recipe Gatsby ships with a built-in ESLint setup. For most users, our built-in ESlint setup is all you need. If you know however that you’d like to customize your ESlint config e.g. your company has their own custom ESlint -setup, this shows how this can be done. +setup, this recipe sets this up for you. You’ll replicate (mostly) the ESLint config Gatsby ships with so you can then add additional presets, plugins, and rules. --- -Installing necessary packages +Install necessary packages diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 891bed917db70..572154aa816bb 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -52,11 +52,14 @@ const applyPlan = plan => { state: state.value, currentStep: state.context.currentStep, }) - emitOperation({ - context: state.context, - lastEvent: state.event, - value: state.value, - }) + // Wait until plans are created before updating the UI + if (state.value !== `creatingPlan`) { + emitOperation({ + context: state.context, + lastEvent: state.event, + value: state.value, + }) + } } }) diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 29005c7a03c06..8be3df2957373 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -245,6 +245,6 @@ module.exports.plan = async ({ root }, { id, name }) => { name, currentState: src, newState: newContents, - describe: `Configure ${fullName}`, + describe: `Install ${fullName} in gatsby-config.js`, } } diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index 8893c52664ad0..a28f8eb8b66b2 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -67,7 +67,7 @@ module.exports.all = async ({ root }) => { module.exports.plan = async ({ root }, { name, command }) => { const resource = await read({ root }, name) - const scriptDescription = (name, command) => `"${name}": "${command}` + const scriptDescription = (name, command) => `"${name}": "${command}"` let currentState = `` if (resource) { @@ -76,7 +76,7 @@ module.exports.plan = async ({ root }, { name, command }) => { return { currentState, newState: scriptDescription(name, command), - describe: `Add new command to your package.json — ${scriptDescription( + describe: `Add new command to your package.json:\n${scriptDescription( name, command )}`, diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 9332a4016b137..67cbde917be5e 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -6,13 +6,12 @@ - [x] Run as a command - [x] Boot up server as a process - [x] Then run the CLI -- [ ] Clean up server after +- [x] Clean up server after ## Near future - [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) - [ ] Document the supported components and trivial guide on recipe authoring (help) -- [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Move to more random port ## alpha @@ -21,7 +20,6 @@ - [ ] Make `dependencyType` in NPMPackage an enum - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [x] Step by step design -- [ ] Select input supported recipes - [ ] Make port selection dynamic - [x] Use `fs-extra` - [x] Handle object style plugins @@ -30,9 +28,10 @@ - [x] convert to xstate - [ ] reasonably test resources - [x] add Joi for validating resource objects -- [ ] handle error states - [x] handle template strings in JSX parser - [ ] integration test for each resource (read, create, update, delete) +- [ ] show plan to create/update or that nothing is necessary & then show in `` what was done +- [ ] handle error states ## Near-ish future @@ -40,3 +39,5 @@ - [ ] Move parsing to the server - [ ] init.js for providers to setup clients - [ ] validate resource config +- [ ] Theme UI preset selection (runs dependent install and file write) +- [ ] Select input supported recipes From 6b6704641dd410636019ff78678fe0ea6e7fc6d5 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 7 Apr 2020 19:27:39 -0700 Subject: [PATCH 045/128] Squashed master MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 5859bdbd5b34b8758e35959e8da96db1eb7b70cc Author: Pascal Jean-Francois Date: Tue Apr 7 23:38:19 2020 +0300 Recipe google analytics (#22648) * Update deploying-your-site.md * Added link from recipes page * chore: format * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update docs/docs/recipes/deploying-your-site.md Co-Authored-By: LB * Update deploying-your-site.md * chore: format * Minor formatting, finishing step Co-authored-by: gatsbybot Co-authored-by: LB Co-authored-by: Laurie Barth commit cc6dbf65f0f3c3052c922383f2f7f772f6cd3f12 Author: Peter van der Zee Date: Tue Apr 7 22:22:56 2020 +0200 chore(release): Publish - gatsby-image@2.3.2 - gatsby-plugin-mdx@1.1.6 - gatsby-theme-blog-core@1.3.15 - gatsby-theme-blog@1.4.15 - gatsby-theme-notes@1.2.14 commit cd120ae95de4f17a94b3002235d25cda812a219f Author: Peter van der Zee <209817+pvdz@users.noreply.github.com> Date: Tue Apr 7 22:16:06 2020 +0200 fix(gatsby-plugin-mdx): pass on proper `modules` option value to babel (#22903) commit ff500c4f0ecff53223001769a35f128cb09878d1 Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 7 22:09:26 2020 +0200 fix brand name (#22901) commit 45b4ddefccd696523b0efbba89db324230bd48eb Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 7 22:08:59 2020 +0200 fix brand name (#22902) commit ff48b22dc12fd29bbb401306f24856e55c2b7a81 Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 7 22:05:20 2020 +0200 fix toc (#22895) commit 60445cbc301e94aab01d9d60ac121abc406020d8 Author: LB Date: Tue Apr 7 15:54:18 2020 -0400 Update blogs with Gatsby Days info (#22900) Co-authored-by: Laurie Barth commit a171827f2e18b1cf3bb162a4df9eea570aa4b944 Author: Michelle Gienow Date: Tue Apr 7 14:55:52 2020 -0400 Fix Gatsby Days Virtual date Gatsby Days Virtual date has changed since publication, adjust text to reflect this. commit f95cd06bb8454ae3a9dd746f6e4fa3f12bdc3717 Author: Brad Garropy Date: Tue Apr 7 11:22:06 2020 -0500 update seo example to use location and static query hooks. (#22772) commit 0c480233824f85ef4ac1c02bb31329c997b538d3 Author: B4Le Date: Tue Apr 7 23:10:41 2020 +0700 [Docs] adding additional parameter for Install the Visual Studio 2015 Build Tools (#22653) commit 16f9b40a44ecbf2f3210dcaad76bd09c8cba8780 Author: Aisha Blake Date: Tue Apr 7 12:02:49 2020 -0400 chore(docs): Add Snipcart reference guide (#22628) * Draft beginning and end * Tweak Snipcart intro * Finish draft * chore: format * HTML to JSX highlighting and label * Apply suggestions from code review Co-Authored-By: Obinna Ekwuno * Add explanation for where to put product code * chore: format * Apply suggestions from code review Co-Authored-By: LB * Update docs/docs/adding-a-shopping-cart-with-snipcart.md * Update docs/docs/adding-a-shopping-cart-with-snipcart.md Co-Authored-By: LB Co-authored-by: gatsbybot Co-authored-by: Ekwuno Obinna Co-authored-by: LB commit 16984877481579a3aab739a42d90a3bf122175d6 Author: Vladimir Razuvaev Date: Tue Apr 7 22:54:45 2020 +0700 chore(benchmarks): Add ability to fix broken images for contentful sites (#22882) * chore(benchmarks): Add ability to fix broken images for contentful sites * fix: added missing await * fix: removed accidental console.log commit f19c4d7691d9e8e2c81575c4b10feecab27ba511 Author: Andrew Zeller Date: Tue Apr 7 06:14:56 2020 -0700 docs: add Gatsby Cloud documentation (#22708) * Add Gatsby Cloud documentation * Fix typo in Gatsby Cloud doc * Apply suggestions from code review Co-Authored-By: LB * Add sub-bullets to breakup long steps * Revise CMS integrations bullet * alter some formatting * Update docs/docs/deploying-to-gatsby-cloud.md Co-authored-by: LB Co-authored-by: Laurie Barth commit 2d147d3863a4e21f1de2b492f935502f70e16c46 Author: Michelle Gienow Date: Tue Apr 7 09:06:21 2020 -0400 Add Gatsby Days LA video blog number 6 (#22871) * Add Gatsby Days LA video blog number 6 * chore: format Co-authored-by: gatsbybot commit 80c453e288164260d472beff1b37548b5afe4f15 Author: Florian Gyger Date: Tue Apr 7 14:31:05 2020 +0200 fix(gatsby-image): apply IE polyfill styles to placeholder images too (#22863) * apply IE polyfill styles to placeholder images too * fixed formatting commit c16eaa25ea95addda5215d5c36324db7340d053c Author: Marcy Sutton Date: Tue Apr 7 05:12:03 2020 -0700 update contributing doc (#22874) commit 30397f3625328f666ddeb05affae5ca134ef4f86 Author: Mikhail Novikov Date: Tue Apr 7 12:24:33 2020 +0300 chore(release): Publish - gatsby-plugin-mdx@1.1.5 - gatsby-plugin-twitter@2.2.2 - gatsby-theme-blog-core@1.3.14 - gatsby-theme-blog@1.4.14 - gatsby-theme-notes@1.2.13 - gatsby@2.20.13 commit cb9692f6dfc65a5c0229b93aea992aaf2eac26fa Author: Mikhail Novikov Date: Tue Apr 7 11:59:50 2020 +0300 Use v8 serialize for context (#22851) commit 5c1d4a4f084bcf6123ef4d67ebe4f14940f39f07 Author: Michelle Gienow Date: Mon Apr 6 19:59:09 2020 -0400 Add Gatsby Days LA video blog 5 (#22870) * Add Gatsby Days LA video blog 5 * chore: format Co-authored-by: gatsbybot commit 8ef405bfdc8b3b9186ddb8631d50d260885df531 Author: LB Date: Mon Apr 6 17:06:13 2020 -0400 Improve README for twitter plugin (#22786) * Improve README for twitter plugin * Update packages/gatsby-plugin-twitter/README.md Co-Authored-By: Aisha Blake * Update packages/gatsby-plugin-twitter/README.md Co-Authored-By: Aisha Blake * Update packages/gatsby-plugin-twitter/README.md Co-Authored-By: Aisha Blake Co-authored-by: Laurie Barth Co-authored-by: Aisha Blake commit 87842fa994cc70111807b8b55b97128a58d51084 Author: LB Date: Mon Apr 6 17:05:44 2020 -0400 Add Cloud to Lighthouse Page (#22687) * Add Cloud to Lighthouse Page * Update docs/docs/audit-with-lighthouse.md Co-Authored-By: Aisha Blake * Update docs/docs/audit-with-lighthouse.md Co-Authored-By: Aisha Blake Co-authored-by: Laurie Barth Co-authored-by: Aisha Blake commit b0c564f21ff5cfb7e420dd970cdeb3dddeb0b3bf Author: Michelle Gienow Date: Mon Apr 6 16:53:45 2020 -0400 Update index.md (#22866) commit 24bc3eacccc19705283209ab76333991d15574bd Author: LB Date: Mon Apr 6 16:38:53 2020 -0400 Address inconsistency with gatsby-remark-images (#22666) Co-authored-by: Laurie Barth commit e24d333bedb6171fb0945366ba172538b26065a1 Author: Rohit Gohri Date: Tue Apr 7 00:59:06 2020 +0530 Fix transition-link installation docs link (#22865) commit 25c38abf798916da6ecf00b0ef0b5163cc94014e Author: Demetrio Alvarez Date: Mon Apr 6 21:02:17 2020 +0200 docs: fix references to undefined data variable (#22820) commit 9e4a2bbd4b3800cf4666a062ef97649b3bac6481 Author: Michelle Gienow Date: Mon Apr 6 13:58:58 2020 -0400 Blog gatsby days LA video 4 (#22793) * Add Gatsby Days LA 2020 Video Blog 3 * Create video blog post #4 * chore: format * move file, change name Co-authored-by: gatsbybot Co-authored-by: Laurie Barth commit a801a5d54ae5cb15e0eb5e59cc7ad63c71baf818 Author: Michelle Gienow Date: Mon Apr 6 13:03:12 2020 -0400 Blog virtual gatsby days cfp (#22796) * Add Laci Texter author avatar * Add Laci Texter to author.yaml * Create text for Virtual Gatsby Days CFP blog post * Update CFP text * chore: format Co-authored-by: gatsbybot Co-authored-by: LB commit 6009c0a2063cd7ac1330de746fa4e71b55dcbab6 Author: Brad Garropy Date: Mon Apr 6 11:04:48 2020 -0500 🏠 showcase bradgarropy.com (#22775) Co-authored-by: Kyle Gill commit da61143a0b095efb5a538a0636da1c05542d6f80 Author: Miloš Dželetović <32564651+Miloshinjo@users.noreply.github.com> Date: Mon Apr 6 18:01:13 2020 +0200 chore(starters): gatsby-ts-tw-styled-eslint-starter (#22835) * Add gatsby-ts-tw-styled-eslint-starter to starters.yml * Update starters.yml Co-authored-by: Kyle Gill commit 0c77a622bfe6bb38eefdb3e673e39a79b4ba5a27 Author: Tiffany Brown Date: Mon Apr 6 08:58:35 2020 -0700 Add docs/hydration entry. (#22767) - Update glossary.md, doc-links.yaml with links to new article. commit 2bee16e6e587e011ec586f4c09f7d589d91a87e7 Author: Martin Makarský Date: Mon Apr 6 17:54:36 2020 +0200 chore(starters): add gatsby-starter-kontent-lumen (#22850) * chore(starters): add gatsby-starter-kontent-lumen * remove invalidated categories Co-authored-by: gatsbybot Co-authored-by: Kyle Gill commit 8d01f2ac901992148453434fe60c3fda30b2b1fa Author: Wojciech Kałużny Date: Mon Apr 6 17:44:54 2020 +0200 Added mrkaluzny.com (#22836) * Added mrkaluzny.com Added new site to showcase * update invalid tag * prettier doc formatting Co-authored-by: Kyle Gill commit 036c3da86ed9f52ce9154e7c95dcbcd8421bd12c Author: caitlinthefirst Date: Mon Apr 6 11:27:33 2020 -0400 community event page update (#22800) * community event page update Updating to clarify that community support is currently suspended. * chore: format Co-authored-by: gatsbybot commit 9fb521a292d453146640f18437e13367c5a5cb5c Author: caitlinthefirst Date: Mon Apr 6 11:05:13 2020 -0400 Update "organize a community event" page (#22801) * Update "organize a community event" page Update to clarify that the program is on hold due to COVID-19. * chore: format Co-authored-by: gatsbybot commit 9b635cbde5003f8762f1c2c8fe983786fb9a3a90 Author: Akshit Kr Nagpal Date: Mon Apr 6 20:24:07 2020 +0530 feat(www): Add Community Plugin Badge (#21847) * Add Community Plugin Badge * Add Community Icon for plugins search body commit 4e1dc8a6368534ed6ebafa6705fe388e3935a680 Author: Rizwan Jamal ⚡️ Date: Mon Apr 6 19:27:23 2020 +0500 fix: fix grammar issues with formatting (#22808) commit 16793b313b44a7772b09e7051925630845ba2252 Author: Kevin Miller Date: Mon Apr 6 10:26:43 2020 -0400 chore(docs): Add site The COVID Tracking Project (#22828) Co-authored-by: LB commit 6e4cc15a61759bdeca2460e63d561c5226c15040 Author: Chris Opperwall Date: Mon Apr 6 07:22:04 2020 -0700 docs: use PageQuery in gatsby image example snippet (#22815) This updates the example snippets on the /docs/using-gatsby-image documentation page to use PageQueries instead of StaticQueries, because the example snippets have a src/pages/index.js filename. The hope is that since the snippet filenames are in the pages directory, it's more consistent with other documentation to use PageQueries when in a src/pages/*.js file instead of a StaticQuery, which from the documentation appears to be used in places like src/components/*.js. commit a9085a3f3161b760775cdaf8d2d846825b3f4f48 Author: Barry McGee Date: Mon Apr 6 15:11:01 2020 +0100 Update broken link in sourcing-from-graphcms.md (#22827) commit e1b854e5056060da09a9feaa476597975cf3a264 Author: Vladimir Razuvaev Date: Mon Apr 6 17:49:44 2020 +0700 chore(release): Publish - gatsby-source-graphql@2.3.2 commit ad945ec8a8428ed4a53614e2e646ca5a68c79d82 Author: Vladimir Razuvaev Date: Mon Apr 6 17:41:42 2020 +0700 fix(gatsby-source-graphql): Convert ts to plain js until better times (#22848) commit 22b30333fd2fd5bb25f0fd402c313e3fd3e1874e Author: T Thiyagaraj Date: Mon Apr 6 16:01:21 2020 +0530 chore(docs): Update formatting (#22845) * Fix formatting, add commas * chore: format Co-authored-by: gatsbybot commit 6d3545321c6cd6efcfc22477fb22bc2105fa6602 Author: Masoud <50676388+masoudkarimif@users.noreply.github.com> Date: Sun Apr 5 17:31:49 2020 -0600 Added covid19.thegauntlet.ca to sites.yml (#22839) Co-authored-by: gatsbybot commit aa550f49a711b103dd4370f493e5ecf6a52354c1 Author: mike w Date: Sun Apr 5 19:31:38 2020 -0400 chore(starters): add gatsby-starter-basic-bootstrap (#22837) Nothing earth-shattering here, simply a starter with *just* react-bootstrap and sass support. Many other existing starters bring a lot of additional bells and whistles. Co-authored-by: gatsbybot commit 2132f18e6a2559f1bc533e197c2d8551a552fc17 Author: ritesh-zestard Date: Mon Apr 6 04:59:55 2020 +0530 Update Zestard.com site for showcase (#22787) * update zestard site for showcase * chore: format Co-authored-by: gatsbybot commit ac7869b63c8d606fd53591e7400ac56a47ecb9fc Author: Sergey Monin Date: Mon Apr 6 03:29:40 2020 +0400 Update sites.yml, add ocius.com.au (#22362) Co-authored-by: Kyle Mathews Co-authored-by: gatsbybot commit 25f2276332df83ac068ba198693c9fd99816d24d Author: Kostas Vrouvas Date: Mon Apr 6 02:26:38 2020 +0300 Update sites.yml (#22769) add kosvrouvas.com Co-authored-by: gatsbybot commit b0c2b11bbee741c1bbf2ab99b8849dee443cc841 Author: Gagandeep Singh Date: Mon Apr 6 04:54:19 2020 +0530 chore(starters): add gatsby-starter-22boxes-uno (#22756) * Gatsby starter added: Uno * git url updated Co-authored-by: Gagandeep Singh commit d4e3368e00c918323822a1fb9bcb9cccb0857a37 Author: SONGMINSEOK Date: Mon Apr 6 08:23:46 2020 +0900 chore(starters): add gatsby-starter-song (#22712) * chore(starters): add gatsby-starter-song * chore(starters): typo error modify * chore(starters): typo modify * Guildlines Correct by referring to the guidelines * Error update * error: Decompress bug * package.json downgrade commit 30b5f86ececce9634a26b01589960c64320df7a5 Author: Robin Métral Date: Mon Apr 6 01:23:02 2020 +0200 chore(starters): update gatsby-theme-oss (#22698) * chore(starters): update gatsby-theme-oss The starter was redesigned and extended into a Gatsby Theme. https://github.com/robinmetral/gatsby-theme-oss * chore(starters): switch gatsby-starter-oss to starter repo The theme's repo at robinmetral/gatsby-theme-oss is not a valid starter although the tree contains one, because it cannot be installed with the gatsby-cli using gatsby new. To solve this, the starter is now being auto-published on robinmetral/gatsby-starter-oss. commit ca8088b0d2ab73e5a7339d44e695d3acd6ddb6a0 Author: arnorhs Date: Sun Apr 5 23:22:22 2020 +0000 Adding www.kosmosandkaos.is to the sites.yml file (#22371) * Adding www.kosmosandkaos.is to the site showcase * Update sites.yml * Update sites.yml * Update sites.yml commit 644372e69b63824be5ed46a3cf745c84d7003119 Author: Masatoshi Nishiguchi Date: Sun Apr 5 19:20:35 2020 -0400 Add hanarecafe.com to the Showcase (#22790) commit 3af9ec0c9a81196a3054be336633d8adae024d9f Author: Nicholas Duffy Date: Sat Apr 4 15:30:50 2020 -0600 Update benchmark willit version to * (#22824) commit 7508565d15be38ae4f57bf53d77c017021bdf812 Author: Michal Piechowiak Date: Sat Apr 4 20:47:56 2020 +0200 chore(release): Publish - gatsby-plugin-sharp@2.5.4 - gatsby-remark-images@3.2.2 - gatsby-source-contentful@2.2.7 - gatsby-theme-blog-core@1.3.13 - gatsby-theme-blog@1.4.13 - gatsby-transformer-sharp@2.4.4 - gatsby-transformer-sqip@2.2.4 commit 156d8316dfbc5796877b471b02127e4657a57a45 Author: nikoladev <15011519+nikoladev@users.noreply.github.com> Date: Sat Apr 4 20:42:31 2020 +0200 chore(monorepo): bump decompress in yarn.lock (#22797) https://www.npmjs.com/advisories/1217 commit 7a8f01626641f2ffa970032d42ec875d1479c177 Author: nikoladev <15011519+nikoladev@users.noreply.github.com> Date: Sat Apr 4 20:25:02 2020 +0200 fix(dependencies): bump potrace version (#22803) * fix minimist vulnerability https://www.npmjs.com/advisories/1179 * update extract-zip commit 7b083a6812da8405d2b521e3676e4e57f888bf71 Author: Michal Piechowiak Date: Sat Apr 4 19:26:11 2020 +0200 chore(starters): bump dependencies (#22819) commit 9d256d4a96ab5f5ed8ba5f4a4eda24410f328c75 Author: Nicholas Duffy Date: Fri Apr 3 16:41:17 2020 -0600 Fix incorrect benchmark working directory (#22807) commit 82b1fdae85db583c09d9b7b2203512ab36d7e33b Author: Michelle Gienow Date: Fri Apr 3 16:53:51 2020 -0400 Blog case study commonwealth aten (#22802) * Upload author avatar Debra Combs * Add Debra Combs to authors.yaml * Create Commonwealth Aten case study text index.md * Add redesigned scorecard screenshot * chore: format Co-authored-by: gatsbybot commit 2bb39c191631961ff80f0cbf31cec5881f19eb17 Author: Yuki Takemoto Date: Sat Apr 4 05:39:49 2020 +0900 docs: add missing quote (#22771) Co-authored-by: gatsbybot commit 948e0933dc69a621eeaf188f1821c338c4256d99 Author: Hashim Warren Date: Fri Apr 3 15:45:39 2020 -0400 (blog) 100days challenge 14 (#22799) * Add use themes blog post * chore: format * Fix typos Co-authored-by: gatsbybot commit 5bc03719320d02da27d154fe4df7a30ec1c6289f Author: Moni <40552237+NotMoni@users.noreply.github.com> Date: Fri Apr 3 15:05:04 2020 -0400 doc: fix grammer (#22791) commit 25e404fd7be6467d8e52359ca45ad148514ac4a2 Author: Michal Piechowiak Date: Fri Apr 3 16:38:23 2020 +0200 chore(release): Publish - gatsby-plugin-benchmark-reporting@0.1.2 commit 3aa090ecaae7cda8b6d45b7ed2f1a1e86ca604f8 Author: Nicholas Duffy Date: Fri Apr 3 08:29:36 2020 -0600 chore(benchmarks): Add BENCHMARK_ prefix to benchmark env variables (#22779) * Add BENCHMARK_ prefix to benchmark env variables * Update example envs with BENCHMARK prefix * Update Contentful envs in setup commit ec4e286a8ec93ca0fc5bc412e26cdfb478eb2071 Author: Nicholas Capo Date: Fri Apr 3 09:28:18 2020 -0500 ci: add mdx benchmark to cronjob, adjust content source in remark benchmarks to differentiate mdx and remark (#22780) * chore(circleci): Change BENCHMARK_CONTENT_SOURCE MDX to MARKDOWN * We will soon be running an actual MDX benchmark so correct these * chore(benchmarks): Fixup and integrate mdx * Enable in CircleCI commit b5b41a081af264864db87742aa7f0e06f87f14e1 Author: Nicholas Duffy Date: Fri Apr 3 08:21:05 2020 -0600 fix(gatsby-plugin-benchmark-reporting): Update pageCount to use NUM_PAGES (#22766) * Update pageCount to use NUM_PAGES * parseInt for NUM_PAGES environment commit c6552a227a54f338346b82a10ad5f1097dec3b5a Author: Nicholas Duffy Date: Fri Apr 3 08:08:38 2020 -0600 chore(benchmarks): Add .nvmrc to new benchmarks (#22760) commit 4210f46f97a5d93e385776deccb39c20146710a9 Author: Eyas Date: Fri Apr 3 08:06:53 2020 -0400 chore: Upgrade and consolidate @types/react (#22710) We used to only inherit it transitively via @types/prop-types, but a lot of typings actually need it. This will helps us pull the latest @type/reach__router package, which (only implicitly, unfortuately) depends on more recent react types than the ones we have. For example, helps in #22563. commit 805b745a15d38b14550312cdb4e1a99be2313bef Author: Mikhail Novikov Date: Fri Apr 3 12:03:15 2020 +0300 chore(release): Publish - gatsby-cli@2.11.5 - gatsby-theme-blog-core@1.3.12 - gatsby-theme-blog@1.4.12 - gatsby-theme-notes@1.2.12 - gatsby@2.20.12 commit a7281c220802e0baf02441b97e421a7f4dde0345 Author: Mikhail Novikov Date: Fri Apr 3 11:58:36 2020 +0300 fix(gatsby): Fix OOM from telemetry storing too much (#22752) commit 5b35accd289c4da6fc7ee515ba654ee3985f90f0 Author: Arthur Date: Thu Apr 2 19:42:17 2020 -0700 chore(gatsby) Migrate joi schema to Typescript (#22738) * Migrate joi schema to Typescript * Add joi schema for gatsby-cli's structured-errors as well * Fixes unit-test * Use types from redux/types - they seem to be newer than types in gatsby/index.d.ts * consolidate structured errors types into types file to be imported by others * force rebuild Co-authored-by: madalynrose commit 9bc20261ea4cd1d6a5a354cdaed7a7aebe2026ae Author: Blaine Kasten Date: Thu Apr 2 21:35:31 2020 -0500 chore(release): Publish - gatsby-link@2.3.2 - gatsby-source-contentful@2.2.6 - gatsby-source-graphql@2.3.1 - gatsby-theme-blog-core@1.3.11 - gatsby-theme-blog@1.4.11 - gatsby-theme-notes@1.2.11 - gatsby@2.20.11 commit 14b96052edc1e653a71e78e9262962f8aef5eb9a Author: Michal Piechowiak Date: Fri Apr 3 04:34:17 2020 +0200 fix(gatsby-link): drop custom innerRef typing and reuse one from @reach/router (#22770) commit 480a9280c6fc27bb1b3f0d408067820acc30b840 Author: Blaine Kasten Date: Thu Apr 2 21:26:14 2020 -0500 chore(gatsby-cli): Add tests for `gatsby repl` (#22740) commit 11617945991e30ab896aafd387fe908a0f8af627 Author: Alejandro Ñáñez Ortiz Date: Thu Apr 2 21:25:25 2020 -0500 Update README.md (#22781) The API referenced in the examples is no longer available. Here's the correct one. commit ab9cc63ef596c876514537d1b64d1362a8aa6f38 Author: Aziz Abbas Date: Thu Apr 2 11:24:11 2020 -0700 chore(starters): add gatsby-starter-builder (#22692) * chore(starters): add gatsby-starter-builder * address feedback commit 81f09f866d8e342ff6a93a9b7acb506bd2bbfeb5 Author: Boris Kirov Date: Thu Apr 2 19:41:33 2020 +0200 Added Fluiditype (#22686) * Added Fluiditype Adding a site build with Gatsby, which is about fluid typography * Update sites.yml * Update docs/sites.yml Co-authored-by: gatsbybot Co-authored-by: Kyle Mathews Co-authored-by: LB commit 4eedfaf082588db42ee5fdbd9eb0c7b7febc6477 Author: Michelle Gienow Date: Thu Apr 2 12:22:16 2020 -0400 Add blog post with Gatsby LA video 2 - Dustin Schau (#22736) * Create index.md * Create video preview * Change branch name Nomenclature is now by author rather than video sequence * Update index.md * chore: format Co-authored-by: gatsbybot commit 62cba610751d1a82831ec7e2346325b00d7d20ed Author: Nicholas Duffy Date: Thu Apr 2 08:38:22 2020 -0600 Fix DatoCMS benchmarks (#22761) * Fix DatoCMS benchmarks * Update double quotes to backticks commit a6f5dc3466d398acf81203ea8dab94bf36407186 Author: Mukul Rathi Date: Thu Apr 2 14:33:47 2020 +0100 chore(starters): add gatsby-starter-reason-blog (#22690) Co-authored-by: gatsbybot commit b37eda084ee62bcea5bd28e6ab36ae6553a1069f Author: Michael <184316+muescha@users.noreply.github.com> Date: Thu Apr 2 14:37:36 2020 +0200 remove local domain (#22729) Co-authored-by: gatsbybot commit aafef8d235f2b88648046e36699be20258360920 Author: Michael <184316+muescha@users.noreply.github.com> Date: Thu Apr 2 14:20:00 2020 +0200 remove local domain (#22732) commit cfd2384ee9249772f5af96b38f0466dc1ab35257 Author: Georges Haidar Date: Thu Apr 2 08:25:05 2020 +0100 fix(gatsby-source-contentful): use request url for base64 image cache key (#22745) * fix(gatsby-source-contentful): use request url for base64 image cache key * Apply suggestions from code review Co-authored-by: Ward Peeters commit 6c4a97998183226f9b6615ac2a0637651b4db12c Author: Kyle Mathews Date: Wed Apr 1 16:02:23 2020 -0700 Add blog post for community Q&A (#22737) commit 231c7ef16db9e5845e013d9dad54ad42c76b9971 Author: Blaine Kasten Date: Wed Apr 1 17:17:46 2020 -0500 chore(gatsby-cli): use `gatsby clean` in tests to test `gatsby clean` (#22739) * chore(gatsby-cli): use `gatsby clean` in tests to test `gatsby clean` * cleanup commit 18b1bbc31dc5bf86464394baa1c2d12b6a10291c Author: Michelle Gienow Date: Wed Apr 1 16:58:49 2020 -0400 Fix typo (#22727) commit ad6bc16d6cfb57155ca04b0420c26e9f72d1607a Author: Vladimir Razuvaev Date: Thu Apr 2 03:00:27 2020 +0700 fix(gatsby): Support grouping by reserved keywords (#22603) commit 040afea56df9b49838e18b5f6f23f716906817ab Author: Michael <184316+muescha@users.noreply.github.com> Date: Wed Apr 1 19:54:17 2020 +0200 remove local domain (#22723) commit 1aac0ff45a58539185921121faff75cebd7af79a Author: Michal Piechowiak Date: Wed Apr 1 19:04:38 2020 +0200 docs: clarification about `.cache` and `public` persistance when using GATSBY_EXPERIMENTAL_PAGE_BUILD_ON_DATA_CHANGES (#22720) commit b1be097a6afa86c1311b97440b38b5671a3f553b Author: Vladimir Razuvaev Date: Wed Apr 1 22:50:42 2020 +0700 chore(release): Publish - gatsby-cli@2.11.4 - gatsby-plugin-google-gtag@2.0.0 - gatsby-telemetry@1.2.3 - gatsby-theme-blog-core@1.3.10 - gatsby-theme-blog@1.4.10 - gatsby-theme-notes@1.2.10 - gatsby@2.20.10 commit 7a4db4bf5d7de548195a9952f562d75763201f20 Author: Camilo Bravo Date: Wed Apr 1 11:32:52 2020 -0400 fix(gatsby-plugin-google-gtag): OutboundLink Forward Ref (#22705) * gatsby-plugin-google-gtag OutboundLink Forward Ref update gatsby-plugin-google-gtag OutboundLink component to forward ref onto DOM element. * fix typo * linting fix * remove semi clons commit d5894c10d4474d297c7b8a13780b2a9e1d803264 Author: Lane Parton Date: Wed Apr 1 10:19:35 2020 -0400 [docs]Docs/Blog Frontmatter Documentation (#22604) * Update docs-and-blog-components.md * Update docs-and-blog-components.md * Update docs/contributing/docs-and-blog-components.md Co-Authored-By: LB * Update docs-and-blog-components.md Co-authored-by: LB Co-authored-by: gatsbybot commit 8b96f950b22d3688d8e2a800109fd4ae902917e9 Author: Peter van der Zee <209817+pvdz@users.noreply.github.com> Date: Wed Apr 1 15:10:42 2020 +0200 chore(gatsby): create single filter cache key generator (#22716) * chore(gatsby): create single filter cache key generator * Add comment about future proofing commit 372d127258953b783efd5c67a44d0a53281bb91d Author: Blaine Kasten Date: Tue Mar 31 21:59:21 2020 -0500 chore(gatsby-cli): Add integration tests for `gatsby develop` (#22699) * chore(gatsby-cli): Add integration tests for `gatsby develop` * cant use the `lsof` command in CI :( * 30s wait * disable assertions --- .circleci/config.yml | 74 +- benchmarks/README.md | 2 +- benchmarks/mdx/.nvmrc | 1 + benchmarks/mdx/README.md | 24 +- benchmarks/mdx/package.json | 8 +- benchmarks/source-contentful/.env.example | 6 +- benchmarks/source-contentful/.nvmrc | 1 + benchmarks/source-contentful/README.md | 20 +- .../bin/{setup.js => site.js} | 150 +- benchmarks/source-contentful/gatsby-config.js | 6 +- benchmarks/source-contentful/package.json | 6 +- benchmarks/source-datocms/.env.example | 2 +- benchmarks/source-datocms/.nvmrc | 1 + benchmarks/source-datocms/gatsby-config.js | 6 +- benchmarks/source-datocms/gatsby-node.js | 10 +- benchmarks/source-datocms/src/pages/index.js | 4 +- benchmarks/source-drupal/.env.example | 2 +- benchmarks/source-drupal/.nvmrc | 1 + benchmarks/source-drupal/gatsby-config.js | 2 +- benchmarks/source-wordpress/.nvmrc | 1 + benchmarks/source-wordpress/gatsby-config.js | 2 +- docs/blog/100days/comments/index.md | 4 +- docs/blog/100days/use-themes/index.md | 41 + .../index.md | 8 +- .../index.md | 38 +- docs/blog/2020-04-01-LA-2020-Mathews/index.md | 2 +- docs/blog/2020-04-02-LA-2020-Schau/index.md | 21 + .../index.md | 124 + docs/blog/2020-04-05-LA-2020-Gladwell.md | 20 + docs/blog/2020-04-06-LA-2020-Gordon/index.md | 20 + .../commonwealth_scorecard_redesign.png | Bin 0 -> 150779 bytes .../index.md | 50 + docs/blog/2020-04-07-LA-2020-Boss/index.md | 21 + .../index.md | 18 + docs/blog/2020-04-08-LA-2020-Harmon/index.md | 21 + docs/blog/author.yaml | 7 + docs/blog/avatars/debra-combs.png | Bin 0 -> 228506 bytes docs/blog/avatars/laci-texter.jpg | Bin 0 -> 145332 bytes docs/contributing/community.md | 2 +- docs/contributing/docs-and-blog-components.md | 83 + docs/contributing/events.md | 4 +- docs/contributing/how-to-file-an-issue.md | 18 +- docs/contributing/organize-a-gatsby-event.md | 10 +- docs/docs/add-seo-component.md | 187 +- .../adding-a-shopping-cart-with-snipcart.md | 194 ++ ...transitions-with-plugin-transition-link.md | 2 +- docs/docs/audit-with-lighthouse.md | 12 +- docs/docs/creating-a-generic-plugin.md | 12 +- docs/docs/deploying-to-gatsby-cloud.md | 125 + docs/docs/gatsby-on-windows.md | 2 +- docs/docs/glossary.md | 2 +- docs/docs/glossary/hydration.md | 53 + docs/docs/images/cloud-lighthouse.png | Bin 0 -> 69135 bytes ...imizations-for-incremental-data-changes.md | 2 +- docs/docs/preprocessing-external-images.md | 2 +- docs/docs/processing-payments-with-stripe.md | 6 +- docs/docs/recipes.md | 1 + docs/docs/recipes/deploying-your-site.md | 56 + docs/docs/recipes/working-with-plugins.md | 2 +- docs/docs/sourcing-from-graphcms.md | 2 +- docs/docs/telemetry.md | 14 +- docs/docs/using-gatsby-image.md | 62 +- docs/docs/working-with-images-in-markdown.md | 7 +- docs/sites.yml | 121 + docs/starters.yml | 124 +- .../index.md | 14 +- .../gatsby-cli/__tests__/build.js | 8 +- .../gatsby-cli/__tests__/develop.js | 44 +- .../gatsby-cli/__tests__/repl.js | 51 + .../gatsby-sites/gatsby-repl/.gitignore | 69 + .../gatsby-sites/gatsby-repl/package.json | 37 + .../gatsby-repl/src/pages/index.js | 2 + package.json | 1 + packages/gatsby-cli/CHANGELOG.md | 8 + packages/gatsby-cli/package.json | 4 +- .../__tests__/error-schema.ts | 6 +- .../src/structured-errors/construct-error.ts | 44 +- .../src/structured-errors/error-map.ts | 22 +- .../src/structured-errors/error-schema.ts | 65 +- .../gatsby-cli/src/structured-errors/types.ts | 57 + packages/gatsby-image/CHANGELOG.md | 6 + packages/gatsby-image/package.json | 2 +- packages/gatsby-image/src/index.js | 21 +- .../gatsby-image/src/withIEPolyfill/index.js | 21 +- packages/gatsby-link/CHANGELOG.md | 6 + packages/gatsby-link/index.d.ts | 1 - packages/gatsby-link/package.json | 4 +- .../CHANGELOG.md | 6 + .../package.json | 2 +- .../src/gatsby-node.js | 7 +- .../gatsby-plugin-google-gtag/CHANGELOG.md | 6 + .../gatsby-plugin-google-gtag/package.json | 2 +- .../gatsby-plugin-google-gtag/src/index.js | 85 +- packages/gatsby-plugin-mdx/CHANGELOG.md | 10 + packages/gatsby-plugin-mdx/README.md | 5 +- packages/gatsby-plugin-mdx/package.json | 2 +- packages/gatsby-plugin-mdx/utils/gen-mdx.js | 2 +- packages/gatsby-plugin-sharp/CHANGELOG.md | 6 + packages/gatsby-plugin-sharp/package.json | 4 +- packages/gatsby-plugin-twitter/CHANGELOG.md | 4 + packages/gatsby-plugin-twitter/README.md | 16 +- packages/gatsby-plugin-twitter/package.json | 2 +- packages/gatsby-remark-images/CHANGELOG.md | 6 + packages/gatsby-remark-images/package.json | 4 +- .../gatsby-source-contentful/CHANGELOG.md | 10 + .../gatsby-source-contentful/package.json | 4 +- .../src/extend-node-type.js | 2 +- packages/gatsby-source-graphql/CHANGELOG.md | 10 + packages/gatsby-source-graphql/README.md | 2 +- packages/gatsby-source-graphql/package.json | 2 +- ...{dataloader-link.ts => dataloader-link.js} | 11 +- .../{merge-queries.ts => merge-queries.js} | 12 +- ...{dataloader-link.ts => dataloader-link.js} | 34 +- .../{merge-queries.ts => merge-queries.js} | 151 +- packages/gatsby-telemetry/CHANGELOG.md | 6 + packages/gatsby-telemetry/package.json | 2 +- packages/gatsby-theme-blog-core/CHANGELOG.md | 24 + packages/gatsby-theme-blog-core/package.json | 12 +- packages/gatsby-theme-blog/CHANGELOG.md | 24 + packages/gatsby-theme-blog/package.json | 10 +- packages/gatsby-theme-notes/CHANGELOG.md | 20 + packages/gatsby-theme-notes/package.json | 6 +- .../gatsby-transformer-sharp/CHANGELOG.md | 6 + .../gatsby-transformer-sharp/package.json | 4 +- packages/gatsby-transformer-sqip/CHANGELOG.md | 4 + packages/gatsby-transformer-sqip/package.json | 4 +- packages/gatsby/CHANGELOG.md | 22 + packages/gatsby/index.d.ts | 2 + packages/gatsby/package.json | 13 +- .../{joi.js.snap => joi.ts.snap} | 0 .../joi-schemas/__tests__/{joi.js => joi.ts} | 8 +- .../gatsby/src/joi-schemas/{joi.js => joi.ts} | 15 +- packages/gatsby/src/query/graphql-runner.ts | 19 +- packages/gatsby/src/redux/actions/public.js | 4 +- packages/gatsby/src/redux/nodes.ts | 26 +- packages/gatsby/src/redux/run-sift.js | 52 +- .../src/schema/__tests__/fixtures/queries.js | 2 + .../gatsby/src/schema/__tests__/queries.js | 389 +-- packages/gatsby/src/schema/resolvers.js | 6 +- starters/blog/package-lock.json | 2008 ++++++++----- starters/blog/package.json | 34 +- starters/default/package-lock.json | 1947 ++++++++----- starters/default/package.json | 16 +- .../package-lock.json | 2044 ++++++++----- .../package.json | 4 +- .../package-lock.json | 2108 ++++++++------ .../gatsby-starter-blog-theme/package.json | 4 +- .../package-lock.json | 1316 +++++---- .../gatsby-starter-notes-theme/package.json | 4 +- .../example/package.json | 2 +- .../gatsby-starter-theme/package-lock.json | 2560 +++++++++++------ starters/gatsby-starter-theme/package.json | 6 +- starters/hello-world/package-lock.json | 1154 ++++---- starters/hello-world/package.json | 2 +- www/reduxcacheOm4fA5/redux.rest.state | Bin 0 -> 4888003 bytes www/src/components/package-readme.js | 71 +- www/src/components/plugin-searchbar-body.js | 19 +- www/src/data/sidebars/doc-links.yaml | 7 + yarn.lock | 614 ++-- 159 files changed, 11004 insertions(+), 6325 deletions(-) create mode 100644 benchmarks/mdx/.nvmrc create mode 100644 benchmarks/source-contentful/.nvmrc rename benchmarks/source-contentful/bin/{setup.js => site.js} (62%) create mode 100644 benchmarks/source-datocms/.nvmrc create mode 100644 benchmarks/source-drupal/.nvmrc create mode 100644 benchmarks/source-wordpress/.nvmrc create mode 100644 docs/blog/100days/use-themes/index.md create mode 100644 docs/blog/2020-04-02-LA-2020-Schau/index.md create mode 100644 docs/blog/2020-04-02-community-qa-with-kyle-mathews/index.md create mode 100644 docs/blog/2020-04-05-LA-2020-Gladwell.md create mode 100644 docs/blog/2020-04-06-LA-2020-Gordon/index.md create mode 100644 docs/blog/2020-04-06-commonwealth-aten-case-study/commonwealth_scorecard_redesign.png create mode 100644 docs/blog/2020-04-06-commonwealth-aten-case-study/index.md create mode 100644 docs/blog/2020-04-07-LA-2020-Boss/index.md create mode 100644 docs/blog/2020-04-07-virtual-gatsby-days-2020-CFP/index.md create mode 100644 docs/blog/2020-04-08-LA-2020-Harmon/index.md create mode 100644 docs/blog/avatars/debra-combs.png create mode 100644 docs/blog/avatars/laci-texter.jpg create mode 100644 docs/docs/adding-a-shopping-cart-with-snipcart.md create mode 100644 docs/docs/deploying-to-gatsby-cloud.md create mode 100644 docs/docs/glossary/hydration.md create mode 100644 docs/docs/images/cloud-lighthouse.png create mode 100644 integration-tests/gatsby-cli/__tests__/repl.js create mode 100644 integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/.gitignore create mode 100644 integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/package.json create mode 100644 integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/src/pages/index.js create mode 100644 packages/gatsby-cli/src/structured-errors/types.ts rename packages/gatsby-source-graphql/src/batching/__tests__/{dataloader-link.ts => dataloader-link.js} (89%) rename packages/gatsby-source-graphql/src/batching/__tests__/{merge-queries.ts => merge-queries.js} (95%) rename packages/gatsby-source-graphql/src/batching/{dataloader-link.ts => dataloader-link.js} (67%) rename packages/gatsby-source-graphql/src/batching/{merge-queries.ts => merge-queries.js} (68%) rename packages/gatsby/src/joi-schemas/__tests__/__snapshots__/{joi.js.snap => joi.ts.snap} (100%) rename packages/gatsby/src/joi-schemas/__tests__/{joi.js => joi.ts} (92%) rename packages/gatsby/src/joi-schemas/{joi.js => joi.ts} (83%) create mode 100644 www/reduxcacheOm4fA5/redux.rest.state diff --git a/.circleci/config.yml b/.circleci/config.yml index 94fdcfd14381f..fedf2b4bd6090 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -446,7 +446,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_id NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id BENCHMARK_SITE_TYPE: BLOG @@ -457,7 +457,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_id NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id BENCHMARK_SITE_TYPE: BLOG @@ -468,7 +468,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_id NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id BENCHMARK_SITE_TYPE: BLOG @@ -479,7 +479,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_id NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id BENCHMARK_SITE_TYPE: BLOG @@ -490,7 +490,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_slug NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug BENCHMARK_SITE_TYPE: BLOG @@ -501,7 +501,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_slug NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug BENCHMARK_SITE_TYPE: BLOG @@ -512,7 +512,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_slug NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug BENCHMARK_SITE_TYPE: BLOG @@ -523,7 +523,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_slug NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug BENCHMARK_SITE_TYPE: BLOG @@ -534,7 +534,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_table NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table BENCHMARK_SITE_TYPE: BLOG @@ -545,7 +545,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_table NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table BENCHMARK_SITE_TYPE: BLOG @@ -556,7 +556,7 @@ jobs: - run-benchmark: working_directory: benchmarks/markdown_table NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table BENCHMARK_SITE_TYPE: BLOG @@ -565,12 +565,56 @@ jobs: - image: "circleci/node:12" steps: - run-benchmark: - working_directory: benchmarks/markdown_table/benchmarks/markdown_table + working_directory: benchmarks/markdown_table NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_CONTENT_SOURCE: MARKDOWN BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table BENCHMARK_SITE_TYPE: BLOG + benchmark_mdx_512: + docker: + - image: "circleci/node:12" + steps: + - run-benchmark: + working_directory: benchmarks/mdx + NUM_PAGES: "512" + BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx + BENCHMARK_SITE_TYPE: BLOG + + benchmark_mdx_4096: + docker: + - image: "circleci/node:12" + steps: + - run-benchmark: + working_directory: benchmarks/mdx + NUM_PAGES: "4096" + BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx + BENCHMARK_SITE_TYPE: BLOG + + benchmark_mdx_8192: + docker: + - image: "circleci/node:12" + steps: + - run-benchmark: + working_directory: benchmarks/mdx + NUM_PAGES: "8192" + BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx + BENCHMARK_SITE_TYPE: BLOG + + benchmark_mdx_32768: + docker: + - image: "circleci/node:12" + steps: + - run-benchmark: + working_directory: benchmarks/mdx + NUM_PAGES: "32768" + BENCHMARK_CONTENT_SOURCE: MDX + BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx + BENCHMARK_SITE_TYPE: BLOG + workflows: version: 2 @@ -588,6 +632,10 @@ workflows: - benchmark_markdown_table_4096 - benchmark_markdown_table_8192 - benchmark_markdown_table_32768 + - benchmark_mdx_512 + - benchmark_mdx_4096 + - benchmark_mdx_8192 + - benchmark_mdx_32768 triggers: - schedule: cron: 22 16 * * * diff --git a/benchmarks/README.md b/benchmarks/README.md index 0f0cd69d57673..034e397a4f3bf 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -10,7 +10,7 @@ The standard interface for running a benchmark is: cd {benchmark directory} export NUM_PAGES={n} npm install -gatsby build +npm run build / gatsby build ``` If a specific benchmark needs to perform some code generation (e.g. `markdown_id`), diff --git a/benchmarks/mdx/.nvmrc b/benchmarks/mdx/.nvmrc new file mode 100644 index 0000000000000..48082f72f087c --- /dev/null +++ b/benchmarks/mdx/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/benchmarks/mdx/README.md b/benchmarks/mdx/README.md index 01b87534ab940..d16e16047d3c8 100644 --- a/benchmarks/mdx/README.md +++ b/benchmarks/mdx/README.md @@ -1,25 +1,13 @@ # MDX Benchmark -This Gatsby site generates MDX files and downloads sample images on postinstall and places them in `src/articles`. In order for that to work, the env var `BENCHMARK_LEVEL` needs to be set to a number when you call `yarn` to install, so: +Benchmark for MDX pages. +Mock data is generated during the dependency installation step. +The number of pages generated is read from `NUM_PAGES=` (defaults to `512`). ``` -BENCHMARK_LEVEL=1 yarn - -gatsby build +$ export NUM_PAGES=1024 +$ yarn install # or npm install +$ gatsby build # or npm run build ``` -If you see "Error: Expected an integer but received: " then you did not set the level env var. - This will not use an external source for data while building, but will download some remote images while installing. - -# Levels - -The `BENCHMARK_LEVEL` is the amount of times to multiply 512 by 2. The level is used to determine how many articles to generate. - -Level 1 = 512 - -Level 2 = 1024 - -Level 3 = 2048 - -etc. diff --git a/benchmarks/mdx/package.json b/benchmarks/mdx/package.json index 292efd23e2856..0d6274a70cb15 100644 --- a/benchmarks/mdx/package.json +++ b/benchmarks/mdx/package.json @@ -9,7 +9,7 @@ "build:send": "cross-env BENCHMARK_REPORTING_URL=true gatsby build", "develop": "gatsby develop", "format": "prettier --write \"**/*.{js,jsx,json,md}\"", - "postinstall": "npx willit --type=\"mdx\" --level=${BENCHMARK_LEVEL}", + "postinstall": "del-cli src/articles && gatsby clean && willit --type=mdx --num-pages=${NUM_PAGES:-512}", "start": "npm run develop", "serve": "gatsby serve" }, @@ -17,6 +17,7 @@ "sharp": "0.25.1" }, "dependencies": { + "del-cli": "^3.0.0", "@mdx-js/mdx": "^1.5.7", "@mdx-js/react": "^1.5.7", "dotenv": "^8.2.0", @@ -34,11 +35,12 @@ "devDependencies": { "cross-env": "^7.0.0", "gatsby-plugin-benchmark-reporting": "*", - "prettier": "^1.19.1" + "prettier": "^1.19.1", + "willit": "*" }, "repository": { "type": "git", - "url": "https://github.com/gatsbyjs/benchmark/mdx" + "url": "https://github.com/gatsbyjs/gatsby/tree/master/benchmarks/mdx" }, "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/benchmarks/source-contentful/.env.example b/benchmarks/source-contentful/.env.example index d83d0454cea58..fbb49753732fc 100644 --- a/benchmarks/source-contentful/.env.example +++ b/benchmarks/source-contentful/.env.example @@ -6,8 +6,8 @@ BENCHMARK_DATASOURCE_LOCAL_PATH='/path/to/benchmark/_dataset BENCHMARK_SITE_ID='site1' # Required for `yarn setup` script only -CONTENTFUL_MANAGEMENT_TOKEN='' +BENCHMARK_CONTENTFUL_MANAGEMENT_TOKEN='' # Required for `yarn build` -CONTENTFUL_SPACE_ID='' -CONTENTFUL_ACCESS_TOKEN='' +BENCHMARK_CONTENTFUL_SPACE_ID='' +BENCHMARK_CONTENTFUL_ACCESS_TOKEN='' diff --git a/benchmarks/source-contentful/.nvmrc b/benchmarks/source-contentful/.nvmrc new file mode 100644 index 0000000000000..48082f72f087c --- /dev/null +++ b/benchmarks/source-contentful/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/benchmarks/source-contentful/README.md b/benchmarks/source-contentful/README.md index c1b09f04c6655..25e876bbf3e91 100644 --- a/benchmarks/source-contentful/README.md +++ b/benchmarks/source-contentful/README.md @@ -7,16 +7,28 @@ Those individual article pages and the homepage share a common "Layout" componen ## Setup Contentful benchmark site -1. TODO +1. Setup will-it-build data source 2. Copy `.env.example` to `.env.development` and make sure all variables are set 3. Run `yarn setup` Note that the script is idempotent, so you can re-run it on failures. Also use `yarn setup --skip [N:number]` to skip first `N` articles -(for example articles created during a previous run) +(for example articles created during a previous run which failed) + +### Fixing broken images + +Sometimes Contentful silently fails to process images which causes builds to fail. +Use following approach to fix those: + +1. Run `yarn site find-broken-images` +2. Change image URLs in will-it-build dataset for this site to some other images + (or just use one of the larger sites and set `BENCHMARK_SITE_ID` appropriately) +3. Run `yarn site fix-broken-images imageid1 imageid2 imageid3` + This command updates broken images with images from the `BENCHMARK_SITE_ID` dataset ## Build a site -1. Copy `.env.example` to `.env.production` and make sure all variables are set -2. Run `yarn build` +1. Copy `.env.example` to `.env.production` +2. Set `BENCHMARK_CONTENTFUL_SPACE_ID` and `BENCHMARK_CONTENTFUL_ACCESS_TOKEN` variables +3. Run `yarn build` diff --git a/benchmarks/source-contentful/bin/setup.js b/benchmarks/source-contentful/bin/site.js similarity index 62% rename from benchmarks/source-contentful/bin/setup.js rename to benchmarks/source-contentful/bin/site.js index a40b3ac0d046a..633179c15a97b 100644 --- a/benchmarks/source-contentful/bin/setup.js +++ b/benchmarks/source-contentful/bin/site.js @@ -2,6 +2,7 @@ const fs = require(`fs`) const path = require(`path`) const contentful = require(`contentful-management`) const chalk = require("chalk") +const yargs = require("yargs") require("dotenv").config({ path: `.env.${process.env.NODE_ENV}`, @@ -22,19 +23,50 @@ if (!fs.existsSync(inputDir)) { const locale = `en-US` const contentfulConfig = { - spaceId: process.env.CONTENTFUL_SPACE_ID, - managementToken: process.env.CONTENTFUL_MANAGEMENT_TOKEN, + spaceId: process.env.BENCHMARK_CONTENTFUL_SPACE_ID, + managementToken: process.env.BENCHMARK_CONTENTFUL_MANAGEMENT_TOKEN, } const { spaceId, managementToken } = contentfulConfig if (!spaceId || !managementToken) { - console.error( - `Contentful space id and management API token are required.` - ) + console.error(`Contentful space id and management API token are required.`) process.exit(1) } +yargs + .scriptName("site") + .usage("$0 [arguments]") + .command({ + command: `setup [--skip=number]`, + desc: `Setup new Contentful Benchmark Site from the dataset`, + builder: yargs => + yargs.option(`skip`, { + type: `number`, + default: 0, + description: `Skip this number of entries`, + }), + handler: ({ skip = 0 }) => { + runSetup({ skip }).catch(console.error) + }, + }) + .command({ + command: "find-broken-images", + desc: `Find broken images in current contentful site`, + handler: () => { + runFindBrokenImages().catch(console.error) + }, + }) + .command({ + command: "fix-broken-images ", + desc: `Fix images found by find-broken-images`, + handler: ({ ids }) => { + runFixBrokenImages(ids).catch(console.error) + }, + }) + .demandCommand(1) + .help().argv + /** * Transforms an article from source dataset to contentful data model */ @@ -201,16 +233,7 @@ async function createArticle(env, articleData) { } } -const resolveSkip = () => { - const index = process.argv.findIndex(param => param === `--skip`) - if (index >= 0) { - const skipValue = process.argv[index + 1] - return Number(skipValue) || 0 - } - return 0 -} - -async function createEntries(env) { +async function createEntries({ env, skip = 0 }) { const processBatch = sourceArticles => Promise.all( sourceArticles.map(async sourceArticle => { @@ -219,14 +242,12 @@ async function createEntries(env) { const articleCreated = await createArticle(env, article) console.log( `Processed ${chalk.green(article.sys.id)} (` + - `asset ${assetCreated ? `created` : chalk.yellow(`exists`)}, ` + - `article ${articleCreated ? `created` : chalk.yellow(`exists`)})` + `asset ${assetCreated ? `created` : chalk.yellow(`exists`)}, ` + + `article ${articleCreated ? `created` : chalk.yellow(`exists`)})` ) }) ) - const skip = resolveSkip() - if (skip) { console.log(`Skipping first ${chalk.yellow(skip)} articles`) } @@ -248,7 +269,45 @@ async function createEntries(env) { } } -async function run() { +async function updateAssets({ env, assetIds }) { + for await (const sourceArticle of readSourceArticles(inputDir)) { + const { asset: assetData } = extractEntities(sourceArticle) + if (assetIds.has(assetData.sys.id)) { + try { + let asset = await env.getAsset(assetData.sys.id) + try { + asset = await asset.unpublish() + } catch (e) {} + asset = await asset.delete() + asset = await createAsset(env, assetData) + console.log(`Updated asset ${chalk.yellow(assetData.sys.id)}`) + } catch (e) { + console.warn(`Could not update asset ${chalk.yellow(assetData.sys.id)}`) + console.log(e) + } + } + } +} + +async function findBrokenImages(env) { + let assets + let skip = 0 + let ids = [] + + do { + assets = await env.getAssets({ skip }) + for (let asset of assets.items) { + const details = asset.fields.file[`en-US`].details + if (!details || !details.image || !details.image.width) { + ids.push(asset.sys.id) + } + } + skip = assets.skip + assets.limit + } while (assets && assets.items.length > 0) + return ids +} + +async function createClient() { const client = contentful.createClient({ accessToken: contentfulConfig.managementToken, }) @@ -256,20 +315,41 @@ async function run() { const space = await client.getSpace(contentfulConfig.spaceId) const env = await space.getEnvironment(`master`) - // Create content model only: - createContentModel(env) - .then(() => { - console.log(`Content model ${chalk.green(`created`)}`) - }) - .then(() => createEntries(env)) - .then(() => { - console.log( - `All set! You can now run ${chalk.yellow( - "gatsby develop" - )} to see the site in action.` - ) - }) - .catch(error => console.error(error)) + return { client, space, env } +} + +async function runSetup({ skip }) { + const { env } = await createClient() + + await createContentModel(env) + console.log(`Content model ${chalk.green(`created`)}`) + await createEntries({ env, skip }) + + console.log( + `All set! You can now run ${chalk.yellow( + "gatsby develop" + )} to see the site in action.` + ) +} + +async function runFindBrokenImages() { + const { env } = await createClient() + const ids = await findBrokenImages(env) + if (ids.length) { + console.log(chalk.yellow(`Broken images:`)) + console.log(ids.join(` `)) + console.log(``) + } else { + console.log(chalk.green(`No broken images!`)) + } } -run().catch(console.error) +async function runFixBrokenImages(ids) { + if (!ids.length) { + console.log(`Nothing to do: no broken images!`) + return + } + const { env } = await createClient() + console.log(`Fixing ${chalk.yellow(ids.length)} broken images`) + await updateAssets({ env, assetIds: new Set(ids) }) +} diff --git a/benchmarks/source-contentful/gatsby-config.js b/benchmarks/source-contentful/gatsby-config.js index 530050cecec49..48fbd09328278 100644 --- a/benchmarks/source-contentful/gatsby-config.js +++ b/benchmarks/source-contentful/gatsby-config.js @@ -3,9 +3,9 @@ require("dotenv").config({ }) const contentfulConfig = { - spaceId: process.env.CONTENTFUL_SPACE_ID, - accessToken: process.env.CONTENTFUL_ACCESS_TOKEN, - host: process.env.CONTENTFUL_HOST, + spaceId: process.env.BENCHMARK_CONTENTFUL_SPACE_ID, + accessToken: process.env.BENCHMARK_CONTENTFUL_ACCESS_TOKEN, + host: process.env.BENCHMARK_CONTENTFUL_HOST, } const { spaceId, accessToken } = contentfulConfig diff --git a/benchmarks/source-contentful/package.json b/benchmarks/source-contentful/package.json index b52d69b4da110..fe26a7a92cb4e 100644 --- a/benchmarks/source-contentful/package.json +++ b/benchmarks/source-contentful/package.json @@ -10,7 +10,8 @@ "develop": "gatsby develop", "format": "prettier --write \"**/*.{js,jsx,json,md}\"", "serve": "gatsby serve", - "setup": "cross-env NODE_ENV=development node bin/setup.js", + "site": "cross-env NODE_ENV=development node bin/site.js", + "setup": "cross-env NODE_ENV=development node bin/site.js setup", "start": "npm run develop", "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" }, @@ -31,7 +32,8 @@ "chalk": "^2.4.2", "cross-env": "^7.0.0", "gatsby-plugin-benchmark-reporting": "*", - "prettier": "^1.19.1" + "prettier": "^1.19.1", + "yargs": "^15.3.1" }, "repository": { "type": "git", diff --git a/benchmarks/source-datocms/.env.example b/benchmarks/source-datocms/.env.example index 1726176720f23..8dce3eac7a1e3 100644 --- a/benchmarks/source-datocms/.env.example +++ b/benchmarks/source-datocms/.env.example @@ -1 +1 @@ -DATOCMS_API_TOKEN= +BENCHMARK_DATOCMS_API_TOKEN= diff --git a/benchmarks/source-datocms/.nvmrc b/benchmarks/source-datocms/.nvmrc new file mode 100644 index 0000000000000..48082f72f087c --- /dev/null +++ b/benchmarks/source-datocms/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/benchmarks/source-datocms/gatsby-config.js b/benchmarks/source-datocms/gatsby-config.js index dc5204cb87095..e5bf888009abe 100644 --- a/benchmarks/source-datocms/gatsby-config.js +++ b/benchmarks/source-datocms/gatsby-config.js @@ -17,13 +17,13 @@ module.exports = { path: `${__dirname}/src/pages/`, }, }, - { + { resolve: `gatsby-source-datocms`, options: { - apiToken: process.env.DATOCMS_API_TOKEN, + apiToken: process.env.BENCHMARK_DATOCMS_API_TOKEN, previewMode: false, disableLiveReload: false, - apiUrl: 'https://site-api.datocms.com', + apiUrl: `https://site-api.datocms.com`, }, }, ], diff --git a/benchmarks/source-datocms/gatsby-node.js b/benchmarks/source-datocms/gatsby-node.js index e4ce6ac7d886e..75f590e92c7a0 100644 --- a/benchmarks/source-datocms/gatsby-node.js +++ b/benchmarks/source-datocms/gatsby-node.js @@ -3,8 +3,8 @@ const kebabCase = require(`lodash.kebabcase`) exports.onCreateNode = ({ actions, node }) => { const { createNodeField } = actions - if (node.internal.type === 'node__article') { - createNodeField({ node, name: "slug", value: kebabCase(node.title) }) + if (node.internal.type === `node__article`) { + createNodeField({ node, name: `slug`, value: kebabCase(node.title) }) } } @@ -16,7 +16,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { articles: allDatoCmsArticle { nodes { id - path + slug } } } @@ -28,11 +28,11 @@ exports.createPages = async ({ actions, graphql, reporter }) => { result.data.articles.nodes.map(article => { createPage({ - path: article.path, + path: article.slug, component: require.resolve(`./src/templates/article.js`), context: { id: article.id, - } + }, }) }) } diff --git a/benchmarks/source-datocms/src/pages/index.js b/benchmarks/source-datocms/src/pages/index.js index 8ebf326b65ca4..3af11ea1d1c93 100644 --- a/benchmarks/source-datocms/src/pages/index.js +++ b/benchmarks/source-datocms/src/pages/index.js @@ -9,7 +9,7 @@ const Index = ({ data }) => {
    {data.articles.nodes.map(article => (
  • - {article.title} + {article.title}
  • ))}
@@ -29,7 +29,7 @@ export const query = graphql` articles: allDatoCmsArticle { nodes { title - path + slug } } } diff --git a/benchmarks/source-drupal/.env.example b/benchmarks/source-drupal/.env.example index c8c55ff9498fc..f5bf0e2680199 100644 --- a/benchmarks/source-drupal/.env.example +++ b/benchmarks/source-drupal/.env.example @@ -1 +1 @@ -GATSBY_DRUPAL_BASE_URL= +BENCHMARK_DRUPAL_BASE_URL= diff --git a/benchmarks/source-drupal/.nvmrc b/benchmarks/source-drupal/.nvmrc new file mode 100644 index 0000000000000..48082f72f087c --- /dev/null +++ b/benchmarks/source-drupal/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/benchmarks/source-drupal/gatsby-config.js b/benchmarks/source-drupal/gatsby-config.js index fab5de18677e9..a4f30d1c6c82c 100644 --- a/benchmarks/source-drupal/gatsby-config.js +++ b/benchmarks/source-drupal/gatsby-config.js @@ -20,7 +20,7 @@ module.exports = { { resolve: `gatsby-source-drupal`, options: { - baseUrl: process.env.GATSBY_DRUPAL_BASE_URL, + baseUrl: process.env.BENCHMARK_DRUPAL_BASE_URL, // Auth needed for POST }, }, diff --git a/benchmarks/source-wordpress/.nvmrc b/benchmarks/source-wordpress/.nvmrc new file mode 100644 index 0000000000000..48082f72f087c --- /dev/null +++ b/benchmarks/source-wordpress/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/benchmarks/source-wordpress/gatsby-config.js b/benchmarks/source-wordpress/gatsby-config.js index 97d4765e28e69..525ca36d03827 100644 --- a/benchmarks/source-wordpress/gatsby-config.js +++ b/benchmarks/source-wordpress/gatsby-config.js @@ -20,7 +20,7 @@ module.exports = { { resolve: `gatsby-source-wordpress-experimental`, options: { - url: process.env.WPGRAPHQL_URL, + url: process.env.BENCHMARK_WPGRAPHQL_URL, type: { Post: { limit: process.env.NODE_ENV === `development` ? 50 : false, diff --git a/docs/blog/100days/comments/index.md b/docs/blog/100days/comments/index.md index 7ed004db19959..4241969707482 100644 --- a/docs/blog/100days/comments/index.md +++ b/docs/blog/100days/comments/index.md @@ -22,9 +22,9 @@ There are multiple ways to accept user-generated content on your site. So, inste #### Option 1. Embed comments using JavaScript. -_Pros and cons_: This approach is the simplest option for adding comments to your site. You can choose many low cost or free comment services, like Discus and Facebook Comments. However, this method will have a negative impact on your site performance, and has privacy implications for your users. +_Pros and cons_: This approach is the simplest option for adding comments to your site. You can choose many low cost or free comment services, like Disqus and Facebook Comments. However, this method will have a negative impact on your site performance, and has privacy implications for your users. -_Tutorial_: [Using Javascript-based comment service, Discus with Gatsby](/docs/adding-comments/#using-disqus-for-comments) +_Tutorial_: [Using Javascript-based comment service, Disqus with Gatsby](/docs/adding-comments/#using-disqus-for-comments) #### Option 2. Add comments to your content diff --git a/docs/blog/100days/use-themes/index.md b/docs/blog/100days/use-themes/index.md new file mode 100644 index 0000000000000..49be9e8048356 --- /dev/null +++ b/docs/blog/100days/use-themes/index.md @@ -0,0 +1,41 @@ +--- +title: Challenge 14 - Rapidly Build Sites with Gatsby Themes +date: 2020-04-03 +author: "Hashim Warren" +excerpt: "Learn how to use a Gatsby Theme in your project" +tags: ["learning-to-code", "100-Days-of-Gatsby"] +--- + +_Gatsby was named the [#1 new technology to learn in 2020](https://www.cnbc.com/2019/12/02/10-hottest-tech-skills-that-could-pay-off-most-in-2020-says-new-report.html)!_ + +_To help you learn about Gatsby and our ecosystem, we invite you to take the #100DaysOfGatsby challenge! If you are new to Gatsby, you can follow along with our beginner-friendly weekly prompts. Or if you are familiar with Gatsby and want to go deeper, we invite you to [build your first Gatsby Theme](/docs/themes/building-themes/)._ + +_Learn more about [#100DaysOfGatsby here](/blog/100days)!_ + +## Challenge 14: Spin Up a New Site with a Gatsby Theme + +For the final two challenges you will explore using and creating Gatsby Themes! + +So far you’ve created a Gatsby site from scratch, and added features for usage on a single site. Gatsby Themes opens up the possibility to leverage good ideas from the Gatsby ecosystem, and share your own configurations and designs. You can think of Gatsby Themes as handy website kits that can be shared, customized, and stacked together. + +Before you dive into creating a theme, our resources below will point you to the philosophy behind Gatsby Themes and common use cases. Then we’ll show you how to use a theme in your poject. And next week you'll explore creating your own theme! + +### Gatsby Theme Usage Resources + +#### Theme Philosophy + +[Why Gatsby Themes](/blog/2019-01-31-why-themes) Kyle Mathews gives a short intro into Gatsby Themes, and why this functionality was added to Gatsby + +[What are Gatsby Themes](https://youtu.be/LBpNwUU3QVI) Chris Biscardi presents a high level view of how themes work in Gatsby + +[Using Theme for Distributed Docs](/blog/2019-07-03-using-themes-for-distributed-docs/) The Apollo team explains how and why they use Gatsby Themes + +#### Theme Usage + +[Discover a Gatsby Theme](/plugins/?=gatsby-theme) Browse Gatsby’s plugin repository to find the right theme for your project + +[Use a Gatsby Theme](/docs/themes/using-a-gatsby-theme/) Step-by-step guide to the conventions of Gatsby Theme usage (hint: "shadow and extend", don’t fork 🙂 ) + +### What to Do If You Need Help + +If you get stuck during the challenge, you can ask for help from the [Gatsby community](/contributing/community/) and the [ASKGatsbyJS](https://twitter.com/AskGatsbyJS) Twitter account. You can find fellow Gatsby Developers on [Discord](https://discordapp.com/invite/gatsby), [Reddit](https://www.reddit.com/r/gatsbyjs/), [Spectrum](https://spectrum.chat/gatsby-js), and [Dev](https://dev.to/t/gatsby). diff --git a/docs/blog/2018-04-10-how-to-handle-comments-in-gatsby-blogs/index.md b/docs/blog/2018-04-10-how-to-handle-comments-in-gatsby-blogs/index.md index 362adc97b5b40..962d68b66bc29 100644 --- a/docs/blog/2018-04-10-how-to-handle-comments-in-gatsby-blogs/index.md +++ b/docs/blog/2018-04-10-how-to-handle-comments-in-gatsby-blogs/index.md @@ -30,13 +30,13 @@ Putting the comments inside Git is awesome. Your content, your site, no external ### Staticman -But how do you get them there? Enter [staticman](https://staticman.net/). You give staticman access to your GitHub repo. You create a form. Staticman creates a pull request. It also supports akismet spam filtering. Genius. Oh, and it's free. Yes, doubly fantastic. +But how do you get them there? Enter [Staticman](https://staticman.net/). You give Staticman access to your GitHub repo. You create a form. Staticman creates a pull request. It also supports akismet spam filtering. Genius. Oh, and it's free. Yes, doubly fantastic. Staticman is open source. You can run your own instance. If you really want to. It's probably not worth it. Their service is free. They don't "own" your data. If they disappear, your comments live on. ### Roll your own -You could create your own staticman alternative. You could use a framework like [serverless](https://serverless.com/). You can find free hosts for serverless. You can write your own custom anti spam logic. This will be hard. It will probably be fun. It's not a very good idea! +You could create your own Staticman alternative. You could use a framework like [serverless](https://serverless.com/). You can find free hosts for serverless. You can write your own custom anti spam logic. This will be hard. It will probably be fun. It's not a very good idea! ### Netlify @@ -56,6 +56,6 @@ The possibilities are limitless. ## Conclusion -Use [staticman](https://staticman.net/). It's the best all round option. Keep control of your content. If their service goes down, you keep your comments. You can run your own instance later if necessary. It includes support for akismet spam filtering. +Use [Staticman](https://staticman.net/). It's the best all round option. Keep control of your content. If their service goes down, you keep your comments. You can run your own instance later if necessary. It includes support for akismet spam filtering. -**To see staticman in action, leave a comment at [Gatsby Central](https://www.gatsbycentral.com)!** +**To see Staticman in action, leave a comment at [Gatsby Central](https://www.gatsbycentral.com)!** diff --git a/docs/blog/2020-03-26-service-relief-project/index.md b/docs/blog/2020-03-26-service-relief-project/index.md index b4c7d08ca9f79..3bcbc88304732 100644 --- a/docs/blog/2020-03-26-service-relief-project/index.md +++ b/docs/blog/2020-03-26-service-relief-project/index.md @@ -16,23 +16,23 @@ We woke up and the world was utterly changed. It's easy to be overwhelmed. I sat State-mandated social distancing shutdowns are being rolled out across the country, closing down bars, entertainment venues, and restaurants - taking the livelihoods of countless service workers with them. "Shelter in place" orders also prevent independent workers like pet sitters and house cleaners from being able to do their jobs. And as independent small businesses classified as "nonessential," like bookstores and art galleries, are forced to close they also find themselves in the same increasingly dire situation. -Wonderfully, though, fundraisers are popping up all over the place to provide some emergency relief. Through them I saw a way to help out':' creating a fast, free and above all easy way for communities to gather local relief fundraisers in a single website, where donors can easily find and contribute. It turns out I wasn't the only one with this idea! +Wonderfully, though, fundraisers are popping up all over the place to provide some emergency relief. Through them I saw a way to help out: creating a fast, free and above all easy way for communities to gather local relief fundraisers in a single website, where donors can easily find and contribute. It turns out I wasn't the only one with this idea! -**In this post: ** +**In this post:** -- [About the project](#about) -- [How it all began](#beginnings) -- [Assembling a team](#team) -- [Building a prototype](#prototype) -- [Get Involved](#help) +- [About the project](#about-the-project) +- [How it all began](#how-it-all-began) +- [Assembling a team](#assembling-a-team) +- [Building a prototype](#building-a-prototype) +- [How to Get Involved](#how-to-get-involved) -### About the project +### About the project The Service Relief Project is a boilerplate for launching blazing-fast zero-cost directories of local fundraisers to help your local businesses affected by mandated shutdowns around the world. Here's what it does: -- Generates a static website using [GatsbyJS](https://gatsbyjs.org) +- Generates a static website using [Gatsby](https://gatsbyjs.org) - Uses [Airtable](https://airtable.com) to manage your listings and categories - Includes an Airtable form to collect local submissions and add them to Airtable for approval - Can be personalized to a city or region without touching a line of code @@ -42,7 +42,7 @@ Using Gatsby to build and generate a static website based on data from a remote In order to provide the ability to launch a zero-cost directory of fundraisers for your local area, we've: -- Open-sourced the [entire project on Github](https://github.com/service-relief) +- Open-sourced the [entire project on GitHub](https://github.com/service-relief) - Written [detailed instructions on how to get started](https://www.servicerelief.us/start/) - Released a [Gatsby Starter](https://github.com/service-relief/gatsby-starter-service-relief) and a [Gatsby Theme](https://github.com/service-relief/service-relief/tree/master/themes/gatsby-theme-service-relief) - Released a [one-click deployment to Netlify](https://app.netlify.com/start/deploy?repository=https://github.com/service-relief/gatsby-starter-service-relief) @@ -53,13 +53,13 @@ _This project was inspired by [Chicago Service Relief](https://chicagoservicerel Here are a few of the sites that have already launched using this project: -- [Seattle Service Relief](http://seattleservicerelief.com/) +- [Seattle Service Relief](https://seattleservicerelief.com/) - [Denver Service Relief](https://denverservicerelief.com/) - [Austin Service Relief](https://austinservicerelief.com/) - [Sioux Falls Service Relief](https://siouxfallsservicerelief.com/) - [Asheville Service Relief](https://ashevilleservicerelief.com/) -### How it all began +### How it all began On Monday, March 16th, Gatsby made the decision to close down for two days. Even though we're a completely remote company, we chose to do this to give our team members the time they needed to care for their families and adjust to the new world we found ourselves in. @@ -69,13 +69,13 @@ These are unprecedented times, and from my small home office in Omaha, Nebraska Drew and I have worked together in the past and I've both built and managed several websites for him over the years. All of them have been powered by [WordPress](https://wordpress.org), but I knew that spinning up another WordPress website was going to be overkill for something this simple. -That's where Gatsby came in. For the Seattle Service Relief site, I generated a new site using LekoArts' [Gatsby Minimal Blog](https://www.gatsbyjs.org/starters/LekoArts/gatsby-starter-minimal-blog/) by running `gatsby new` and customizing a quick site. I had used the same starter on my personal site which helped speed up the process. A few hours later I messaged him back with a link to the live site. +That's where Gatsby came in. For the Seattle Service Relief site, I generated a new site using LekoArts' [Gatsby Minimal Blog](/starters/LekoArts/gatsby-starter-minimal-blog/) by running `gatsby new` and customizing a quick site. I had used the same starter on my personal site which helped speed up the process. A few hours later I messaged him back with a link to the live site. ![Text message conversation with Drew where I announced that seattleservicerelief.com was live](./images/conversation-drew-finished-site.png) That was Monday. All day Tuesday I kept pondering the Seattle Service Relief project and wondering if there might be something bigger that we could do with the website. Though a palpable feeling of uncertainty permeated any and all conversations with my fellow Gatsby-ites, there was also a chord strumming just loudly and universally with the desire to do something, anything to help as a company. -### Assembling a team +### Assembling a team I am grateful to be surrounded by coworkers that are deeply passionate about helping others and, after a quick brainstorm with [Dustin Schau](https://twitter.com/SchauDustin) (Head of Product, Gatsby), I decided to float the idea in our **#random** Slack channel at work to see if anyone else was interested in helping out: @@ -89,7 +89,7 @@ The response I recieved was incredible. Folks from every team at Gatsby chimed i Inspired by the support, I built -### Building a prototype +### Building a prototype At 6:30pm CST on March 18th, 8 members of the Gatsby team jumped on a Zoom call after-hours to discuss how we could help make this project a reality. @@ -106,7 +106,7 @@ _A special thank-you to [Dustin Schau](https://twitter.com/SchauDustin), [Aisha Over the next hour and a half, we developed a prototype using the following tool stack: -- Github, for hosting the code of the site +- GitHub, for hosting the code of the site - Airtable, for managing data - Gatsby, to generate the site based on Airtable data - Netlify, for building and deploying the site @@ -117,7 +117,7 @@ In our off-hours over the next 5 days, **6 team members made 76 commits, merged Within 48 hours of launching the Service Relief Project site and starter, local fundraising information sites have been launched in _eleven_ more states beyond the initial Seattle site! From Provo, Utah, to Sioux Falls, South Dakota and from Austin, Texas to Asheville, North Carolina - and half a dozen more places in between - people have been able to use our project to quickly launch their own service worker relief sites. -### How to Get Involved +### How to Get Involved What started as a project to help a friend help his community has turned into a worldwide project to help small businesses affected by the mandated shutdowns around the world. @@ -138,9 +138,9 @@ I'll also be publishing my personal workflow for building and deploying your Ser Getting the word out to your network is the best way to raise awareness of this project. We'll be listing all published Service Relief websites on [https://www.servicerelief.us/](https://www.servicerelief.us/). -##### 3. Contribute to the project on Github +##### 3. Contribute to the project on GitHub -We've published this entire [project on Github](https://github.com/service-relief) to open it up for the world to contribute back. Here's what you'll see there: +We've published this entire [project on GitHub](https://github.com/service-relief) to open it up for the world to contribute back. Here's what you'll see there: - `service-relief` - this is the monorepo for the entire project, including the ServiceRelief.us website, Gatsby Theme, and Gatsby Starter. You'll want to fork and submit your pull requests against this repository. - `gatsby-starter-service-relief` - this is an automatically-generated Gatsby Starter based on the monorepo. When the monorepo is updated, this starter is automatically updated. diff --git a/docs/blog/2020-04-01-LA-2020-Mathews/index.md b/docs/blog/2020-04-01-LA-2020-Mathews/index.md index 0fb9e392be058..fce94ccc988a4 100644 --- a/docs/blog/2020-04-01-LA-2020-Mathews/index.md +++ b/docs/blog/2020-04-01-LA-2020-Mathews/index.md @@ -11,7 +11,7 @@ tags: - community --- -_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool, joining us at our next Gatsby Days—currently scheduled for October 19th in Amsterdam—would also be pretty awesome)._ +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ As the co-founder and CEO of Gatsby, Kyle Mathews kicked off Gatsby Days LA 2020 with a keynote address that spanned Gatsby’s past, present, and future. Learn what sparked Kyle and co-founder Sam Bhagwat to develop a framework that could combine the best of static-site generation, content management system (CMS), and React technologies. Next, hear how Gatsby today is helping produce amazing developer experiences for building ridiculously fast websites. diff --git a/docs/blog/2020-04-02-LA-2020-Schau/index.md b/docs/blog/2020-04-02-LA-2020-Schau/index.md new file mode 100644 index 0000000000000..f4b39d0e23c30 --- /dev/null +++ b/docs/blog/2020-04-02-LA-2020-Schau/index.md @@ -0,0 +1,21 @@ +--- +title: "Gatsby Days LA 2020 Video 2: Live demo of Gatsby + Contentful developer workflow" +date: 2020-04-02 +author: Greg Thomas +excerpt: "Watch in real time as Dustin Schau, Gatsby's head of product, updates a fully accessible Gatsby-built site using the Contentful headless CMS and then deploys to a CDN." +tags: + - gatsby-days + - contentful + - accessibility + - cdn + - diversity-and-inclusion + - gatsby-cloud +--- + +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ + +Dustin Shau, Gatsby's Head of Product, is a dedicated open source developer. He was first drawn to the framework by Gatsby’s exceptional performance and outstanding developer experience. Now a Gatsby team member, Dustin is focused on making Gatsby the fastest, most inclusive platform for building websites and web applications. + +Watch Dustin demonstrate the impressive build-time performance of Gatsby and Gatsby Cloud by walking through typical developer workflows, including updating a website using Contentful's headless CMS and then rapidly deploying the results through a content delivery network (CDN). And discover how Gatsby enables developers to quickly incorporate accessibility capabilities—such as a SkipNav function—to deliver inclusive web experiences to the widest possible audience. + +[![Gatsby Days LA Video 2: What's next for Gatsby and Gatsby Cloud](https://res.cloudinary.com/marcomontalbano/image/upload/v1585776287/video_to_markdown/images/youtube--zbR47FqMJYY-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=zbR47FqMJYY "Gatsby Days LA Video 2: What's next for Gatsby and Gatsby Cloud") diff --git a/docs/blog/2020-04-02-community-qa-with-kyle-mathews/index.md b/docs/blog/2020-04-02-community-qa-with-kyle-mathews/index.md new file mode 100644 index 0000000000000..5e44713807522 --- /dev/null +++ b/docs/blog/2020-04-02-community-qa-with-kyle-mathews/index.md @@ -0,0 +1,124 @@ +--- +title: "March 6th Community Q&A with Kyle Mathews" +date: 2020-04-02 +author: "Kyle Mathews" +tags: ["gatsby-inc"] +--- + +We’ve started hosting regular Gatsby community Q&A chats with yours truly! The last one was on March 6th and the next one is scheduled for early May. They’re great fun to chat with the folks about things that are on their mind and talk about ongoing/upcoming work. + +The [full video is on YouTube](https://www.youtube.com/watch?v=mGyUJvKjzXQ&feature=youtu.be) & I’ve written up many of the questions & my answers below. + +## In 2018 you blogged about "a new version of Gatsby" with incremental and parallelizing builds—what's the status & roadmap for incremental builds with Gatsby? + +I’m guessing this question is referring to [my blog post on the launch of our company in 2018](https://www.gatsbyjs.org/blog/2018-05-24-launching-new-gatsby-company/) and that supporting very fast deployments for everyone is our top goal as a company. + +This has always been my goal with Gatsby. The Gatsby v1 architecture was designed specifically to support this. Here’s the original tweet announcing when the basic support for incremental builds was added to the framework in a 1.0 alpha: + +https://twitter.com/kylemathews/status/856638851158220800 + +Gatsby has always used “incremental building” to drive developing on sites. When you edit a markdown file, Gatsby “incrementally” updates just the pages affected by that change to the markdown file. + +The Gatsby cache, if saved between builds, also substantially increases the speed of builds by avoiding much of the rework. + +As most of you know, [we recently launched our own continuous deployment product on Gatsby Cloud](https://www.gatsbyjs.org/blog/2020-01-27-announcing-gatsby-builds-and-reports/). Included in that was initial support for parallelizing parts of the build process — images to start with, and more to come. + +That drove some impressive improvements to build speeds: + +- [Third and Grove](https://www.thirdandgrove.com/) saw 60x build-time reductions from 60 minutes to 1 minute for their large 15,000 page, image-heavy Gatsby/Drupal site. +- [Gatsbyjs.org](https://gatsbyjs.org/) saw 9x reduced build times from 45 minutes to 5 minutes. +- Our [image processing benchmark site](https://github.com/KyleAMathews/gatsby-image-processing-test) saw 5x reduced build times from 200 seconds to 40 seconds. + +**We’re working on a dramatically improved way to cache between builds (making builds even more “incremental”) that’ll make all site builds a lot lot faster.** We’ll be making more noise about this soon as we ready it for launch. + +We want to make consistent < 10 second deploys a reality for everyone and any type of site & we’re very focused on making that happen. + +## What is the roadmap on SSR support for Gatsby? + +SSR (server side rendering) support is really critical for React websites. By default, React only runs in the client so it doesn't support bots from Google and social media sites, which hurts SEO and social sharing. + +There are two flavors of SSR — build-time & run-time — both solve the problem of SEO/social sharing. + +Gatsby has had build-time SSR support from the our first release in 2015. So Gatsby has always been a great choice for React apps that need SSR support. + +Some people ask us to support runtime SSR as well. We often discuss doing that but have always to date decided to instead redouble our efforts to improve build-time SSR as frankly, it’s a lot better for everything. + +Build-time SSR is incredibly less complex than runtime SSR. Operating build-time SSR sites is trouble free — you just build the site & push it to a CDN and don’t need to think about it anymore. Run-time SSR means you need running Node.js web servers to render the site...which means you have a lot of running code that can break, get overloaded, get memory leaks, and break in any number of other ways. + +People tell us one of the main things they love about Gatsby is they sleep a lot better at night. + +They don’t get alerted about website problems. + +The only problem with build-time SSR right now is when builds are either not fast enough or can’t scale to the size of your site. + +We’re razor focused right now on solving these two problems (see the last answer). We’re working so that you can build any size of site (millions of pages+) with Gatsby & deploy incremental changes in under 10 seconds. + +There are still two remaining valid reasons for run-time SSR that we plan to support. One is personalization where the page needs to be customized for the visitor based on a variety of factors. The other is A/B testing. Both of those require that you can render custom versions of pages on the fly. We will not only support this but also solve it in a way that doesn’t sacrifice the speed and simplicity Gatsby is known for. + +## What's a realistic availability timeline for incremental builds using Wordpress with WPGraphQL? + +A bit of back history for everyone: last year we hired [Jason Bahl](https://twitter.com/jasonbahl), the creator of [WPGraphQL](https://www.wpgraphql.com/), to continue his work. We want to fully support WordPress + Gatsby, meaning content authors can see real-time previews and content changes deploy in less than 10 seconds. This is the great experience that CMSs provide for content authors. Replicating it is a hard requirement for most people considering moving to a headless WordPress + Gatsby stack. + +We choose WPGraphQL as the way forward as Jason’s done an amazing job making incremental querying incredibly fast—as well as adding GraphQL subscription support, which will drive both preview & incremental builds. + +Last fall [Tyler Barnes](https://github.com/TylerBarnes) — a long-time Gatsby/WP developer — joined the team to work on a new version of gatsby-source-wordpress that leverages WPGraphQL to drive preview/10 second deploys. + +They’ve been making incredible progress. Check out [the umbrella issue for the epic](https://github.com/gatsbyjs/gatsby/issues/19292). A number of people are experimenting with the alphas and even shipping sites! If you’re interested in this space, please dive in. + +What’s amazing about this work is that **you’ll soon be able to seamlessly swap out the WordPress presentation layer for Gatsby **without** anyone working in the WordPress CMS noticing**. As a developer, you’ll be able to deliver way faster sites, enjoy far simpler hosting, put WordPress behind a firewall (maybe even skip some of those security updates! 😅🤪), and enjoy all the advantages of working in the world of modern React/JS tooling. + +## Working with images is a pain, and the distinction between page and static query seems a wrong API. The [issue #10482](https://github.com/gatsbyjs/gatsby/issues/10482) seems to fix both. What's the plan? + +We’ve worked on a number of ideas/prototypes for solving this but haven’t yet arrived at something we feel is a genuine improvement. There are more ideas floating around for better APIs, so stay tuned. We’d love to pair with anyone who has ideas for improving things as well. + +## Is there going to be a WP integration with Gatsby Cloud? + +Yup! Once the new gatsby-source-wordpress version is ready, Preview & Incremental builds will work out-of-the-box on Gatsby Cloud. + +## Are there going to be any big Gatsby core releases coming up? + +We ship releases multiple times a week. Most are incremental improvements and bug releases. We periodically write blog posts summarizing improvements. You can catch up with them at [https://www.gatsbyjs.org/blog/tags/gazette/](https://www.gatsbyjs.org/blog/tags/gazette/) + +We put up a couple of RFCs recently for “[Recipes](https://github.com/gatsbyjs/gatsby/pull/22610)” and a “[Gatsby Admin](https://github.com/gatsbyjs/gatsby/pull/22713)” experience you can go read. They’re going to push the Gatsby experience forward a lot. + +Lots more that we’ll be talking about soon. + +## Any plans for gatsby-source-drupal to support some kind of caching when retrieving thousands of nodes from Drupal? + +Yup! We hired recently [Shane Thomas](https://www.drupal.org/u/codekarate) to work full-time on improving Drupal + Gatsby to support Preview & Incremental builds just like WordPress and other CMSs. + +## Will Gatsby v3 have any breaking changes? + +A few, though we don’t anticipate it being a difficult upgrade. We’ve been collecting ideas in this issue (none of them are for sure yet) [https://github.com/gatsbyjs/gatsby/issues/15277](https://github.com/gatsbyjs/gatsby/issues/15277) + +## Shadowing pages is difficult. Query collection gets in the way of shadowing pages effectively when using different data sources. Known issue? Being addressed? + +Yeah — we’re not satisfied with the shadowing experience yet. One way we’re looking to improve the experience is with Gatsby Admin as you’ll be able to browse your themes and what files they have and immediately shadow one plus see the diff between your shadowed file and the original. + +We’re also investigating better patterns for building themes to ensure they’re flexible and straightforward to extend/override. + +## Is there a limit on the size of a website generated with Gatsby? At what point does the build time become unmanageable? + +That’s a constantly moving target as we improve the Gatsby build process. Our open source team is now 15 people strong and many of them are working on the build process from different angles from improving source plugins to core parts of the build process. [Peter van der Zee](https://twitter.com/kuvos) joined the team as a build performance specialist last fall from Facebook where he was a JS Infrastructure Engineer and [has a long string of PRs improving the build process over the past months](https://github.com/gatsbyjs/gatsby/commits?author=pvdz). + +We’re also working on adding benchmark sites that’ll show more clearly when a site is a good fit for Gatsby. + +## How do you make awesome documentation? I saw other projects but the documentation of Gatsby has a special place in my heart. + +Awww thanks! I don’t know there’s anything magic other than just caring enough to do it. Like doing anything else great — you have to care and put in a lot of effort. The whole community and internal folks leading the effort, like [Marcy Sutton](https://twitter.com/marcysutton) and previously [Shannon Soper](https://twitter.com/shannonb_ux), have done a ton of work to improve the docs over the last few years. + +## Is native TypeScript on the roadmap? + +Yes! This is something we’re pretty excited about shipping. If you’re interested in learning more or helping out, check out this issue [Sidhartha Chatterjee](https://github.com/sidharthachatterjee) put together — [https://github.com/gatsbyjs/gatsby/issues/18983](https://github.com/gatsbyjs/gatsby/issues/18983) + +[Blaine Kasten](https://twitter.com/blainekasten) has also been leading the effort to convert the entire codebase to Typescript which has been a massive effort by dozens of people — [https://github.com/gatsbyjs/gatsby/issues/21995](https://github.com/gatsbyjs/gatsby/issues/21995) + +## Are you guys trying to catch up to Next.js's smaller JS bundle size? + +A team at Chrome has been doing a lot of investigation into how frameworks like Next.js & Gatsby can optimize how we ship JavaScript. Next.js implemented that a few months ago and last week [Ward Peeters](https://twitter.com/wardpeet) shipped [a PR implementing the same new webpack bundling algorithm](https://github.com/gatsbyjs/gatsby/pull/22253) for Gatsby—so bundle sizes are now identical to Next.js. Very exciting improvement! + +## Are you continuing to work on even more good accessibility defaults for Gatsby in the future? How important is accessibility overall within Gatsby? + +We care a lot about accessibility. We think that’s part and parcel of building a great framework. We moved to @reach/router as part of Gatsby v2 to take advantage of Ryan Florence’s work on JS router accessibility, and Marcy Sutton has done a lot of testing on how to solve some lingering issues. We hired [Madalyn Rose](https://twitter.com/madalynrose) last fall as a full-time specialist for accessibility engineering in Gatsby. + +Check out our blog posts tagged with accessibility: [https://www.gatsbyjs.org/blog/tags/accessibility](https://www.gatsbyjs.org/blog/tags/accessibility) diff --git a/docs/blog/2020-04-05-LA-2020-Gladwell.md b/docs/blog/2020-04-05-LA-2020-Gladwell.md new file mode 100644 index 0000000000000..ba538952dbb00 --- /dev/null +++ b/docs/blog/2020-04-05-LA-2020-Gladwell.md @@ -0,0 +1,20 @@ +--- +title: "Gatsby Days LA 2020 Video 3: Slash Build Times with Gatsby Builds Best Practices" +date: 2020-04-05 +author: Greg Thomas +excerpt: "React developer Grant Gladwell tells how he identified best practices for using Gatsby Builds to cut build time for image-heavy websites by a factor of five." +tags: + - gatsby-days + - community + - performance + - drupal + - gatsby-cloud +--- + +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ + +Grant Gladwell is a React developer dedicated to employing modern technologies in cutting-edge projects. During his time at the digital experience agency Third and Grove, Grant was part of the team that integrated Drupal and Gatsby to create the agency’s fast, yet content-rich website. He also helped build Gatsby Preview + Drupal—a live preview module for Drupal that can be used with Gatsby Cloud. + +At Gatsby Days LA 2020, Grant focused on performance. After analyzing top Gatsby-based sites, he and his team identified best practices that can help developers achieve blazing fast speeds. Check out this video of Grant’s presentation to discover how Gatsby Builds helped Third and Grove reduce build times for its image-heavy site from about 40 minutes to only 8. And learn how Gatsby’s lazy load components can deliver impressive performance benefits without excessive coding. + +[![Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell](https://res.cloudinary.com/marcomontalbano/image/upload/v1585858632/video_to_markdown/images/youtube--xMorT50I0cw-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=xMorT50I0cw "Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell") diff --git a/docs/blog/2020-04-06-LA-2020-Gordon/index.md b/docs/blog/2020-04-06-LA-2020-Gordon/index.md new file mode 100644 index 0000000000000..fc8f13eb7b286 --- /dev/null +++ b/docs/blog/2020-04-06-LA-2020-Gordon/index.md @@ -0,0 +1,20 @@ +--- +title: "Gatsby Days LA 2020 Video 4: Methodologies for Building Highly Dynamic WordPress Sites Using Gatsby" +date: 2020-04-06 +author: Greg Thomas +excerpt: "What are the best options for integrating comments and other dynamic elements into your WordPress website? Zac Gordon evaluates key approaches." +tags: + - gatsby-days + - community + - performance + - drupal + - gatsby-cloud +--- + +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ + +Zac Gordon is a community builder at [Strattic](https://www.strattic.com/) the serverless WordPress host Strattic and an educator who has taught courses on building with JavaScript and Gatsby in WordPress for high schools, colleges, bootcamps, and online learning sites. He is particularly excited to discuss ways the evolving [content mesh](https://www.gatsbyjs.org/blog/2018-10-04-journey-to-the-content-mesh/) is pushing WordPress and the web forward by enabling developers to capitalize on best-of-breed microservices. + +At Gatsby Days LA 2020, Zac explored developer options for building highly dynamic, rich WordPress sites. First focusing on ways to incorporate comments into sites, Zac examined native, custom coding, and SaaS approaches. Learn the pros and cons of each option and discover what similar options exist for implementing additional dynamic elements, including forms, memberships, and e-commerce capabilities to websites. + +[![Gatsby Days LA Video 4: Using Gatsby to Build Highly Dynamic WordPress Sites, with Zac Gordon](https://res.cloudinary.com/marcomontalbano/image/upload/v1585860921/video_to_markdown/images/youtube--O22FNh8XXT8-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=O22FNh8XXT8 "Gatsby Days LA Video 4: Using Gatsby to Build Highly Dynamic WordPress Sites, with Zac Gordon") diff --git a/docs/blog/2020-04-06-commonwealth-aten-case-study/commonwealth_scorecard_redesign.png b/docs/blog/2020-04-06-commonwealth-aten-case-study/commonwealth_scorecard_redesign.png new file mode 100644 index 0000000000000000000000000000000000000000..0604966e6981ec966f53d1a6f0404fe34794f2eb GIT binary patch literal 150779 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
d|YqB`9r*cRpp zg)C85a%hk)6okvDfTB5=q6M6kYn{?dg#xbIUwVDhOO28OQV+GSi{q=LZ>XNLs%1YRd z!zZ77hGki-vdRjilF6JLtVV)7kR>&zGaS?k`8=|s5}RLW%Li4{u&pwl=M&7K$zk6;Pzem4s=6?|S%EV^7x& zfRO72{$xJX0HY8j3HZJ{2WvHF*er0duO_F?0cv~N($hT8Ls1kIMWI+MRsm3GEa|!~ z<%-ONX_`c%QDU(e<#KtE1D+tv?2*glf^JgjC!TGQNn2q7A^BW)m3vVTYLxEQYLTLj75TgTYIfU5vy!cHcLSW9V!JVS`XOyD>pxQe#(|b*|LaM*d0Zd z(RGb-xm?X|=!*LYKECVW3*r*F3Km5X*KsK3bHtM=B8EY+kna|v69oa^2iJ81#$su@ z=b_T8DB!vtivqoND`o#VK;(P4w%f(<_ zD@^9&d!go#5XKNHVYVQ_+V=yn6ta9llC@vGD&5UQ=LSsSzl4x-`kCiNs0c+0Jyl?T z3dj!==|cr%S(dBbR-ss->$=z#$%fi;^FQVw=g}Jl<^b(;GOIPuR*j0Ys;bDc+%0D* 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-06-commonwealth-aten-case-study/index.md b/docs/blog/2020-04-06-commonwealth-aten-case-study/index.md new file mode 100644 index 0000000000000..4c432e20b0356 --- /dev/null +++ b/docs/blog/2020-04-06-commonwealth-aten-case-study/index.md @@ -0,0 +1,50 @@ +--- +title: "Upping the Scorecard: Commonwealth Fund goes from dense to delightful with Gatsby" +date: 2020-04-06 +author: Debra Combs +excerpt: "The Commonwealth Fund reached out to the Aten Design Group to reimagine the nonprofit’s signature scorecard website concept. Aten turned to Gatsby." +tags: + - case-studies + - graphql + - gatsby-cloud +--- + +When it comes to healthcare, information is paramount. For decades, the non-profit [Commonwealth Fund](https://www.commonwealthfund.org/) has rated health systems in all 50 states and the District of Columbia on their coverage and performance. The information is delivered as an annual [Scorecard on State Health System Performance](https://scorecard.commonwealthfund.org/). For years, this scorecard has provided valuable insight and analysis into 47 different measures like access to and quality of care, service use and costs, health outcomes, and income-based health care disparities. + +Unfortunately, reading the report itself was heavy going. The format was a monolithic and extremely lengthy report, presenting extensive data interspersed with a few dense data visualizations. The information was all there, but the scorecard itself failed to provide a meaningful overall picture or tell a compelling story. + +Not long ago, the Commonwealth Fund reached out to the Aten Design Group to reimagine the nonprofit’s scorecard concept and realize it in code—a prescient move, considering our current global crisis. On the technical side, the Commonwealth Fund also wanted the redesigned next-generation scorecard to exist separately from the rest of the site so that it could be maintained independently and reside at its own dedicated URL. + +![The Commonwealth Fund's newly redesigned Scorecard website](./commonwealth_scorecard_redesign.png) + +Ken Woodworth, the VP of Design at Aten, and his team—John Ferris, Chris Coughlan and Roxy Koranda—had several goals for the Commonwealth Fund scorecard project. It needed to be easily approachable for people who aren’t familiar with reading data, while at the same time, providing in-depth data capable of informing government policy: not an easy balancing act, but a necessary one. Previous scorecards included long technical paragraphs and downloadable CSV files with the raw data points. These were hard to understand and just had to go. Overall, Ken’s team was not concerned with hitting particular metrics, such as an uptick in views; their prime directive was to present the data in a better way. + +## A fresh take with a fresh tool + +Ken and his team didn’t jump straight to Gatsby. Though they were aware of it, they had not yet tried it with any projects. The team had experience with Jekyll and Metalsmith, but Ken himself was less experienced with these tools and looking for one that he could “just use without quickly hitting a wall.” They considered a wide array of option, like [Vue.js](https://vuejs.org/), and even briefly considered building the site with a straight up static HTML approach. The overhead on static HTML sites, with no build tool and serious maintenance headaches as a result, quickly changed their minds. The team agreed that a platform was the way to go and eventually settled on React, since everyone had at least some experience with it. Recognizing that React-based Gatsby was “potentially a very good fit,” the team decided to use Gatsby for the project, running it as a test case. + +Design-wise, the project’s main challenge was data visualization. With 50 states plus the District of Columbia—and many, many data points for each—managing and presenting the data clearly had to be the top goal. Using [D3](https://d3js.org/) and [GraphQL](https://graphql.org/) along with React, the team created multiple unique data visualizations and built templates for the pages. Gatsby’s templating then made it easy to pull all information necessary to quickly build a page for each state/district. + +Page data was stored in JSON-formatted text files, and the build process dynamically looped through those JSON files to build each element in each individual page. “It was really, really awesome to be able to pull all of that data without having to build 51 unique pages,” Ken said. He particularly loved the powerful combination of Gatsby, JSON, and GraphQL: “The first time I started pulling in GraphQL, I was like, wow, this is _insane_.” + +## Going forward with Gatsby + +The team sums up their overall experience using Gatsby with one word: exceptional. Gatsby’s abundant documentation and “incredibly helpful” tutorials for getting started were key to their success, Ken said, making it easy to conquer the initial learning curve. “Going forward with future projects, Gatsby is an easy choice because it’s ready to use.” + +> “Gatsby's tutorials were on point and incredibly helpful.” + +Gatsby also made the scorecard site project “really easy to just package up and deploy,” Ken reported. “The site is fast, very fast, because we’re not reloading half of it whenever you’re just browsing around.” + +Commonwealth Fund loved the resulting website. + +The client appreciated that, unlike the original site’s long, data-dense, single-page presentations, Aten’s solution created an accessible yet in-depth presentation for the data visualizations. The new [Commonwealth Fund Scorecard](https://scorecard.commonwealthfund.org/) is deeply informative without being the least bit dense orl dull, and it’s beautifully designed. The scorecard site, in fact, won in three categories in the 14th annual [W3 Awards](https://www.w3award.com/); one gold for data visualizations, and two silver awards (one for visual appeal and one in the nonprofit category). + +Ken and his team are already building the 2020 scorecard, targeted for release in June—”Using Gatsby, of course.” Additionally, their success with the scorecard project has led to further contracts for Aten from the Commonwealth Fund. + +## From test case to best case + +Though they initially tried out Gatsby on a test case basis, using the Commonwealth Fund scorecard as proving ground, Ken and his Aten team have embraced it as their new favorite building tool. The agency is now using Gatsby for other client projects, including several medical projects. But they don’t see Gatsby as being limited to healthcare industry websites. + +“We’ve now also used Gatsby to prototype a complex application for an aptitude testing company,” Ken said. “The prototype lets us test the user interface, how we would track clients and scheduling, and lets us build complex interactions without needing to build the entire application first.” + +> “Gatsby is a giant leap forward in the static site generator space.” diff --git a/docs/blog/2020-04-07-LA-2020-Boss/index.md b/docs/blog/2020-04-07-LA-2020-Boss/index.md new file mode 100644 index 0000000000000..31920ba6c0659 --- /dev/null +++ b/docs/blog/2020-04-07-LA-2020-Boss/index.md @@ -0,0 +1,21 @@ +--- +title: "Gatsby Days LA 2020 Video 5: How Tinder Used Gatsby to Build a WordPress Site in React (Instead of PHP)" +date: 2020-04-07 +author: Greg Thomas +excerpt: "Kyle Boss, web developer at Tinder, explains how Gatsby enables developers to set up and use React as a front end for WordPress—avoiding the use of PHP almost entirely." +tags: + - gatsby-days + - wordpress + - react + - blogs + - case-studies + - serverless +--- + +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ + +Kyle Boss is a Tinder web developer who was presented with a daunting challenge on his very first day at the dating app company: build a new WordPress blog site that can help people navigate online/browser and app-based dating. The problem? Kyle is a React developer and wasn’t eager to use PHP for this new site 🙀. Fortunately, he learned that Tinder had already decided to use Gatsby as a bridge between WordPress and React. + +In his presentation at Gatsby Days LA 2020, Kyle explains how Gatsby enables developers to set up and use React as a front end for WordPress—avoiding the use of PHP almost entirely. Discover how this approach empowered content creators to benefit from the ease of using WordPress while empowering developers to work with their preferred tools. And learn how Tinder’s use of Gatsby also helped the company avoid the dreaded “succulent apocalypse” of 2019. + +[![Gatsby Days LA Video 5: How Tinder Used Gatsby to Build a WordPress Site in React (Instead of PHP)](https://res.cloudinary.com/marcomontalbano/image/upload/v1586206693/video_to_markdown/images/youtube--9SrHm3cWk9g-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=9SrHm3cWk9g "Gatsby Days LA Video 5: How Tinder Used Gatsby to Build a WordPress Site in React (Instead of PHP)") diff --git a/docs/blog/2020-04-07-virtual-gatsby-days-2020-CFP/index.md b/docs/blog/2020-04-07-virtual-gatsby-days-2020-CFP/index.md new file mode 100644 index 0000000000000..1a9b69776614e --- /dev/null +++ b/docs/blog/2020-04-07-virtual-gatsby-days-2020-CFP/index.md @@ -0,0 +1,18 @@ +--- +title: "Gatsby Days Virtual Edition: Call for Proposals is Open!" +date: 2020-04-07 +author: Laci Texter +excerpt: "Our first virtual Gatsby Days is coming June 2-3, 2020. It will be live-streamed on YouTube from 1:00-3:00pm EST each day, and now is the time to send in your speaker proposal!" +tags: + - gatsby-days + - community + - gatsby-cloud +--- + +Whether we gather in person or online, Gatsby Days conferences are all about the collective experiences and perspectives of the amazing Gatsby community 💜. + +The next Gatsby Days will take place on June 2-3, 2020, from 1:00-3:00pm EST each day. This is a virtual event and will be live-streamed on YouTube. This means all speakers will need a computer, decent internet connection, and some kind of microphone/camera setup (the camera in your computer is great!) All speakers will receive a \$500.00 stipend from Gatsby following the conference. + +Please make sure to [submit your proposal](https://docs.google.com/forms/d/e/1FAIpQLSfjUpqpmRL18ydo_PmC4jxvPG8xhOlix43KeRHOhUbPp3u7Mw/viewform?usp=sf_link) NO LATER THAN Friday, April 24th, 2020 at 11:59pm PST. We are reviewing submissions as they come in, so submitting early is an advantage. + +Learn more about Virtual Gatsby Days and previous Gatsby Days events on our website: https://www.gatsbyjs.com/resources/gatsby-days diff --git a/docs/blog/2020-04-08-LA-2020-Harmon/index.md b/docs/blog/2020-04-08-LA-2020-Harmon/index.md new file mode 100644 index 0000000000000..c528ce6d91d32 --- /dev/null +++ b/docs/blog/2020-04-08-LA-2020-Harmon/index.md @@ -0,0 +1,21 @@ +--- +title: "Gatsby Days LA 2020 Video 6: Set Up and Sell Things Fast with Gatsby + Shopify" +date: 2020-04-08 +author: Greg Thomas +excerpt: "Trevor Harmon from Shopify gives a step-by-step walkthrough for a sample site, showing how to set up a Shopify store, then pull data into Gatsby and use it to create pages." +tags: + - gatsby-days + - ecommerce + - shopify + - plug-ins +--- + +_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ + +Speed is everything in e-commerce. A single extra second of load time can cost an online retailer 7% in lost sales every year. To keep customers engaged and revenues flowing, you need to ensure your site is fast. + +Trevor Harmon is a front-end web developer at Shopify who is passionate about using technology to solve real-world challenges—particularly the challenge of launching successful e-commerce websites. To be successful, these sites need to be _fast_. + +Watch Trevor’s presentation to learn how harness Shopify and Gatsby together to produce blazing-fast e-commerce sites. Trevor provides a detailed, step-by-step walkthrough for setting up a sample site, showing how to set up a Shopify store, pull data into Gatsby, use that data to create pages, and implement a Shopify plugin to manage checkout. + +[![Gatsby Days LA Video 6: Set Up and Sell Things Fast with Gatsby and Shopify - Trevor Harmon - Gatsby Days LA 2020](https://res.cloudinary.com/marcomontalbano/image/upload/v1586210368/video_to_markdown/images/youtube--tUtuGAFOjYI-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=tUtuGAFOjYI "Gatsby Days LA Video 6: Set Up and Sell Things Fast with Gatsby and Shopify - Trevor Harmon - Gatsby Days LA 2020") diff --git a/docs/blog/author.yaml b/docs/blog/author.yaml index 3c2e248ace572..ad866b4ec3982 100644 --- a/docs/blog/author.yaml +++ b/docs/blog/author.yaml @@ -403,3 +403,10 @@ - id: Greg Thomas bio: "Writer, musician, historian, and dedicated service provider for the dog." avatar: avatars/greg-thomas.jpg +- id: Laci Texter + bio: "Runner of rivers and city blocks, car-a-oke queen, and very fond of snail mail. Enjoys the art/science/sport of communication. Senior Brand Marketing Manager for Gatsby." + avatar: avatars/laci-texter.jpg + twitter: "@textercomm" +- id: Debra Combs + bio: "Product Manager, Writer, Gamer, and lover of laughter." + avatar: avatars/debra-combs.png diff --git a/docs/blog/avatars/debra-combs.png b/docs/blog/avatars/debra-combs.png new file mode 100644 index 0000000000000000000000000000000000000000..d22490d7294c21cf5af9669280def17e6f990614 GIT binary patch literal 228506 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

    3wLs0<0 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�+M43oVPZxE*vT)U(l zO*#s2Fb}h-`xuuvUw9E3df97e_m+$Y^hX6Clmny}wC?jQyP==1FaQ4Wc}J{HCmo)=#5e$Vg`=S z9Nb^rE02e%;(~diCi8ZH5r`{Rzd3zg+W_Ec$_r)|HMI~rt;RG12p}Sr1l7E(;g?Uf zm}2J_q3`;$yKSx`%knB~dHE|E?TQ{#-xs_s8rQt%8pZ9S@AOk{1;~+owIY|py045$ zt@c~lbm1-TjeDr6@7yFvg+s>fgfVFMtNeE&=9N;m*YrJB*LIm#H;{jZpsE(CY>21b zG$o{$t{Kw1*=mJZq5Gfm362_h;Y$PZb zu3w-{Rar#1bi(Z+d{;lZ>(2_g$Z!Ctk8e|m8J}2-oPts>BIo- zZBW|+V_<40snwD-@(K;117Rzrfa8jIsh79QnmJ@@AOi+~>PWx`BkTb<4XJ{%0wZGU zWpYwq+)X{GudiYp04osUw6E@L_hbm7t3>QEz%2g;E?P}LfS{-DEDqt3bw$39CiYCL z*d^tC#2$6fXC8-d-1luir&_83FH4^(Gz2<#`T_g;Uqc;G_p$aQ5VA1BN83&M8U?sT zI5A0`*d?Z0&FS%dpQc#u>ge)}zZdkLxc5}d2Vc}va&s+MDa<-k(H!0JynlSMS)1GI z$1GkgzHj4t-O4~tSxqO87}NQ@_h>5$a+5NQPHQrhbJxwNrf>A{Gl^Nirxj7SU{eBf zF?>iFs-$mUH!W>!1MbhPxUOP*A)jnnp-N6f-HWs*QaSA^ZYd$uN31@~e6x&NGA{1~ z1U5K+-5zKzuzJV*He%9dZTz$YrmABmIVNhp(D}Tqsn#aFGRfBXqXFZRCy+>ll3?sN z9yZ>sS@gzbOStD80>?AHK~xgkr%&u+Nh)#*3uxHEqH(U}Qzgz=a^Q?C7F9@a6001-_W5!h%00klxaU@b2=!kC$H8k&zAW$o zG3y?d;X+O~Ydf0XL(^k@*>g=^ zGW*|O$nU@-6xA6c3Hz0Gn3xbr%Flur6|zGrSRfY)db)DNNvf?Acj!f8u-H2 zcHZc&dbe+G^&Cy#ctQvzdr;@pL!GzOB^Y@$wxK)$cz6s4bNqrsZY6}O$wmC&`ucI&S=JRR}5BK|+pq?V=rjURi;ZNil@~!dLbOd%|y`GDP zR$O$^P!0TYbaV^6@T7&pB-{ICS^5+3NHu(Y?%Zm-)*&o5$(VEa$Umtif2ok6xNU)B zeh*x3Rx$&n_54|Pn&#{xq`uNaTCq1?s_8oEHufWhWxCHpHvR+>PUWSb49{(1obD)5 za6v~NTvC*^AK(F5Z}a*{OAvZlbNM{&o(k83qJN1eL?)F0eK>1}N1X>t$1HnLt#H3T z&fkLAxtOYqZA89vq5U0xm3oITa5$!Gn#4y2b5`WzcMQ}tETg$Wqt!fnl_ifj0VlfA#30p(bZtRs8kF*mo~ZJ*0&v3u zNopER*aiJ-3F1y*2fst{U19WpdomH_{SVhF>L()*U-u^@#2{G;AR+ zL8!D-2uL8q#zj9fBBAqe|9qL z_jhuget+GV)Ot1VXLzQ#Nm9>kG=nxq!|G>6kPV09eWLb@d^)a?;IH_j?Qg{^jUp!9 ze!&R{SW#6-S^~!fN{nL<%RG@=8Q1}#4HaS5fRg~Rfr4cO2&n7O7sx_#2YOwSM_W#B zgI=`;FEV)4U>!Kj?Mn4~s-bm}C~3w6#9Rbd3b#b~mq;k4l~n)NG-+|GjXvz8PaJ6S z=;A~-+l(N=fCs!#_^^h>W!xCAC)>}1KM>Mu$xuMumzk~oO6uAbU{-@bsS0m4(B5M% z7yA+=xyZUX&b*j8)PAu_E?iam(&8!lA*yST*7C+*-G89J$JyFk%bO&tVZU5NRRoY37Z=H%F%Y6*txIIn zv!WTwqIfORS6?YU93V#vRH{RppBEIgTKsP_{99;?BmY+{m5UHaUH85tXkcDJw63 zrk)Cz$aL+n<9xuq%i^# zw4OgU@Q_jhR9*sMeksQCFIUE^TY9OVc?OixWE2M#8lx&Or^zP_p^CYe5Pdpo9}@+x zAksry9Pp(c1^BJ(p+PHE^lw8Ybk3Hg!e?M(J zaD8msM=RHHaX#26W|s6y4s&xU1kqznk!(m!@}t$X-t$wP;ES!1%nX{R7fm!ZN;>Q1 zSrP+f=27Kd??x1JPhU!yQj?+T1-aCzNA;iQR?rIRWTTkKD3I5aE7Yx=iebpq}d$VdQ!zJmq{L>8NiVAFI+c;xdKXj+;36xVdP<)9{ zshoVjTv-U*} zwgBteO7G)OHuG);iwsL`Iwh5pUQ*`jmS9ff8}%Xr?hkOd>Sl!lvGppWmy_5B@kYA( zl{0MRDB#+@t_yqJfrMw@lvBw+=$Dt0f3MF&`@4OmkWLA#lHu}48ro;3W_=8^)wA4tP> z3k5hqD}iPj=DnSa+uA-Hht`io@X(=}3l!V8Zv;LruXEN7Fs11l`Q3~{WbL9ug|_96ut zvz0zsE$)4$eIKN-;oYqS#7gJsQnm7XfZc*%SpuXB3a!ZYzxEzYLF@olG>Wk2g|koO z#&i_Ox4&gZJghcU5}B1mRCM_5y?92}jSLI(davA`@ibE7cFOcKhFCJp|M%p7`h-DE zIHUw^>b03OuB!AQAl%LBXU};)&kgt+&juDx{Rg!UAQZ?+uyOxmpY2MZRp6vOVA~j&ez_X&~kmukl zeX||w(I>j;mD@2eb;I$|i(uoy4R^mh3FaQC4DA8FALug!2psin*xjfq$P?$oK+pm$ zJ8Tkx!wzQo-h|KPNJ)-&nS$oy@BV5463TUr6_H+IUzT&^k`m~*bKh6dGn^c*;v_@e z`8+zJQrUn8$&Hb9O7EO1qlF{zrg}Z{hcq&LR>22F0#>Lhc(mn3Q7#@Z)DW*{hrK`fwIXjpWLy707f@xSuKON zY#ttwBQuWbt{j8T3kcn#+k&m9Ze8#P;nN@=o1Ip2R!zLQsK?aMyWF-@p~@?OFRf8I zzyiL1aOWU`?M#MGhqLPULtCV~E3fMhIaH71y1u={y!p`MY5i|r@;{o!+rar8sc@-S zFu-<{mZE=->7=PJ$&>ILy#Rp~G^trcgg5S(qmLc}o-y9Ec9B&=hScSi(nWO+;)A!2 zkgsMKqK2PXINE&>Vk9YIj{aR3V6kL_LUC>+r7k zm!Cxn|04fg?h5_d6;fD7-0TosMJxn$h2p5jJ$>xSt###hG~r$6R_Vl#aOGRIxp!|( zIec{Oq6z*>?r}H9#jnX-%XA2pYQ@k~bc%1@mE(LMs{I;X8@iNoME#r^2|Ta| zy!fLq{Z7Z|ATqWZl5U{qBR(jA#6Tro=wOb@((=P&pk^(#ksaEtma zr1uj#MBr4MtH`j0IjSFexe%l5 zd3wd5XS)W7WBoc+eIWML)49}Ly9wDlWOGNc9*1`88sZ&=@a)H0-ClpBSb2F6H>By$ z6qJD96(0~7|D-f42hdMKd|9Lk4LWX_;Lu}0(P}i3hazjn^EYe@eZ*bjbA1J~iaN1_ z-j8W^8MKd8Zba4bNk7;Bm&gc}%s^IjaMzrB&SBhdq+j3z^lCdpQ}L=;2h{Yjq>r2poRzQFhp4Q>q1R-cZ*lZqHDnuur(;)k(H1uYR`T5DYiBkITOt6KEcj;CbydFV6M>q z1n2vl9S!{+Tg&C8UcDbP{oV#+3=m9~1Oo1$Xb_h%^clgkfb1qFZ_{V#F?J)khKCRc zWLyf{{L`}WKV}~!9aJGR4ShFAt;G7u!xg5f%pqW+(3I+~L8@f$fk*eeMiJ^F#Xja< ze;wwE(fsEUv@N8KLVCV$HIMx<^(^k>nY)bXjs~9&Bk?`@n!A|>Rp$#YnW@Oa_o8jmX$mzzg zDB*D$XyqkC#Wj)-Qxv4}t8wp?4~ONRIMr0RV9$@IEZjEL;31jR)@GUDc1g*rU=fgL z8m44AROu$42$(#6dBUMPiAw)0BKYEiky&tuimbr={g`5Ho#mdMSpD}TE<segz7E6reEs)2#dBNg`Tu$|5bXz_ySm*6C3ukzw8b~ zsxe~M(iU{Tu`NRxImopLgBalg!a@Re2*sMK7sz-79U1(m^Xs-w@#z{*Kv?sc8v{9W zyF+uls%e3KU6+slu3tz{eg&JJW_edUQ?8vtmO}s6N&PXVT%XtKMDz=j*`cS9Zv$=lNzNl-WAQ57IUizq%rZQZ2|W|w{NWGxeZYI=zE{ey3kmkD#3+lvPM|PvAscs{J;{^GO@qa8wx^$y z&occf-|1b%4Q5K`s9O-48fn$pU7V&-b_5TWs8OQj)?B~*^EPB1@bohnaEbpG{AH#~ z54gJ9XaZOI%HlUjoBP-lAslT3CeW<8zbA8dG<^ipF+Dx0+MHHIcotTehuO^#q6oQi zg?|W$GI`As({#s=-eBu1PamP-}gfK3S5g1=!0tXO~22=PKhZQ}g zOh+!M;r@ne#{5;w_n) zA})T5^2cwZR^N6Avp))LP(KEX)>4O8fp~Az^;u3Qp|{H^FS1m-^oW1jz*f2Qh^Xqt z@J(pOMz^dBNbb5;;8*~&@ez_!a7w*BqT}o$5=o9K*0hE4*|V3MW6JN9__W+}o=b7^ zp+R;G=(@Yol(j#Q?pJWhz_^b_#;hUDrb*U6Ize}LAyUwLITkyE;kW--*+XCRY;K*Y zLsy+RJmuCGSC<|T+PVf~QMG5;s$Thx#7Q9vgXH=V`|tX49QqcRc3w7?O_vUl5~6eQ>1{jri; zawkc61GKjrt8+0^waHmcmri9J0@1fw1xYB|_94Zjw9MMv_)?uJC5`E-qD980!MH5f zB9nXrHnrN{CZoJxO9D#;S!Dqm6aubfhJ4ro-O~5Hlzy2}CHJHKF8cNFZ_&R&g(v5D za1%#R_!;Leh-0%84syc2y(4avZrA02Ir?nJ%+nSe z%{I1^c_nF^G`<(W7AYITW}hEp0vY?8U&Go=4qWu2@ja20*S~R7U=#Ca?Uf-hFL-r; zI^8vI_h6F{(}y<-p~OLrAOtwOr*io1>j=ed0Z0$fQ_!L!A<_lNG*YNVx0ewCoxlfQ zLVzpzlIQ3RO*8AY=<@D--6!^^*cc8Ey(4inpq-)Q!b-C+x|$fKWF_ke9vOs{1N!E| z>j(0Ph4}2j9TG(Oe&Iz23H`u9iBf5r>p%fi$KScCHWx!K^*njfrBIelXX0cehjRHY z+zvq@?W?Im+c=Cl;l2_4C6D^^baiOK6>;kLxKAczwbiYKx^vK6gU?c@^C()2q@=*H zL;U|rI`2TL+c%8cDx`dq`hOiXI(s!YcWet6t59Pe!_K3-{KP)T8X_vYH9 z36-~u9@CHlwwd4*_&44aHKd~$v6JeUT=?8}XTOjqr;~Q>Xz#~S8}!Egkwwk}ur+d< z6;6QW3@ls$_8WCw{=37|0aPT|rx}&`s?hbjj|TvK2HMnTA&`tzyzBM-R<<~fYT8;) z9oSv$XBU+oPIq=LpW>{la&;6R@vo-E^o`epOr92f25iEMg=J*<0lqj1WdjMy=0>To z%iA-xVC4g+$sp`WhBD8=T>!nA48rorIx`yjw4do-Am}1>Yt3i*4|w%JD~JUDl%vQK zs9`xBvFcs#{T>a&IegO!YX;G8pGyAC*HFR}ySdRrdwlU6I+n&^`U9?;a)09wGg2x; zf0oIjK~b)abL`oZEcKS-TVfYRZ4qxY0CqvhKKnV=s}DI_ewAv8jmO{?G6HwiWTHzC zonDTkI%Qq~akYwxrc4%G$JD+6*+s})j%9r!dT{%}njfMqD9925muoSnzu06n{_ltE zdAF}+W;?N7mRA%vK2=JP&j`gOYjx4QgE&1EfaW2EpEPWR+}Fs9Y`U7(ax^HyDx(?E z%aJuLq9B0k4J`X1(fv>HxmFP$c_S+G0 zVTa2DSN~<)2ctO`Ke_K3Krn}czMFUVir!su{sD?vqP zTD+OdQCHbDP&fu{mMMNGC+V`-(lBn-(9x+J+O81$ZfnNkZ|Mn5k>%(!4LQ8a=>E<5 z(myk5laqI#ZOE3Y4{+fksV8gh0`w8cer~ef_VLD)Srb?^Y z;HE8m#`6HxM3PWXOTg`d6DIABYkXu+Wgk68P_v=jLZ{)#McFM%B>Fs3ai^=tn7RW} z?i_4l;ALh=U>V@_=-11HpeS8g93E|qW9TF5gQX9KARuS^^F_g=a;tP(D7eVu;(SLY zJodNiZ40_}V&b=NZn`y*iKmwCqKRSTMbw7Yub(j#yr;>GP;jwUaebks6c%dR()tTi zgNk329kd2`zS1IH9^Z$wtyOG`?-9+6tPB|xSf@jJyV!V5XRp0uOz*%ma-FL(RORM*w$;&%7GdbuBIO6B^=VN98v)u z>(e(K5RC*k=dbYH?$}i0`q(P0 zH!qb*Frq;?RWL-a5)K7}_Et5KtBT+gbVhGLT89vV%a^@bTU}ailp~*AHkI14w}fkg zR^rG$Cg6Cyd~2F@S9V2-^Q8=zQ+1P6pU7b2)-X@YH`rQ0M-_O@;iL$Rv+WuGLh3}} zxu*(R65zJ{r`eOeFPU+`-Gn^JfgYGbD0vbn2*SyTdRqOsMI;Q{64Tk|k}8_wADKJ3 zhCRHSy*!0GxUDd$ zG@CGJ;9RccmWt)r0G4iW!U%?9AUK2)CyZ7|tEq3>rLOE-aeo4p(J6VWJfu3W%-l*wZa8{xF(_rW z6dtB#d;f95!y`=^;R_de`>f!BYrS?NJ!|`;dfrUlN>-~H2ac%9;Ix>g8fm>)Cbj#| z`3M+=!?(=vm0$5ZGwP*1-b#GpsFIv!P7~1$TW$bj*S~pA5|j-en(!>_oR5o{6-rtY zFd345$wA~~cq}U1sK`-t4U3No*`6Ge{CD9*`9H&x{88FVFRnVkxq8SM`4INp0K$ZO(y1_BfZ&*i=3dc&{ThV90`d*-8PUPHLQ?Y( zP3E)eg)`4QL6PxpT;}!J?ZX$bLuPH`04Tsrgn zPnF?AD$>7y9y<$Uu^9Lcwr1Z)XxV@~NH}$DC&_@6*R^M*nG&d~koQcLjuhQX@qPI} z<|Od@=KAD-^jGnDEErt9$V7~wh>)Yw#cizABJ4^x+t>-|909kvolsie0T3<-EKMTHDFhUNgjDMq#z!O%Sbn8 zp)}|Ey38h=FY~qO+=+A~qi~oN&~K1j%c3D3k2~;zh(i3YEvGL?R-u-)TY%DXD06zm zI2Jq|ApYh8S-=&mX8sv6dQh%+wl(90FuHeE4@uO)goXIMnRjx(k71$HxDEF6^c_HH z;rhO=bmsxJAMWWdzxiMP1!>L&7pYUfbuk;1OSlfkZpQNs_Bqac?1Ylpi9C_laX3bc$_^(Wz)mitl4B`FqKRWH$Rx5tCp zrW2KBP`Onh0{Rd%I%&H#Fg&u$^Pz+;9cZ_Ut=7Dc?B)N@aaW)~3Io)2>ESEHK#=iz77{ooT>(y+~T0oE%b(UT8S|n&;X*TQ^@?;KS6QG+x}i^oWOL z>4#2Z`&8n|wU1jC>^AOv69XlU~{_WWs1kJ@$N}eDv3{b(^ZKxXSi;3wB7WK4BBIc zWMmu6u*m-^ME1c|oR1OAu6?+zgYIsNQ;Be zLcFio1$$*py2L2;LQ0J22C6#wPsmccq^R^?KXa$6laxiOjH$Z`L*YABK@tz*b649b z-h@@}ud(f~SU0)sv^c$Hp+8(heYq`0a(@#(=HxKxk6BU0tgyu#KT`BmMfu05kLB*OX_PuL? zDZyzi?>^e4TwW0`uF6#16J^uqXS0g=%LMx=8z1FUsA((1z5rA?a{oYkS!g`ILY!ad zL7lfa^MNAP`57sNNVfa^tEXLEVSw&tRq5;2Zm8pnEzW?tv zS}JSKqeT8XInt`%!jjKb__ZRD`P~NT0Xfkv+zb2{%$|O`n!*!bu}_k$RJR`$-TYDd zwEpTM-O9FnFvnUvBh(?<4phyHzoOcXs!vO#5|-h5!m+A4v(-IS?Na_;!sf%+tjAlQ z1(vjqhU_U>8XWDTJQ1Tr5fPl5J&8QwBQtmSJ)@x{znQgm4fXkkb@sC{s6v^^OZZKv69)kSGMAMQS05xx<}?0+#M#=F=> z9JRG&`20oWL4>838l_9_H&XHn#vts8+39z!0q<2*6{*S`KFYNQu>JBFTjq}^|GPcu SKF&@7Kica0YGo?6q5lJ{)1M&# literal 0 HcmV?d00001 diff --git a/docs/blog/avatars/laci-texter.jpg b/docs/blog/avatars/laci-texter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0752937e7965285ab3a2e9aba3a5007b0daa1b1 GIT binary patch literal 145332 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

    %x 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 z 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

    0)ixn*?lGPTmsURujO8N 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�-a)iO-iD&l;0(tv}hONcUKr&CU^CovV2Oq-tj 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 Z%kE!vWB&l&Jb%?_$1mLv<^G00|Ji%Vdd~m= literal 0 HcmV?d00001 diff --git a/docs/contributing/community.md b/docs/contributing/community.md index 1662a7c52d652..a15e2021ba329 100644 --- a/docs/contributing/community.md +++ b/docs/contributing/community.md @@ -13,7 +13,7 @@ One of our community's values is that ["you belong here"](/blog/2018-09-07-gatsb ## Gatsby Contributor Covenant Code of Conduct In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and +contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity diff --git a/docs/contributing/docs-and-blog-components.md b/docs/contributing/docs-and-blog-components.md index 39e4a501e81e3..8396c4f4145a7 100644 --- a/docs/contributing/docs-and-blog-components.md +++ b/docs/contributing/docs-and-blog-components.md @@ -206,6 +206,89 @@ New docs and blog posts are added to the [docs](https://github.com/gatsbyjs/gats You can read more about writing in Markdown in the [Markdown syntax guide](/docs/mdx/markdown-syntax). +### Frontmatter + +[Frontmatter](/docs/adding-markdown-pages/#frontmatter-for-metadata-in-markdown-files) is a set of key-value pairs in your Markdown and MDX files that defines the metadata for a page. While authoring new docs and blog posts for the Gatsby site, it may be helpful to understand what frontmatter is available to you. + +#### General + +- `title` (string) + + The title of the doc or blog post. Gatsby renders the value in `og:title`, `` and `<h1>`. + +- `excerpt` (string) + + The excerpt for the post. Gatsby renders the value in `description`, `og:description`, and `twitter:description`. + +#### Blog Posts + +- `date` (string) + + The blog post's date in the format of `YYYY-MM-DD`. + +- `canonicalLink` (string) + + The URL to the original piece of content. This is useful for SEO attribution when cross-posting blog posts across domains. Google [offers an explanation](https://support.google.com/webmasters/answer/139066?hl=en) if you're interested in learning more. + +- `tags` (array) + + The blog post's related tags. Gatsby renders the [YAML array/list](https://en.wikipedia.org/wiki/YAML#Basic_components) as links to tag archives and creates the archive if it doesn't exist. + +- `image` (string) + + The relative path to the image. + + - Facebook and `twitterCard: summary` support an aspect ratio of 1:1. + - LinkedIn supports an aspect ratio of 1.91:1 and `twitterCard: summary_large_image` supports an aspect ratio of 2:1 + - Gatsby resizes the image to 1500x1500 and renders the URL in the `og:image` and `twitter:image` metadata. + +- `imageAuthor` (string) + + The name of the image's author. Gatsby renders the value in an `<a>` tag only if `imageAuthorLink` is defined. + +- `imageAuthorLink` (string) + + The link to the image's author. Gatsby renders the value in an `<a>` tag only if `imageAuthor` is defined. + +- `showImageInArticle` (boolean, default false) + + Determines if the `image` is displayed as a hero in the blog post. Gatsby renders it as a fluid image with a width of 786px. + +- `twitterCard` (string) + + A choice between: `summary` or `summary_large_image` that Gatsby renders in the `twitter:card` metadata. + + - `summary` - displays the post as a snapshot that includes a thumbnail, title, and description to convey its content. + - `summary_large_image` - displays the post as a large, full-width image that conveys the visual aspect. + +- `author` (string) + + The author's name, which is also the `id` in the `/docs/blog/author.yaml` file. Gatsby renders a link to the author's archive page. + +#### Documentation + +- `description` (string, default `excerpt`) + + A description of the doc. Gatsby renders the value in the `description` and `og:description` metadata. + +- `issue` (string) + + The issue URL relating to a stub on GitHub. Gatsby renders a link to the stub. + +- `disableTableOfContents` - (boolean) + + Determines if the table of contents is output. + +- `tableOfContentsDepth` - (integer) + + The number of levels to render the table of contents. + +#### Relevant Links + +- [About Twitter Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards) +- [Facebook Sharing - Best Practices](https://developers.facebook.com/docs/sharing/best-practices#images) +- [Making Your Website Shareable on LinkedIn](https://www.linkedin.com/help/linkedin/answer/46687/making-your-website-shareable-on-linkedin?lang=en) + ### Code blocks Code can be formatted using regular Markdown syntax, but the docs site has additional enhancements that can be used thanks to various Gatsby plugins that aren't all native Markdown. diff --git a/docs/contributing/events.md b/docs/contributing/events.md index ddc52a72dc23c..00ebcbc46ceda 100644 --- a/docs/contributing/events.md +++ b/docs/contributing/events.md @@ -3,9 +3,9 @@ title: Gatsby Community Events description: Learn about other events happening around the globe to connect with other members of the Gatsby community --- -Interested in connecting with the Gatsby community in person? Take a look at the list below to see community-organized Gatsby events. +**IMPORTANT NOTE ON COMMUNITY EVENTS: Promotion and support of Gatsby community events is currently suspended due to COVID-19. Stay tuned for updates on when our community events program will resume.** -Want to see your event featured here? [Submit your Gatsby event info!](https://airtable.com/shrpwc99yogJm9sfI) +Interested in connecting with the Gatsby community in person? Take a look at the list below to see past community-organized Gatsby events. <Events /> <EmailCaptureForm signupMessage="Want to keep up with the latest tips & tricks? Subscribe to our newsletter!" /> diff --git a/docs/contributing/how-to-file-an-issue.md b/docs/contributing/how-to-file-an-issue.md index bf9752f8a3e07..bd97e538f618c 100644 --- a/docs/contributing/how-to-file-an-issue.md +++ b/docs/contributing/how-to-file-an-issue.md @@ -2,14 +2,22 @@ title: How to File an Issue --- -The [issue tracker](https://github.com/gatsbyjs/gatsby/issues) is the preferred channel for bug reports, feature requests and [submitting pull requests](/contributing/how-to-open-a-pull-request/). +The Gatsby GitHub [issue tracker](https://github.com/gatsbyjs/gatsby/issues) is the preferred channel for bug reports, documentation, feature requests and [submitting pull requests](/contributing/how-to-open-a-pull-request/). -If you want your issue to be resolved quickly, please include in your issue: +To resolve your issue, please select the appropriate category: + +- Bug Reports +- Documentation +- Feature Requests +- New [Translation](/contributing/translation#creating-a-new-translation) Requests + +For bug reports, include in your issue: - Gatsby version, Node.js version, OS version - The contents of your `gatsby-config.js` and `package.json` as well as your `gatsby-node.js`, `gatsby-browser.js` `gatsby-ssr.js` files depending on changes you've made there. +- A [reproduction](/contributing/how-to-make-a-reproducible-test-case/) for debugging and taking action Please do not use the issue tracker for personal support requests. [Stack Overflow](https://stackoverflow.com/questions/ask?tags=gatsby) (**gatsby** tag) and the [Gatsby Discord](https://gatsby.dev/discord) are better places to get help. @@ -18,7 +26,7 @@ Please do not use the issue tracker for personal support requests. [Stack Overfl If an issue is affecting you, start at the top of this list and complete as many tasks on the list as you can: 1. If there is an issue, add a reaction or more details to the issue to indicate that it's affecting you -2. If there is an issue and you can add more detail, write a comment describing how the bug is affecting you, OR if you can, write up a work-around for the bug -3. If there _is not_ an issue, write the most complete description of what's happening, preferably with a link to a Gatsby site that reproduces the problem or [create a reproducible test case](/contributing/how-to-make-a-reproducible-test-case/) -4. Offer to help fix the bug (and it is totally expected that you ask for help; open-source maintainers want to help contributors) +2. If there is an issue and you can add more detail, write a comment describing how the problem is affecting you, OR if you can, write up a work-around or improvement for the issue +3. If there _is not_ an issue, write the most complete description of what's happening, preferably with a link to a Gatsby site that reproduces the problem or [create a reproducible test case](/contributing/how-to-make-a-reproducible-test-case/) where applicable +4. Offer to help fix the issue (and it is totally expected that you ask for help; open-source maintainers want to help contributors) 5. [Deliver a well-crafted, tested PR](/contributing/how-to-open-a-pull-request/) diff --git a/docs/contributing/organize-a-gatsby-event.md b/docs/contributing/organize-a-gatsby-event.md index 18d6bb34a754d..6ac7030caa45f 100644 --- a/docs/contributing/organize-a-gatsby-event.md +++ b/docs/contributing/organize-a-gatsby-event.md @@ -2,12 +2,4 @@ title: Organize a Gatsby Event --- -Our communiy event support offerings and process are undergoing some changes. Check back soon to see our updated community event support opportunities! - -## What constitutes a Gatsby event? - -A community-organized Gatsby event can be a local meetup, a small conference, a “lunch and learn” with coworkers, or a larger event - as long as **it includes at least one Gatsby-focused presentation or discussion**. It’s up to you how many people you want to invite and how casual the environment. You can organize an event at your workplace or for the local community. - -## Related Links - -- [Gatsby's Community Events](/contributing/events/) +**IMPORATANT NOTE ON COMMUNITY EVENTS: Promotion and support of Gatsby community events is currently suspended due to COVID-19. Stay tuned for updates on when our community events program will resume.** diff --git a/docs/docs/add-seo-component.md b/docs/docs/add-seo-component.md index 8d471a2b20bd5..f955ce8686d61 100644 --- a/docs/docs/add-seo-component.md +++ b/docs/docs/add-seo-component.md @@ -4,11 +4,11 @@ title: "Adding an SEO Component" Every site on the web has basic _meta-tags_ like the title, favicon or description of the page in their `<head>` element. This information gets displayed in the browser and is used when someone shares your website, e.g. on Twitter. You can give your users and these websites additional data to embed your website with more data — and that's where this guide for a SEO component comes in. At the end you'll have a component you can place in your layout file and have rich previews for other clients, smartphone users, and search engines. -_Note: This component will use StaticQuery. If you're unfamiliar with that, have a look at the [StaticQuery documentation](/docs/static-query/). You also have to have `react-helmet` installed for which you can have a look at [this document](/docs/add-page-metadata)._ +_Note: This component will use `useStaticQuery`. If you're unfamiliar with that, have a look at the [useStaticQuery documentation](/docs/use-static-query/). You also have to have `react-helmet` installed for which you can have a look at [this document](/docs/add-page-metadata)._ ## gatsby-config.js -Gatsby makes all data put into the `siteMetadata` section of your `gatsby-config` file automatically available in GraphQL and therefore it's a good idea to place your information for the component there. +Gatsby automatically exposes the `siteMetadata` section of the `gatsby-config` file in the GraphQL datalayer. It's considered best practice to place your site meta information there. ```js:title=gatsby-config.js module.exports = { @@ -26,15 +26,16 @@ module.exports = { ## SEO component -Create a new component with this initial boilerplate: +First create a new component with this initial boilerplate. ```jsx:title=src/components/SEO.js import React from "react" -import { Helmet } from "react-helmet" import PropTypes from "prop-types" -import { StaticQuery, graphql } from "gatsby" +import { Helmet } from "react-helmet" +import { useLocation } from "@reach/router" +import { useStaticQuery, graphql } from "gatsby" -const SEO = ({ title, description, image, pathname, article }) => () +const SEO = ({ title, description, image, article }) => () export default SEO @@ -42,7 +43,6 @@ SEO.propTypes = { title: PropTypes.string, description: PropTypes.string, image: PropTypes.string, - pathname: PropTypes.string, article: PropTypes.bool, } @@ -50,7 +50,6 @@ SEO.defaultProps = { title: null, description: null, image: null, - pathname: null, article: false, } ``` @@ -59,12 +58,15 @@ SEO.defaultProps = { As the SEO component should also be usable in other files, e.g. a template file, the component also accepts properties for which you set sensible defaults in the `SEO.defaultProps` section. This way the information you put into `siteMetadata` gets used every time unless you define the property explicitly. -Now define the query and place it in the StaticQuery (you can also save the query in a constant). You can also alias query items, so `title` gets renamed to `defaultTitle`. +Now define the query and pass it to `useStaticQuery`. You can also alias query items, so `title` gets renamed to `defaultTitle`. ```jsx:title=src/components/SEO.js -const SEO = ({ title, description, image, pathname, article }) => ( - <StaticQuery query={query} render={} /> -) +const SEO = ({ title, description, image, article }) => { + const { location } = useLocation() + const { site } = useStaticQuery(query) + + return null +} export default SEO @@ -84,98 +86,97 @@ const query = graphql` ` ``` -The next step is to destructure the data from the query and to create an object that checks if the props were used — if not the default values are utilized. The name aliasing comes in handy here: It avoids name collisions. +The next step is to destructure the data from the query and create an object that checks if the props were used. If not, the default values are applied. Aliasing the properties comes in handy here to avoid name collisions. ```jsx:title=src/components/SEO.js -const SEO = ({ title, description, image, pathname, article }) => ( - <StaticQuery - query={query} - render={({ - site: { - siteMetadata: { - defaultTitle, - titleTemplate, - defaultDescription, - siteUrl, - defaultImage, - twitterUsername, - } - } - }) => { - const seo = { - title: title || defaultTitle, - description: description || defaultDescription, - image: `${siteUrl}${image || defaultImage}`, - url: `${siteUrl}${pathname || '/'}`, - } +const SEO = ({ title, description, image, article }) => { + const { pathname } = useLocation() + const { site } = useStaticQuery(query) + + const { + defaultTitle, + titleTemplate, + defaultDescription, + siteUrl, + defaultImage, + twitterUsername, + } = site.siteMetadata + + const seo = { + title: title || defaultTitle, + description: description || defaultDescription, + image: `${siteUrl}${image || defaultImage}`, + url: `${siteUrl}${pathname}`, + } - return () - }} - /> -) + return null +} export default SEO ``` -The last step is to return this data with the help of `Helmet`. Your complete SEO component should look like: +The last step is to return this data with the help of `Helmet`. Your complete SEO component should look like this. ```jsx:title=src/components/SEO.js import React from "react" -import { Helmet } from "react-helmet" import PropTypes from "prop-types" -import { StaticQuery, graphql } from "gatsby" - -const SEO = ({ title, description, image, pathname, article }) => ( - <StaticQuery - query={query} - render={({ - site: { - siteMetadata: { - defaultTitle, - titleTemplate, - defaultDescription, - siteUrl, - defaultImage, - twitterUsername, - }, - }, - }) => { - const seo = { - title: title || defaultTitle, - description: description || defaultDescription, - image: `${siteUrl}${image || defaultImage}`, - url: `${siteUrl}${pathname || "/"}`, - } +import { Helmet } from "react-helmet" +import { useLocation } from "@reach/router" +import { useStaticQuery, graphql } from "gatsby" + +const SEO = ({ title, description, image, article }) => { + const { pathname } = useLocation() + const { site } = useStaticQuery(query) + + const { + defaultTitle, + titleTemplate, + defaultDescription, + siteUrl, + defaultImage, + twitterUsername, + } = site.siteMetadata + + const seo = { + title: title || defaultTitle, + description: description || defaultDescription, + image: `${siteUrl}${image || defaultImage}`, + url: `${siteUrl}${pathname}`, + } - return ( - <> - <Helmet title={seo.title} titleTemplate={titleTemplate}> - <meta name="description" content={seo.description} /> - <meta name="image" content={seo.image} /> - {seo.url && <meta property="og:url" content={seo.url} />} - {(article ? true : null) && ( - <meta property="og:type" content="article" /> - )} - {seo.title && <meta property="og:title" content={seo.title} />} - {seo.description && ( - <meta property="og:description" content={seo.description} /> - )} - {seo.image && <meta property="og:image" content={seo.image} />} - <meta name="twitter:card" content="summary_large_image" /> - {twitterUsername && ( - <meta name="twitter:creator" content={twitterUsername} /> - )} - {seo.title && <meta name="twitter:title" content={seo.title} />} - {seo.description && ( - <meta name="twitter:description" content={seo.description} /> - )} - {seo.image && <meta name="twitter:image" content={seo.image} />} - </Helmet> - </> - ) - }} - /> -) + return ( + <Helmet title={seo.title} titleTemplate={titleTemplate}> + <meta name="description" content={seo.description} /> + <meta name="image" content={seo.image} /> + + {seo.url && <meta property="og:url" content={seo.url} />} + + {(article ? true : null) && <meta property="og:type" content="article" />} + + {seo.title && <meta property="og:title" content={seo.title} />} + + {seo.description && ( + <meta property="og:description" content={seo.description} /> + )} + + {seo.image && <meta property="og:image" content={seo.image} />} + + <meta name="twitter:card" content="summary_large_image" /> + + {twitterUsername && ( + <meta name="twitter:creator" content={twitterUsername} /> + )} + + {seo.title && <meta name="twitter:title" content={seo.title} />} + + {seo.description && ( + <meta name="twitter:description" content={seo.description} /> + )} + + {seo.image && <meta name="twitter:image" content={seo.image} />} + </Helmet> + ) +} export default SEO @@ -183,7 +184,6 @@ SEO.propTypes = { title: PropTypes.string, description: PropTypes.string, image: PropTypes.string, - pathname: PropTypes.string, article: PropTypes.bool, } @@ -191,7 +191,6 @@ SEO.defaultProps = { title: null, description: null, image: null, - pathname: null, article: false, } diff --git a/docs/docs/adding-a-shopping-cart-with-snipcart.md b/docs/docs/adding-a-shopping-cart-with-snipcart.md new file mode 100644 index 0000000000000..4edb64ad73dc6 --- /dev/null +++ b/docs/docs/adding-a-shopping-cart-with-snipcart.md @@ -0,0 +1,194 @@ +--- +title: Adding a Shopping Cart with Snipcart +--- + +Snipcart is a shopping cart solution designed to drop neatly into any web project. Including it in your project allows any HTML you write to instantly become a "buy button" with the addition of several Snipcart-specific attributes. + +Combine it with a source of products (like a CMS or an e-commerce platform such as [Etsy](https://www.etsy.com/)) and a payment processor (like [Stripe](https://www.stripe.com/)) to build a complete e-commerce experience for your customers. + +## Prerequisites + +To get started, you'll need to have the following set up: + +- A Gatsby site with [`gatsby-plugin-snipcart`](/packages/gatsby-plugin-snipcart/) installed +- A [Snipcart](https://snipcart.com/) account +- A Snipcart test API key +- A list of products to sell + +Installing the plugin adds Snipcart's shopping cart JavaScript for you, so you can get right to building your e-commerce site. It's okay if you're not sure what you'd like to sell quite yet. Using sample products is fine to begin with! + +## Defining Products + +Adding products with Snipcart involves writing HTML representing your product and adding a set of attributes to that HTML. You might write something similar to the following code block for each item in your catalog. This code could be part of a page like `index.js` or anywhere else you list a product. + +```jsx +<section> + <h2>Silver Stacking Ring</h2> + <p>$19.99</p> + <p>Wear one or seventeen! These rings are fun to mix and match.</p> +</section> +``` + +Including this information allows a visitor to see what you have for sale, but they can't do anything with that information quite yet. You'll need a way for customers to add individual items to their cart. Try adding a button with the following attributes. + +```jsx +<section> + <h2>Silver Stacking Ring</h2> + <p>$19.99</p> + <p>Wear one or seventeen! These rings are fun to mix and match.</p> + <!-- highlight-start --> + <button + class="snipcart-add-item" + data-item-id="silver-stacking-ring" + data-item-price="19.99" + data-item-url="/" + data-item-name="Silver Stacking Ring" + > + Add to cart + </button> + <!-- highlight-end --> +</section> +``` + +Snipcart uses these attributes (`data-item-*`) to figure out what your customer is trying to buy and how much to charge them. The ID, price, URL, and name attributes are all required but there are several other attributes that you can add to enhance the shopping cart. + +Importantly, `data-item-url` denotes the URL of the webpage displaying the product(s). Snipcart needs to crawl this page to validate the order. The web crawler looks for the HTML element with the `snipcart-add-item` CSS class as well as the `data-item-id` and checks what it finds there against whatever is in the cart. + +> Note that, while you're testing, a `data-item-url` value of `"/"` is fine. For the checkout flow to work, you will eventually need to replace this with the actual URL at which you've published your catalog or product page. + +To learn more about defining products, see the [Snipcart documentation](https://docs.snipcart.com/v3/setup/products). + +### Adding product variants + +Snipcart refers to variations like size and color as "product options" or "custom fields". You can add these custom fields to your products to allow customers to refine their orders. + +Building on the stacking ring example, suppose that you wanted to give your customer a choice between available sizes. You would do this by adding a custom field with a name and options. + +```jsx +<section> + <h2>Silver Stacking Ring</h2> + <p>$19.99</p> + <p>Wear one or seventeen! These rings are fun to mix and match.</p> + <button + class="snipcart-add-item" + data-item-id="silver-stacking-ring" + data-item-price="19.99" + data-item-url="/" + data-item-name="Silver Stacking Ring" + <!--highlight-start--> + data-item-custom1-name="Size" + data-item-custom1-options="6|6.5|7|7.5|8|8.5|9" + <!-- highlight-end --> + > + Add to cart + </button> +</section> +``` + +You can add multiple custom fields by incrementing the index of the `data-item-custom` attribute. Perhaps you want customers to have the ability to mark each item in their cart as a gift. + +```jsx +<section> + <h2>Silver Stacking Ring</h2> + <p>$19.99</p> + <p>Wear one or seventeen! These rings are fun to mix and match.</p> + <button + class="snipcart-add-item" + data-item-id="silver-stacking-ring" + data-item-price="19.99" + data-item-url="/" + data-item-name="Silver Stacking Ring" + data-item-custom1-name="Size" + data-item-custom1-options="6|6.5|7|7.5|8|8.5|9" + <!--highlight-start--> + data-item-custom2-name="This is a gift" data-item-custom2-type="checkbox" + > + <!-- highlight-end --> + Add to cart + </button> +</section> +``` + +### Selling digital products + +Snipcart enables the sale of digital goods such as e-books, photography, and other artwork. To sell a file you intend for download, you'll need to upload it to your Snipcart dashboard and then add the resulting guid as the value of the `data-item-file-guid` attribute to your product's markup. You can specify a file access expiry in days and a maximum number of downloads per order from the dashboard. + +```jsx +<section> + <h2>Silver Stacking Ring</h2> + <p>$19.99</p> + <p>Wear one or seventeen! These rings are fun to mix and match.</p> + <button + class="snipcart-add-item" + data-item-id="silver-stacking-ring" + data-item-price="19.99" + data-item-url="/" + data-item-name="Silver Stacking Ring" + <!--highlight-start--> + data-item-file-guid="your-digital-product-guid"> + <!-- highlight-end --> + Add to cart + </button> +</section> +``` + +## Customizing the cart + +Using Snipcart allows you to retain nearly complete control over your customers' experience on your e-commerce site. You can configure and customize the cart behavior as well as the product options. Look through your [Snipcart account settings](https://app.snipcart.com/dashboard/account/settings) to change things like currency, shipping options, and email templates. + +### Preventing automatic popups + +By default, the shopping cart will pop up every time a customer adds a product. To prevent this behavior, set the value of `autopop` to `false` in your `gatsby-config.js` file. + +```js:title=gatsby-config.js +{ + resolve: 'gatsby-plugin-snipcart', + options: { + apiKey: 'your-api-key', + autopop: false // highlight-line + } +}, +``` + +If you choose to prevent this popup, you'll need to give your customers some other way to access their shopping carts. Create a "show cart" button by giving a `button` element a class of `snipcart-checkout`. + +```jsx +<button className="snipcart-checkout">View Cart</button> +``` + +### Styling the cart + +You can override most aspects of the shopping cart, including the CSS. Try inspecting the element you'd like to customize and using your browser's developer tools to find the correct Snipcart class to override. + +```css +.snip-header { + background: #663399; +} + +.snip-layout__main-container { + border: 2px solid black; + padding: 3px; +} +``` + +You can also customize the cart template itself. For a complete list of Snipcart's components (with code examples), check out their [default theme reference](https://docs.snipcart.com/v3/themes/default/reference). + +## Connecting a payment processor + +Once you're ready to receive payments, connect your chosen payment processor to your Snipcart account from the dashboard. You'll also need to input your credit card information in order to get your live Snipcart key. + +The following quote is from the Snipcart [payment gateway page](https://app.snipcart.com/dashboard/account/gateway): + +> Please note that you can select only one payment gateway. However, you can also enable Paypal Express Checkout on top of any gateway you choose. +> +> Also, you can switch from a gateway to another whenever you want. + +## Other resources + +- [Build an E-commerce Site with Gatsby, DatoCMS, and Snipcart](/docs/tutorial/e-commerce-with-datocms-and-snipcart/) tutorial +- [`gatsby-plugin-snipcart`](/packages/gatsby-plugin-snipcart/) +- [OneShopper Gatsby starter](/starters/rohitguptab/OneShopper/) +- Reference guide on [sourcing from Etsy](/docs/sourcing-from-etsy/) +- Reference guide on [processing payments with Stripe](/docs/processing-payments-with-stripe/) +- From the Snipcart blog: [E-Commerce for React Developers [w/ Gatsby Tutorial]](https://snipcart.com/blog/react-ecommerce-gatsby-tutorial) +- [Snipcart documentation](https://docs.snipcart.com/v3/setup/installation) diff --git a/docs/docs/adding-page-transitions-with-plugin-transition-link.md b/docs/docs/adding-page-transitions-with-plugin-transition-link.md index bca376c4e36a1..71a7ccefe1dfc 100644 --- a/docs/docs/adding-page-transitions-with-plugin-transition-link.md +++ b/docs/docs/adding-page-transitions-with-plugin-transition-link.md @@ -159,7 +159,7 @@ module.exports = { ]; ``` -As always, check out [the installation docs](https://transitionlink.tylerbarnes.ca/docs/transitionportal/) for more information. +As always, check out [the installation docs](https://transitionlink.tylerbarnes.ca/docs/installation/) for more information. ## Further reading diff --git a/docs/docs/audit-with-lighthouse.md b/docs/docs/audit-with-lighthouse.md index 3426d0c6dca96..55bb3595b813d 100644 --- a/docs/docs/audit-with-lighthouse.md +++ b/docs/docs/audit-with-lighthouse.md @@ -42,9 +42,17 @@ Now run your first Lighthouse test. ![Lighthouse audit results](./images/lighthouse-audit-results.png) -As you can see, Gatsby's performance is excellent out of the box but we're missing some things for PWA, Accessibility, Best Practices, and SEO that will improve your scores (and in the process make your site much more friendly to visitors and search engines). To improve your scores further, see the links under "Next steps" below. +## Using Gatsby Cloud -Next steps: +If you use [Gatsby Cloud](https://www.gatsbyjs.com/cloud), a Lighthouse audit runs automatically every time your site builds. In Cloud, every code commit to GitHub triggers a build, allowing you to see any shifts in your scores and what code changes caused them. + +![Lighthouse audit in Cloud](./images/cloud-lighthouse.png) + +## Next steps + +As you can see, Gatsby's performance is excellent out of the box but we're missing some things for PWA, Accessibility, Best Practices, and SEO that will improve your scores (and in the process make your site much more friendly to visitors and search engines). + +To improve your scores further, see the links below: - [Add a manifest file](/docs/add-a-manifest-file/) - [Add offline support](/docs/add-offline-support-with-a-service-worker/) diff --git a/docs/docs/creating-a-generic-plugin.md b/docs/docs/creating-a-generic-plugin.md index 9ddcca4d41227..716e25f45acbe 100644 --- a/docs/docs/creating-a-generic-plugin.md +++ b/docs/docs/creating-a-generic-plugin.md @@ -36,16 +36,16 @@ In `gatsby-node.js` you can carry out functions with these APIs, such as: [sourceNodes](/docs/node-apis/#sourceNodes) is a life-cycle API that a plugin can use to create Nodes. An example of how to implement a function using `sourceNodes` is shown below: ```javascript:title=gatsby-node.js -exports.sourceNodes = ({ actions, createNodeId, createContentDigest })=>{ +exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => { const nodeData = { - title : "Test Node", - description:"Testing the node " + title: "Test Node", + description: "Testing the node ", } const newNode = { ...nodeData, - id: createNodeId("TestNode-testid") - internal :{ - type: "TestNode" + id: createNodeId("TestNode-testid"), + internal: { + type: "TestNode", contentDigest: createContentDigest(nodeData), }, } diff --git a/docs/docs/deploying-to-gatsby-cloud.md b/docs/docs/deploying-to-gatsby-cloud.md new file mode 100644 index 0000000000000..cf72236660d4e --- /dev/null +++ b/docs/docs/deploying-to-gatsby-cloud.md @@ -0,0 +1,125 @@ +--- +title: Deploying to Gatsby Cloud +--- + +This guide will walk you through building and deploying your Gatsby site on [Gatsby Cloud](https://www.gatsbyjs.com/cloud). + +## Why Use Gatsby Cloud + +Gatsby Cloud is a platform of stable, trusted tools launched by the team behind Gatsby.js in late 2019 that enables web creators to build better websites. It offers unique features that remove friction in your team's workflow including: + +- [**Autoprovisioning**](https://www.gatsbyjs.com/docs/autoprovisioning) that empowers new users to create projects in minutes with a Content Management System (CMS), sample content, and connected Gatsby starter. +- [**Real-time Preview**](https://www.gatsbyjs.com/docs/viewing-preview/) to simplify content creation and collaboration. Preview offers a private playground for developers, designers, marketers, and content creators by providing a shareable temporary URL for viewing changes immediately and in context. With instant updates triggered by a CMS or webhooks, it’s a shareable, hot-reloading preview. +- **Numerous CMS Integrations**, many of which are automatic +- **Builds** is the fastest continuous deployment solution for Gatsby sites and apps- up to 20x faster build times compared to other solutions. Build with Gatsby and deploy to your favorite CDN. +- **Reports** provide automated Lighthouse performance checks and deploy previews to fix errors before they’re published. + +Best of all, Gatsby Cloud includes a [free tier](https://www.gatsbyjs.com/pricing/) designed to comfortably support personal and small sites. + +## Integrations + +Gatsby Cloud integrates with the tools you already use to build sites. By connecting your Gatsby project's Github repo, Gatsby Cloud automatically builds and deploys your site when you make changes. + +### CMS Integrations + +Gatsby Cloud offers integrations with a wide variety of CMSs. The below CMSs have first-class, automatic integrations with Gatsby Cloud: + +- Contentful +- Cosmic JS +- Dato CMS +- Sanity.io + +If you want to work with a CMS without automatic integration support you still can. There are specific documents available for the below integration points: + +- Contentstack +- Drupal +- Strapi + +In addition, Gatsby Cloud offers a POST endpoint for manually integrating with CMSs that support webhooks. + +### Hosting Integrations + +Gatsby Cloud offers automatic integration with the following hosting providers: + +- Netlify +- Amazon S3 +- Firebase +- Google Cloud Storage +- Fastly + +Please refer to the [Gatsby Cloud Docs](https://www.gatsbyjs.com/docs/) for full details on available integrations. + +## Set up a new Gatsby site from scratch + +1. Head over to [Gatsby Cloud](https://www.gatsbyjs.com/get-started/) and sign-up/sign-in with your GitHub account if you haven't already. +2. Click the **Create new site** button on your [Dashboard](https://www.gatsbyjs.com/dashboard/sites). +3. Choose the **I don't have a Gatsby site yet** option. +4. On _Tab 1_ choose from the Starter options and click **Next**. +5. On _Tab 2_, enter a name for your new project and click **Next**. This will be the name of the project repo added to your GitHub account. + + > Note, you will need to set your [GitHub permissions](https://github.com/settings/installations) to enable "All Repositories" access in order to allow Gatsby Cloud to create a new repo. + +6. On _Tab 3_, click **Connect** to authenticate with your chosen CMS provider. + + > If you're looking for instructions on configuring Gatsby Cloud with a specific CMS, check out the [Gatsby Cloud Docs](https://www.gatsbyjs.com/docs/). + +7. Once you successfully configure your CMS, click **Start my site**, prompting Gatsby Cloud to provision your starter project. +8. On _Tab 4_ click **Finish**. On your site's dashboard page, under the _Production_ tab, you'll see an in-progress build. + + > Once the build has finished, a URL will appear for you to view the live build of your site. + +9. Under the _Preview_ tab you can find your site's preview URL. + + > This preview URL will allow your team to make changes to your CMS and automatically view updates to your site in real-time without having to rebuild. + +10. If a build fails, you can click **View Details** to view the warning, errors, and raw logs for the build. + +## Set up an existing Gatsby site + +1. Head over to [Gatsby Cloud](https://www.gatsbyjs.com/get-started/) and sign-up/sign-in with your GitHub account if you haven't already. +2. Click the **Create new site** button on your [Dashboard](https://www.gatsbyjs.com/dashboard/sites). +3. Choose the **I already have a Gatsby site** option. +4. On _Tab 1_, select your repo containing your Gatsby site from the list of options. + + > If you don't see your repo in the list, you can adjust your repository access by clicking the **Connect a new GitHub Organization** link or configuring the Gatsby Cloud app installation in your [GitHub settings](https://github.com/settings/installations). + +5. With your repo selected, you can modify the _Production Branch_ and _Base Directory_ that will be used to build and deploy your site. + + > If you are setting up a monorepo, you will need to set the _Base Directory_ as the directory containing your Gatsby project. Gatsby Cloud supports `npm`, `yarn`, yarn workspaces and `lerna` with yarn workspaces or `npm`. + +6. Click the **Next** button. On _Tab 2_ you can choose from the automatic integration providers to connect one or more CMSs to provide data to your Gatsby Cloud preview instance. +7. By clicking **Connect** next to any integration option, you will be prompted to authenticate with that CMS platform and choose your data source within that CMS. + + > If you're looking for instructions on configuring Gatsby Cloud with a specific CMS, check out the [Gatsby Cloud Docs](https://www.gatsbyjs.com/docs/). + + > If your CMS provider isn't listed but supports webhooks, you can attempt to manually connect to it using the Gatsby Cloud POST endpoint. This will keep your Preview automatically updated when you make changes to your CMS. + +8. Once you have connected your desired integrations, click **Set up your site**. On _Tab 3_, you can configure any environment variables that you wish to set for your preview and build. +9. Click **Create site**. You will be brought to the dashboard page for your site and under the _Production_ tab you will see that your build has been triggered and is underway. + + > Once the build has finished, a URL will appear for you to view the live build of your site. + +10. Under the _Preview_ tab you can find your site's preview URL. + + > This preview URL will allow your team to make changes to your CMS and automatically view updates to your site in real time without having to rebuild. + +11. If a build fails, you can click **View Details** to view the warning, errors, and raw logs for the build. + +## Set up hosting for your site + +1. Navigate to your site in your Gatsby Cloud [Dashboard](https://www.gatsbyjs.com/dashboard/sites). Under the _Site Settings_ tab, navigate to the _Integrations_ > _Hosting_ subsection. +2. To setup an integration, click **Connect** next to the hosting provider of your choice. +3. Follow the prompts to authorize with your hosting provider. + + > The [Gatsby Cloud Docs](https://www.gatsbyjs.com/docs/) provide specific tutorials for each hosting provider. + +4. At this point your hosting integration should be setup. + + > You can verify this by returning to _Site Settings_ > _Integrations_ > _Hosting_ where your new integration should show as _Connected_ in green. + +5. Now when a build is triggered, your site will be deployed to your hosting target(s). + +## Additional Resources + +- [Gatsby Cloud Docs](https://www.gatsbyjs.com/docs/) +- [Announcing Gatsby Cloud](/blog/2019-11-14-announcing-gatsby-cloud/) diff --git a/docs/docs/gatsby-on-windows.md b/docs/docs/gatsby-on-windows.md index 5d4b28baa7dd4..ff6b2eab854b5 100644 --- a/docs/docs/gatsby-on-windows.md +++ b/docs/docs/gatsby-on-windows.md @@ -11,7 +11,7 @@ Tools). The recommended way to setup your build environment on Windows is to install the [`windows-build-tools`](https://github.com/felixrieseberg/windows-build-tools) -package by running `npm install windows-build-tools -g` on an admin PowerShell +package by running `npm install --global windows-build-tools --vs2015` on an admin PowerShell console. Upon installing this package, it downloads and installs Visual C++ Build Tools 2015, provided free of charge by Microsoft. These tools are required to compile popular native modules. It will also install Python 2.7, configuring diff --git a/docs/docs/glossary.md b/docs/docs/glossary.md index f3979ab7781a5..52b1fc0849c10 100644 --- a/docs/docs/glossary.md +++ b/docs/docs/glossary.md @@ -176,7 +176,7 @@ A hosting provider keeps a copy of your website or app and makes it accessible t A feature in use when you run `gatsby develop` that live updates your site on save of code in a text editor by automatically replacing modules, or chunks of code, in an open browser window. -### Hydration +### [Hydration](/docs/glossary/hydration/) Once a site has been [built](#build) by Gatsby and loaded in a web browser, [client-side](#client-side) JavaScript assets will download and turn the site into a full React application that can manipulate the [DOM](#dom). This process is often called re-hydration as it runs some of the same JavaScript code used to generate Gatsby pages, but this time with browser DOM APIs like `window` available. diff --git a/docs/docs/glossary/hydration.md b/docs/docs/glossary/hydration.md new file mode 100644 index 0000000000000..b6d45d88f49c3 --- /dev/null +++ b/docs/docs/glossary/hydration.md @@ -0,0 +1,53 @@ +--- +title: Hydration +disableTableOfContents: true +--- + +Learn what _hydration_ means, and how Gatsby makes use of React's hydration features to build blazing fast websites and applications. + +## What is hydration? + +_Hydration_ is the process of using client-side JavaScript to add application state and interactivity to server-rendered HTML. It's a feature of [React](/docs/glossary/react/), one of the underlying tools that makes the Gatsby framework. Gatsby uses hydration to transform the static HTML created at [build time](/docs/glossary/build/) into a React application. + +A typical React application relies on client-side rendering. Instead of parsing HTML to create the [DOM](/docs/glossary#dom), client-side rendering uses JavaScript to create it. A minimal HTML document serves as the application container, and only contains links to the JavaScript and CSS necessary to render the application. + +```html +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width,user-scalable=yes" /> + <title>ExampleApp + + + + +

    + + + +``` + +With client-side rendering, most actions trigger local DOM updates instead of network requests. Clicking a clicking a navigation link builds the requested page on the client instead of requesting it from the server. Because they make fewer network requests, applications rendered in the browser provide a blazing-fast user experience — after the initial download. + +That's the drawback to client-side rendering: none of your site's content is visible or interactive until the client downloads JavaScript and builds the DOM. However, not all clients can construct a DOM. For example, client-side rendering can prevent search engine and social media crawlers from consuming and indexing your site's URLs. Browser users, on the other hand, may see a blank page or loading image while your JavaScript bundle downloads and executes. + +[Server-side rendering](/docs/glossary/server-side-rendering/) makes HTML available to the client _before_ JavaScript loads. Your site visitors can see and read your content even if it is not fully interactive. Server rendering eliminates the blank page problem. Rendered HTML also makes it easier for search engine and social media crawlers to consume your site. Of course, server-side rendering also has a drawback: every URL request requires another round trip to the server. + +Hydration lets us take a hybrid approach. + +> **Note:** You'll sometimes see developers use _re-hydration_ used instead of _hydration_. They're interchangeable. + +Gatsby's build process uses [Node.js](/docs/glossary/node/) and [`ReactDOMServer`](https://reactjs.org/docs/react-dom-server.html) to create two different versions of your site. Each URL is available as both a static HTML page, and as a JavaScript component. + +When a visitor requests their first URL from your site, the response contains static HTML along with linked JavaScript, CSS, and images. React then takes over and _hydrates_ that HTML. React adds event listeners to the DOM created during HTML parsing, and turns your site into a full React application. Subsequent page requests are DOM updates managed by React. + +### Learn More + +- [Understanding React Hydration](https://www.gatsbyjs.org/docs/react-hydration/) from the Gatsby docs +- [ReactDOM.hydrate()](https://reactjs.org/docs/react-dom.html#hydrate) from the React API Reference +- [Rendering on the Web](https://developers.google.com/web/updates/2019/02/rendering-on-the-web) from Google diff --git a/docs/docs/images/cloud-lighthouse.png b/docs/docs/images/cloud-lighthouse.png new file mode 100644 index 0000000000000000000000000000000000000000..b2840ed728bcdfbbbe32e9c2874ec04163070653 GIT binary patch literal 69135 zcmeFZhgVZuw?2%bNKpY1P>?PlH3|aK1*C~|q*v*L-a<#Dseq^mh)9qQ0-^T~(o5)} zB?0LK5_%7On{(b<&i%&kzWxC>V}$Hv@3r<`bImo&GoQsf4K>9Zq;#YN1Ozvfm7Zx4 z5L{~|Ah>jom2l8XM2vp_nDqX(hO)g z#_s0ZsEn1aikz)A>%?BJ*3ycK3)y92R#V}Bzzy{J;!eIaJ);>2%ZzTs8 zngib?S?xSMUBy5k2n50p5#)Dqw*@^C6%_?N6aWbb@BvrwdH6beTKMoed$9f8$$#|o z%-X}!-QLyH-o=^uqF;+wE?%CJtgII|`p?(j&uQ&r|6g}<_W0MZfB}Lo&VU~AKLq_} z-#}A|i(kbw?0u{q^`F^0Svz|G_mFxd`b1dbuLl3WQ~!0#|JKytznTg>dHmm7{sLTtQlt`~|CGHHDO%BR0ho?^_RrLHfX~Ypa|66S0PhF?`UH+k zivzv+cL)fc5-2~D(eb&oo7hE zA6)x3tcrJ%yZX6XLnNw9cA8nKMI5V(NOi*b0=AoBbFxv!~yc zWrn)i3oWkeveIaQ4;D8y)S``lIa1{~>5y!i{bIGikEERbPo~!9NNWj?2BpEELnl{mN+LN}m?U}3P)u6*J3oeZxuPd&o7m>lE_ki`(Q74=HC#vy_ zICpCY)!@$#;b(h84_`@=xekBGVr+58Wy^hKlchTml!{NiQ~&*A1O=1|D}W&Wx5E!v zSDbAQAxuBtSr}kb?2}f%4u6op=}Fxx33jc+!*3abj0;;xSc&I$FaL=W<=@iCcO82p z+3Tu)<)Cua*JPC=%%8Q|bY`y2=H_d+$e;<{?@&;%RClU$u%D?%b|D#y#0ZLxj_BV$ z=q2L&GUn%Jcz5&jOWi4)RSN>n!ye1RLBr={t9%hTbre{V-)nRxw5lMT+~S2t%*6U( zBiH^!rUfdqA0LGQLQP!gPZsGD^1DgV+HM%i6DAjV^Lfdu_EKz0v`23Vajc-m`_Mly zcf;|`9~i`=Sv*a_*9&#$Y_c5bOS34j1|j}N6-3gWD<4aUrSG#pzpbvfnN%YXw%Hc| zv7`T!<$XJ3WBOc(X3jU70?H{@*gDcKRLl7qqkEoD;cSw@^yC5i2fk0Y^Y6udpnzIB z3(=DPTbYJ9Dx053PqVu;z6S5k)Qqu8B;t!`lcBnEtGr>?X40?mwi3dIRK7eVKJa@Y zTdnwp?@ykSn#2*^h=jy20tUH5(yx|u&i&cK=BL+2yKRxNT_J=gSytVj4Ytm*l#?l2 zN3QUM%l>a}?O#*4`fL{0be<4!v`t^NQgazQ)Gs#o`4T3~_A5ouFXFiq%GS_YdRZTe zn>YVt&UqD{hHsuK5X0j$!dyM#E;|pAchAX1E;hFi>W7Il(6Y>gwDAAQSQm-)qc-c0 z?n9t6m!e$D)T(Jq$LIjteJ6N@V?`IVKFGrMhDpjX+_i!j^z!Ey2vRgCiUK-cM?moJ zAM;}tiQ{x-zhPKD1q>Xv+#T16c)!;=ta4r51F-_5fYI8>yN0>SQ_@hhwtb|y^lxVy za7HYb(`2jP&(TR-nwietW4HcJ;rwe8e^NpWad{|Ptr8meM{At2Sk~w4bezr@xc_E> z_qCB94a9Ty1o5ma|1L%WLJm*1*AyS*ee`YRh{@$-ul$LS!-<*0*uo;c^ujhD-hcK- zuKg{6>=RiZeTe-3-Q*7zm%;yu>;JUt{}$uF4eTz~iO)^i)0Zk5U)Hl9jQ;+VKz zcS3`a6{5wYl8ko1NWbUy1Gf10x(N>KKUE5cmz86Ng~~Jzvh)6J?-Z|}s@(_j9>Va= z3KFn&$Iq&T&~l|L zC5~gv6g~yWXD%BwWce=A1l<$=gK-jE5%_!|Ns89a0C8?--Ps|re8b2CX^45b)$c!W zBA19W>4BWmkw5I{E3U8c&h;9zVu{st6XpV8LmH? zVQZoJlVs!pkk3u(5UZ0zR))m*oQE?$u`vEYJ0$2@F(jL!-#T8$X`Y_pPuTTfGoL|brsuqPe5D0mLG&z)6quAxBnQp7l1I5N#>^ao#QY|LWyC7B&##=Z}NFQ7rm{Yw9CHGlP4^M zvHKg-oItMhZtBhDs~;YPGS;MLce2TZuhd~z*u>9}ESx$LrdTGC;i8>sYjkhhJY&U} zXG2DuvBtrvkIri1RwpjFr&uOqVK7Z@IM+?CX0fs|$j}eB(s1ath%5b_7_aqS$d3}~dhz2jMMC+Ao?|ci^*yzxtu=-Ni7Yeh-dHQG#yn+h^>+&Lsm8~xhsc8S&GHJ;9`6DYQpYlJr2aK4wVo% z30-|eyM1J9*0afy;dFLJi0c+U;9_Bsfq_vSrh0MNi7IeYq@|5)M}Z78=ZvM4qF^J) z8C5UO@gZ0zAz-I4mjae%xootMT`BUOw9d)7Uf#1*c9A=NA!(WEAh^jopjS|jOqbV; z3*x!q6zn4G;v2tPoo}?{z+CuG=*0d0g+g56?7PCf}N^nzX(zgc0S~J1vOkoe7u=5rLuLaoh_S+4 zh;zpbr^lDoPmFqmm05a%}oX>Fz;E5{ehpSY~AU{@udCIprBK~Lv? zivn_=JC%1wzrE&owlIVK%G32D`uyyqsJ!}Td|^XSo1cJ{-T8F~lCf;+kngUsNB30o zQB+1X{`>1CR1Th)i2bU{c;Nl1ohgvJjR?KWDS5W=EKe7&bN)3Y;|imnYkD7auQ6s2 z?Y%=YAoi_`@t-Cxj`b-b8h%Ur;H|8^pyD@cXcH0nqQyvf-rN zzq;o?BYE}0ioB=t1gw0HZ_?xoo#Hb(x_cIzIHvYLm^gnTx&cyttnN<5bZ75lz&SEj zCMS==RV}9M&F}h9ko37Bhw9gL1_dMyw~hvfl&~5pHUDiPa*_*6Fr3^xRe{M2OjhH9 z?L!+O-SMhLZ&y#ZEIGRiAcSuU)NVSA@H0Q}@Dxb;tO~5_I|gbL%ArM1@Uao(4D9HD zh8OQ|^Ya#|`LiJDKaSzHa2;$TCXoG-8E4#-%s11q`_U|^85T;zLcik^O%roc15o1z z#pW_Kr|%=&QAa{qYu%j6NAo=fDx2UUd#90|WjF{o;5%{})SC!%>f?7(CJgqc*bhEivIoZR=?>;mRI(Lfqiu|SpcJ_*G^uh?|8DNa- zpkQPE2OY9HT?f1^UYof{zQV;By5%mw*u`WWD>hct(unx@NaqC^Ruq38dwJy2bjHG| zD<<ET>o9wW>*mJKi_J-h*Qdv zugqj*8MM9PouFzRd#}e=!WJG}bYipF4vs)Ltf7BI*`@^rW6n?s$uSO6Ctt0Vj?3 z#uPhJ{9xN8-OSU?G7e1z%r$*&l*;R7x?Qi zyFPkr^SC-e5bzl3x^rP&S6)%JvZX5X{tv4X4P>`a)v!%#qr~US?F_>OoO#5sgjokl zY`9*qzd=WEYIziv6C=qc^c=CP)?4hvD_bp$&0z{k7-Ay?f7g|)DUH4(`8c<~E+z{} zxdRG5vrHdwM^qFaV3Ad`1D`=_kz(OWd!KlP_jJmQEfP8h19DPK`%|BKP6W_u^LXEoe}DU?pKU}!iQBx{cBf156nut?hrz^e z5r8z88tUK)22b8Ca#tpGI|E*<-!xIJXPCr&=#A+PRMKBHx!g(q)N#$iy8l~+R^ISC zt;Niqp!zD0*=Cue9r(*q-w~TUt*la=Cuh~qih9N2)6U1>vaQ$Kbt#*Re%bG;C}4;j zoZg~d;W3vCVx>YJ4PT>_mun30&1j?*GATM)IY@ou{rg)7r-;u%jnWXSd%ABEBly@b zlR}kPk8IjZ?~L28h(`}*)lgfFZfA|paw8!jDGfprf&2CAeKdEF%RXEtwL0bNm2fWc z1JR+re7(XFDmAr-%a}~b19834))%r8P|85Yy{SFl!LvfR{qr}a535Z54%WdEx9}EG zKK}cUn{t0aUz&iAAUogJu8hQ~!B`i26IFE24|pDlZ#8xrRtDk5{L2Ss!1y4eNuS_h z<%E(efi~r_1!hexeyzD0b5Ew5+?NL!JZleVl-PRh;{&QP_4P);Hdrz$x3;J(<~(I>(f$h#uTcJJ5mslt=702D_NE;9nI z)}}63E(OEg!ZkY70bu!;1=}A%XR9ajsZD}#F=TMCgQTeu84WMRZqjT#!?9@ka&-&1 z=!|g${tA@2E16~5D(pOAXWVqoW8L$mGWDf=zpb;KD|!g=xBMuj27%z zSy8I*@~UKQ{sF_bv_}(?g8TFS%A{%pISDrZTT^k8`J=%CTcgebFg;i9;K}Hh<%N7u z6N$=rt^YpO`FJYa!XE1(;MCD8u+&(xz4aUZ2Ac}?H0n%V%&sg^z%}MM#csSAb&g2rKBq4uuNDQXcEl zVx?$w?7L*1L(Qt*e%Vj?vOU!Og282DNtnekcyKUi-@}NC&dfU|5XPgIcOTxk`Apw* zuUx>Vnb@Gr&q?E(+C*)Gk)kL*dL+}gjNZ`@BP=q3);3iz2|i^KYGC32dADKzINv2AaLHtNmbIo%9sZW8PIkKW z(LcQYM?nCewxwdJhtoD#4@HFA4}()5Cd^hmXQIAGb@RSHWk4JD#-lO4CRxI}Mx0wr z@JG~NdR{;YQoe#c3x6jUC3JMy;KCx}aLb&5E1!;uhshMT9!Bs^4G5zBJcMGchSgPYO-QR|mHSi-$(+l_hwk zZKZW$#tRc08?H^RXn@zMvirZRj-V>-5y**F+9C@*B4#^Qkm!H%MA23M9-rTm!ylI$6kQN$Qi#2|X;jd7_3~e}@c@B|W zxWJE#2se9P`H)h-kV`-vskhs3F-MA81Z$Nh4|TFBM97JIXMDUo8O^kh%TrWu=J*nDwiGenE;rcPWM|{|~0k_K14|D#_Sy7i4TJdJ=Ev=~^cRKCu z3cC93Z5mzPVaU9{hwULvL6D55w=TZM5Zjn<_VowlH@qKPLGGQEt9thf{Vkm4^Q=R0 z$LQX9XSR1cX34m~KpaVcwEIp3Hd0{76DP{0TmSWYaFA;7t*0wBegW2HJPS~N!Z7fK1NN~ekM~>V`m?S1|j=@>A(e~9t?@v zdB3FMVRaaNYms3+6v-r>*HV|GD=rW9arhkbV%=ku$`51g(^zok;WS}eVzf3mN4W5r zh_+7CTN-fp1sa^JS@0sgXAZ||&yP->rFzBLf%I#YC(%?FEj&Wi`f?)Zti4$r4sP;G z)uNOrX&lRO0f}qM!)u0oh*pLxLLs$2vek`XFIm;hAF_3gO+v;a=}EimV@PFt>mNYn)BOwR6^PvFmnyzULx{)+Ix>21777`Eds!=%n>#Iy zy{}RkX4H4Z+WqFw+l8zykH2AmS@pp2Q0}RpKA7-bnpQ83$uh&F z?Fm8eKu4$E**SbYhe2Y&+L}Zjum)g@D^JaLz(oS%WMhTwC=oNh_yctEvYuP7lT()F ze8idCD{+27K9?UQmG5Xq_Z$+ZFYBUnbc?v<6z@wuWXLN>>=#4h@Kpm-BXHBbQ&u+NBS_C!OCIu;$`;KeM&;woqALD}P)ZFewr z0d_3$ytLI2oUgP<1gy9yZJznbGE`M0_d3R^Y;7$6Zi{znz(d={+=^scsGoCbb%HCl zxh_$$u-{?y3BvEDW+Hs;OnCH-uKeT@Us1wu_V?4^z|)eP({6*c{)Mv=wuay9x@dK7 z8^1IF1ae=^O4O$<;)&i{8>QfJ>!u{*2s@wbAq!-?B5nkCk8})ACwHY$fwG(MKS6`}`ACdm z`4%olt-P+(-cr2970AuDvD3KjQ(rQtq2ufILOax&j}T-~3M>QIFlV5uOZlaGDSyKl zRSekr>^o(mvEIR!kHToJ$HeSOJxAA`NM$+W1$BoH&3`iBqwUj8yD}=KUHCYT^ccUR zSf=wa;+lf=!jAvpr{-Z9x?qQjxImF3zgPu26)@=WkY6g#JzJ#0;0wpKbB z&3CDvt^2+|@UBvILvq|*#0AA#2&x_2=MAU|T_1DugTU_u$FOW+atk3Z==HI?K|4LGe?S#SpJu8gUEtE%o1w<7yT@qEGj z0;_*U?6Qe%PfwUqz6$U64VR@}KSq`5Hc{<;QDQxeYm#75$KNV8{NVRWNfs!8Sk1j0 z;$xL9&6!N&3tf^Q0X`D{&MYAT^b9Flnu)f#J zHNR~QFir*^8D+TO*FxRu)jyM`A7gB5O9GXMwe1? zhvg@)rL|onYG~5ALpK`yHCS4w@17kmt5EeTtH%c`Fr!_&@2o;D`*j`*X(g9>^{JIp zecZJszRjvjokgcSNn5T!6onoG69Q@gbp z_vPJ-t{>FOHZWGpR+E}*oB4`422P!Iq~H_Hu7nlycgUCeJ>8UbNTtL}rStbS1PNIT z6I$?}ne^(V5DUyB5v@}z6`aGB092=Ye;k*(Lla>X5V`#lags(eRx7;CVB&v5#Wz}5 zW*F6ROUpmD;sXm|B>ks#GNY9D!FZy5lG58_LW`YJ4^e8-LoXZxC6CW2g`3WXq<$NO z)=@pHzdmA`$}cu4FPCdevNt>XE;7v?b@VRqL#-^XeGl|yj*ZAaXRDk3!N*do|LEH;KAaKT;#D;jn|OMgx}2MUdj46q_zzn zlz=N3b4{#{lU;f<;x5B5;JYAh%g)&S&lCS-`-px83W36utzdYrJs%`)tv5vt!t2CW#RMTy7f(q;bxN;Kb z?&ifDyxOdkgeNzJbjiSuH>oj_X)nPI$#N*v-8Pj`6G*4w}->QY1~ol-DBeay8K} zlg=GWF7sJZn-u74ibNq1@2-j%`;W5kpURg7_9FeGD-N_Q_X=4?C2KJ>CY)-00S8{m zpaf~y^qxlAq`28tIuj<7=^Rtn(X8^ICQtd{r_%myyJfB*Q5Xfaa_-*RyK?+#8OYka z$wD~KGSO&}qpYzA801Wa&cU$PN!x++bGZ0r-7nk}U_9OLt>|i}I-qQzFx$|Xz;JAP zTCFUANf8wm`*yNE=utnP`K(nvhI+|-e%vfnT)9OYJ$-iAraqkE|08gSL)*s}>EwVb zISFt;2m9}rKTOlYj0EVJ`8G&T4&m=rH)xZiwZ>DF<|+lJf+WISQ+{dG`)n2e)Ug_q zg0-YPybWZXx&}(m9H3~QT?X~9V>axGu@ElhJs^xwB}N=1Hg-OKhN1UPcgdd)fRoyD zg(>>0PZD)(+77qH$x9m8eSK9=|NT~JbV#RojjWFZRPG>fonLO&G~vwDY4k@@%z4MQ-p#+_z05wUE1 z--ED7(isQUIfElV+ARLjlN+_2wUs-+-QQ54HUhArYYYJuL7xCc8Ev0u9QUH#v$)}V-G6y@%!1kT&VyNQ*XipAbQDVY!nv`SuG0`lb zA1Y$y6P$-;o}ioI(+Ia?utUs}{;I{6S2b3{3>c2j4tiX#?sTSpe=znl)gf*seY~2{QiCm_TX2U6rV)i{TsB!Z>&akG)H^+GBPyqMkN1BOWZJ6Z8|;n7;mp$Isu>@fdISaTK>QEwISY(9yw`nF094i{QW)6 zF~hn(kmy}KUbv!n|7F!uT+WMVpIUJe8DuT^#FB*DoX=>xaOFP14H5LPf~W5t5MaS8 zO^R3^=T=n0E)~qZ5nGOW|Cg2mxf}iXUR?sM)2)!~!2MO)@sl@L^!S#IAlIWU+^cVJ zGUaz+u<6Z9p|}ccLW74~RV}up(9THTqZ=B}XGt`HWcog=-8)SRK|~4k;7an)GVMwCN1pT*nhePVb(|Yr31)&$xyaDZh^JDw#HQ zd1}0a`QcMO3loINCXw3E0jjB#{(8yaVQ^YB9VJED?vn&RRrKQKdcSRXaff|kr3?QdZ z{MEFAjibiwTA#nNu4c8ztAG+%+AhEGS`kGDo`mkMQR)w~f2OE!DfrZAe#TnHzptL) z(h4&vg}_n8%Aenn%ne~9!D%a`b3j619HLt!YKZnYsj4N?qvRU@_(drf!;^nNbOU?; zv(jRn=~dL%v(GC6Pn5$)QI>l5KX~Gh$7VuQWS;#_H(<*ICezjZF;x+J*8*=kjEm{5 zC9~5zr05BDA#3$uJPJ7q#L^qPYaPFR-sm|F>T;&+W2jt{u)v*HEM=&}?`7^E#VDe; z!Y03LZt-*GNx_a-N#<%{-Wd9+=~tiK+ZuE@M|am;cCxc57&j!XdCqXLetCm?<-w4>YZ*X#BX@3dW5;g5*z)K zeF88~i04H5z+A!DQ^9P;LQI&nCeB{8!l!vkSzRn(q4;$3;J{ri&!er!XXT`1d&;FK zti6*?Gs}+JH)Cj5zbwZ<3O)>E5?Eac@4hQQVe>%v=jxd10>?a&ksJ^bM1HtuZelb= zcJnCi7K<_ReLj0l#0Wf>pD>bWoc;#a6eGv|_0RlOSI74yjz;6G4g*^-%nD+iQON>F zciFyP8MkdXN=RNHov)O5oT*C;>Ge1PfGT(*V?!%)vG!>4!u)@{OPrZVadr%L>HgBK zKCOZcR42E$L1hiSF$~P#t0K}P##t7)jt%R#@f1me7GrsA57_XlV;MyO2TrpM8>FA1 z6|XWq(%X^F<8F;}O!=&G$E_YkSGV-Y*3^%~*|>rmh5YghLBdF7JxK zR=r9?=>@ciV-=Y^ir77+E8s2?#~(QRY{DqcPH@4`bBqYl=WK;&?6zS^K$hpm%!q>Z z7YZ1a-!<|(EMjh~2^8uq5{z&QUYunEf7qrzmf!ck6Q@6x{S$h9bbxYb&+k^bL5NkL z61N}f2p?YFLA|q97AOn~ClaU}IK01;P4PG);4e;iNjabql?ib4dpJ~Nd z@^I(i^Dbx2+}qo*1~$zIBdOm?>h*n_ zZRpLQ**0sn&v}{XzDW4Wla~+&>neDq6iSqM|7Ez>5DX`J1NPF&Pd`kt?D-zu28>eN z`E=z6?qSnuy=*NyD6xO7MiJrF_HuCeM_lVghK=pqwp|{$Qj@*9Ck%cit6N^G#q+rq zd>hOVpRXg3&>*yMNX31pNT9vXudm$-sK;)1wZ%?z{L%*8mf&{t*T{uX(H*C0oodOn z-&@|&CDNS?dMF4!RbL9k$Hg+^B&UT(q!e#2_333=bz3$#q&ovX8PL%2n;V%XCmHBq zIUX+)ul!tOS3w;k-RKyeHZ{=t%2t;5YDL|fcYzudJX`VQTpQ_?M#fc~|LbVixSf5Vbqo<}+QC~ZH~udUebX+hgn z*p1_pUC(*@AI3ETTB8A|JWjqn)*q-xkN+Bx#~q9pYuNO3=U>(E|AZl%S^h>Ka}uSw zw1aM59~M0j8A9rEqVGde83I%4_=p>kHeYq5N|6T9QJw~}MS#0jWvc~Nrt)&u4c952%<|9pEWI8+(UF#AVjK`SC}Ntdbect*i0|@75>#8%W5?Za^xVc$!RXQ zlmiltn<&wiGC56>Jhu}35kE17hBX(#CbR`aStf5RUb!&xd4KC6qYzh!w#iMGnZv{e z0X<>}5>^F98|pO2+%`U_{{}cASo?Z3#7wZ&W=l!_Sxl7mEYgJS^gTzSGWran$OqDD zRnaz!w@rmQ#L4m%BTs9CF!701N_%v3?`kLz$Hq2AjTXG4=gGHcE80CoaDV{}KZPvU zvxk$>ZkKkH?-}2u7499Z7xe$O&=b#-z4KVxL4Nq`;N~Y#)8W)OqP+kNyZqAb@IMk8 zG3Z6OPYH?Hl#x5`$x0j}cMAF$8+WVKLo^^mb9aK-nDBhntPEvEeT zZqqtzP(}Nv3D}=}Wau>Uk8{ikI}1Vis-SGI2`ozn-Q|AJyr{Ks<*+{tvXu2jHxf zy`yM!#AvP7SBFB(EKwf{#ZA|k5X`*6tsz%<-sE_ixK=g)i*@3eAz&pfDtq{S(ql1; z*0f^76X}bYvKOhs+RdAUNbJ5L`WiAemOnnV;zKrPxFV>{6e~7(Yl;TeiPzCQ_+40+z7G^XEj zzM0mh)%CU=pvJT=8JrH~2spYnzw~N<&)G!=lBV7=hBTP<&zjo)qWZ3cpi|F43yfEH zDin8&k&uWzY9ZU9ZJ@2hmh>)6=4mhNe}EXeN$C*m_9!__4^`8gwN>94f9TrPFuYm1 ziOZ^$@|E5}uHl@5jmY_9rA50dc`5)yt!$2s#61VdFm2y3uq4L6oZefWVMMO)2Z>!* z^WQcr@^&W4=R03DN=HjHPi$9w{nml-tccab4y}t>xrD!rPE;$<(S!zXDfiRScqS2= zV4sE>&NLnN2wM2E%4hB~;*fO+HRhqxy}H!>Krc(c4A#~xjuoE53k-1Tv?&t#X!RZ9ETeMv{2fCp zh8#!w;E&rF75q9LTlCDsyD&wK_B%kRkATdK=@Het=&0-rL_M=|@_io@5L#aOXK2~{Hyz8hAx(ApaYDcUW#`le z`tPH<2(nb<0wLE|5uavn0A>;Z?};m?K&|{H-z>g33Yo+y+o;W7FCm>n^PR|ejyH0C zMUAi8*iWpi{BQ(#7SG?@{R+?(Fpi=g`QpND9*9 zyUgk0E~7v?mqs%!r?5-z(R;M}W!ZY}P3-z!itqU9aIkB2)f<@(Rt#KP*NDXmATPER zj7lsGRk}1-7&kZFb-h%itFk=$goiiZKiDMSLnLEACL}O&GDJPb#crlNUq$P$h0&+R z+z{rvxS5`$k&OX?HMZ76+}IZT$_9!%j}_%NHQ5+<(N%N+Fyy!X{yO*5+(EscI?AfI zOp^V2=GA-45uto5#vwj!$1%f|Ugo|xsYRhd&ZRm(1JWhYCuM$PbgSE`U-R8A%Hhuw z`K{wD8GM)?1w`{27EeG&R<>2LaIgJauPnHcOY!3RkDHg=_&Q%MI9Xh&HX*5V{8sx( z53=p7VUg~SFb!f<^(Y$Yr?;2ZA=W!UXJDB)#9ErkxPhwE5y1YM$OYg<`XXUP$r7KV zO6N##9rMqQEKPTq6tEM${QpGM7Quvfj~BNya50&Weppx+ilizqI2V-2vk+UbnYj1R1uRe{-Cpy9p4NRARA;e5dnVVc?^@K!x2CrF@KYf|Jdg z*AYtCdarbagK7WnpVE5M65SQ|AP6@`QHQsuIB6G&%7;6OoOe-n$DxP_7*f0&sMhR$ z-e8|CW&e-=1+WinO#Fm3!EPsllpG434;FyzjIY-uxgHx{VLj2+Vk6r=q)dK%{lgt$ zLn(vPn!+iQBGV!jzDc2#o$cX#xYDXX)<(%eXG;0}zPc)e&mu#WK#7ON7^CjQG$Qby z-oua>f@^TE-GRY|(-+62N~O>B*$;NtKrk}AM%3nTw41P`%(9_AWoW~zJs+$eM3GNt%srV?clX`NRh(coL9R~{Ke{iojbJE-zvfpn5N zLsJK+oTT*l!6Vt~Vb*_Q1pF85sQY2+$6FS@Zi{4Ce2o41HWlpSi9_rs&8}QS9jc@O)n;pI00=C*vxV0%k4LP^+x*DYB2?>%h2~WkEGim-?NvIt91n zj3zC8>JNaM{pRhR!m&4hntAodYh^iDD?cQhs8w6~T$FgUj8Ur(bM;EDHOI;tRT}1w zHkCuaYi(GGV%7y?nl+en2b8Ye1!mWuF=?|pVCzV)(!QtAD;cv`-~s=V(!o&k{#t6l zy*mM;*8zG&96$!K*@-wCI?2@aG*obxPcu%Ow&ZMovZA3xA6U51V>$LW_ zi0@*S$TQ>uc+h*r5SIqC#9yBHiw^aUI5UT$G59=)=c}KJ5|z83eDTLO8guh$ zzMzg#z+Owk?!1cc^g1uZmcCj(OMEmWw(FsfbnxE`BmIRnoHtaXpO0Ty_Zavr>Az2> z(#Z6zp*dGSmu1w+r+^U0osh@8s+vBc?Cx+w4^>Tl4s4M~PpDgyog@P_oqb<1>^J?o zH*jyr+fSx2AJn)ItTj_GeY^wjy{Lt5_wH|pndZMkeI7u7R>mOf@VP8)^gtRQy0v$Az}MU~d>3ey4MyOhwPsOCW*-7X!Si2eO#1dQExd+8BcMQVqWf8zR*di`JN zBvx#2YCwhF^i>nvnqd0OQebhjncq{~a{1k&FxBBr7-)EZE|M`Gf`U55?TXfwu2Q>q zB;`z#BpnCpgn}pYJEwv{KOt$rhL=&|&HQL~jM153HXJvanEGMzY7l@9S1Kl|4|da| zcJjsxj`1d`m-gN~>@A2|H)wG<_XiT!voLzeCZsBZ6~6XHEkG7bNWi$*aV>xMPpG(! zz*Ux^1JP!sKNO3chwIy43KyNZNh++AzDU2exHBVmQh{Te6JRya zBuzEO4FPnywx{!ya~|_|Tgb$=Fk$aIlg~J>vr@d+Bkwcp&Xs*kYA!UjnWXkIHX#W+R!ymi>Tlztl6cFB(g}691I~ zI<@@pVj21jIxYNj6X(N=kna;kqp(F``FDR$B0qP(!uijXx<8+J8V!iW zm~WhDh93J<{L#>alaT`1+!}PNWr+Mpcf)yl2G5TaQ))P-t(xO*7!)nmOYH%1g)st-Mr~hU{BLK($93V;jS^-QFZ>f zyDMbNbjw!*m!(d-^nJ0Dv>R5BW5}uBdUeOJgen}bqH5BNsEe3_7Fw7Qoh3Kx!3GX@ zMcpU9=Ay~#kBP`Jpc{Qw!XmlWnXrlm09+FhvomXNPq*RvaI|wd?ze1_-~*4Y5S}nJ zGAB~PVrJcsW`)I|kfM;k2O~o4oRN&fi|#D6JetSn+UN;=LS@feA}dnHQn49gra)oZK_PgHNcJIn;fh^s&j7 zpPB|_c0c$gY%v_FdwqXDC(eZ_mvZndHx+s82l4m*8A9-tHfeDd2P zA-F{W&N6JXcv|isyS3dV{`Ll77sj292T5n0$w}#!RT8UWtHIdj7eh2o&mxoS45LtX zH-=k^0GbE=TwS!WpFyDDS1%bIFm=Uq=;OIZM|gyE==*$kEq43q#)|dnIy4hAR(#W0 zaQf_pv{{Z(?W9*R57g()jLXa~zq!A;av_&K*zwnRrL+L7^?2&@8kRASYvef2G4&`% z$&L6zBZka1WJXa;?QlU6a;a&rLg;r&5|GsDUB=t|T50)CEpG~KZM=AFkF8BC$Y*#vrac{pb=?WC1WHIj52II(8 z?@H5?>7`6$nLZg1FUqcvcq!5jJ6Wa@g;WcDK=!UBCSb4D zYQ=yO_9?I0Mc_}Bu%=5;qK9p+XJaNp$0j`(kIf`#< z;68N%*4y5b9|xml#`~lQ+v=pPuuR$SRRymTX)ycX9fp?;bJa8%Q?WC+D#HZBAJUJ# z({T|<9y7k~G16N9Sbpyq2uLcyNdjA<7whLdNODglF@XL)5qE}%!*@P>U#V!CGrYmW zE9t7q8q2U1bs$vCyQckxYaY|kR8ZtrP$otk1Mz{Mgz@t{^zC_O6!0oF1IpuIUD(HV z6@vE)R5LWDmwF@yu-~+hrp5r%6=#ghF30@}jjg((_zG8-533&t;$OAR{RR;W@b5^bhuJPHYEn~dE!Ryk+v8THuAaAXN4n@D^yr@0En_4ISbd?4J?_#zcqVwwXWl%yxMOJbM)xd-c_3QyHqwSnY7^n>|HuH6zShtPKGJwyF} zjJ;)C+uOG9jh5iHQ=~v~id%6h?(VL|-L<$wa47CjTvFWK{if^eb)LJ|J^T5b zcf1J6%$(yt=CI#4-#)0wU;`>@)AFLF`$q0gR#*w6Jk_z~oyV1kKYfbLy*XWP)V|!A zG@CbN%q00T(1=1zG}FlN#uhNdK2Z5|Fo5jQ;6K=+mO0jY-FZkhsXt)7o6NjIRo&V} zo9Wi>3|V?A^w*t17UuzVy1exLXQPItxwp3`r~}ANMtUNEo&S38oz%E2P$lM0|COev zNJ3FmM7Og%G_6jO&T)ZC{zqp}5Ddo!6WM(VllwR2C6!EYfzmm$>TE}5K*D3aU1~v2 zzCuy=Y6&y+3yhcZGGe%if=hZt4zQ^Tp>#0grq{VnM+@#or+)o&ogyl15`+4CXOe{Z zF9SM04%z5u{PQeVf=X-bN6Ij*j(ZWURX^YV&?xa%SsTJ-#Ch?Ii!eEga_(vp)fF$N z4IIO9!iUgBkT3cTCVt0y3gs)$M$|@7t1TE zl3405>fj!A#guD2@b%Ndsc|9KiI#Mz{0XHAW>!sZm!MO?1bvBGbgQid6VvxkH;LdP ziPjU-(Vni15ao5fLA9o#xNwP)_dBtS#F;&|2BMgMNT{j)D4oILUXOaSs&w*#a5{*;8)bOVqh4T?4?#!qtiRq5;jMkAX@|5{Z;D5{IdYDqk}< zfZhTMoOH!k`4jPGL3lG+dv?Q}O{VbHLytyq0`v14S7TI--aJExz)ffCgb)-`gAOn8 z5h)^Y+2`K|vwr6MF;lGG#th@a$m_9P48hk}Wa_^MO5(5}UDpg7@jUl8o_37uuS1%B zPA%*84pNo2jCUgRt(B_E4XTgjo1L4*nn}v7es@BjHmOzV0TB?jLiS_?*k$?8h??jr zYrqlx!`|7+`@6u00g3C#CbUK*pS=!?`5$a1MZ3rK;Gu@?Zvi^q$}syz(&#d}K;TkW ziMnqW8g?sdsrJepUEUdu?J(SU;dFWR*%tqWW?DL z+81@%zXj}Cv`K#kv;H8$;vN9|e7QiHhpHf5(P$O*-b20x%xX@he*ZmvuNfe|3rA=K zQhG5|0Pww9$`6JK577lDpTpKcG&}(^`*mOfMtlAlrxgRY&CC$LamHsTaF;P&lX}S! z5AsoCdEHJ|FJJ1e?Sx>@M(#0&&uhPi&X*gBWFAyOtv?xUNcs;C0W*1StHRU2h~3h4Vbil1_;fqe(knMH@}1f@<_}>Cy#6uGE*w_nZx)DC;fT#H=Cs_69qc=>4#m`Hv1TxdXrH3M z7Q@b0roeBIe1^wiS;6#pzEv8W#PCJg%XDymOl$dfp8%NH17u)rX`UAz(aba_?1vzL=H zI)F^L^E)q48R%qD=C%p{rxz@GI+MT@g+xzr4xV)(V0_I|-dx1^BOOyNRqVk^>XZHs zUwDfjuES7^#v|h=Q;C8fS~$SQGMp*+p~dvYV+A|q_Jp3M9Ug;z-XXKIEnsEzpB(tJ^!@ey~O;gf@A zhhx&Wr8Wr{;#HG+tpAy=u{Qfx2lnri2R}Cd^Ph1C;OB174h$T-`9uKoZ;s`k*7L9T zAWH%#TIjthOTj$E|9lw!rwQ|2}5$A5O3gJopbjvk{h`2mh-Dy~q7)OULFYEs+0{sr}!3usw2KhwU&TUM80#J)bI_Rw{KH^tIj59I25k4KV_cj;tj&p9Gj$ za%5`q|J)bJvTrBy2$7THYTZ11WH2uF${Nh9@@o$WvNHJ}V&m32p-QG%_ z$yy9R4K%RH-(365r3PwswtBVVakvj7;(CLg-vlCeejeA~4KkcL`fjy-KT;Hc$s6#W zUC6{=)@uSLjnvuq(Ja+$ur762#R|^*l(NW2rqIz~GbE;LF(f8{84$&ecZGa^ANZ!6 z!SooZ@nLDO!<0tQQ;+%D{7EZ%eIynmSxGu)w*p^Bd!k@x%Qh>XoqMP6r07!ntNz1F zNtf}?%uSuu;JP1ORYVJA#2y&`$Bp`p>?R{;2Y2!h_vC-}8vfTb;9hcI@VRgESsch$ zo4Q=RIc^95c@z!D|$b4({HKjzQZ-id!d@MIHsq4g$K8Jh0CWqLX*1*Zz+znj@1EOkAz#! zodFVDxPHg~urTm)$vXbHVMTHs*z>clCtit{@%fIt@PFH46nQSi{gX<{ zNM4}S0+f0WaC5k*=%qWvRC@&BH$e%``r$iWSjRO>Mec+2V(l+OoYr0FKNntrU$RLX zMdn{RnLim!CU7@@=)`9iFgoRG{5weef7S)q;8g_ZKaSs_S9Z_6xL<7c7us$3Aztea z$USzwoz~dQek4tjNsf2A9bp ziokC)4?5Ij>xZxLL;OwMX|r{m^(@L#Rt-o`DUafzNVV0_Apm`>oN(b_@QaYz<@Tuc zJPK}tS5eN7sIJDLw%%HibPw`9Nla7l0Y`-T^l-PNml9V~V1au=qt*OMdr6M{k3=SCFgK>indWA_-WDW8 zuP8#x6~gi@VZJdmQplOlViEpVw3_wIe@^`!_!2OzZ{aWYu(RuvG7>Bo4X}CVi%Ot=;21S}?Ox52 zbfWG0@L;$^uLP|5V5zH;j)%MN9*yTSE6y|#0?35^(S;?^CnGfJ;r+Y*(wzK--E zqj7MSjfm^UcC|%mzCw=?T%P}KBul~whWRF34kjfS_8UHRCWMU3+D{9=-Y2x5AFF!$ zWVmn-w{lKM+iM;;8;Xeqw4z%58JuxZ>;yA1Z-o+>wYjE6ADfHixIyY&4dX<7hBa99 z%2XZcM9m&TFWVexyf4<;dd>W8GD!?cCqAanj@v`%SNLf6HaWBkBu{B^8vI{AEH~ZQ zDt$LPTlcA8pz z?L9vG^I|;p*we*lFzWRZ##f@wdPUeY{w)WrIpyLIJoKbl`Oiu zNf|X>14eV{9?3A-{u0BGzQ5k8rXnXl*JV;z7jV!l@IZI8T6ueRjIMZetUO+-mqJO~ zv24%X5}+Qx%W<^IrVmDdZGUmMIH+~T51x0m??5bc!l#i8aoE87|E_*AYcRihkBs~| zkQecf8*h@LR)@I*el5kT60T51iv9BWZe%#@MA+B18TvZU`3QBLLINRF(kx;N6m|0& z3wopAV{@P5Ofie#>MutpWq#DT&L%SZ8IE{3AEjPv&${=!=VP7slM*C-ErOGUzeXiI z1|w~@Mg4l3)w>qda4n`xtx8LQ$lFmZ+joJT?*qm7{0bAS!2X4F6hI7EX*#i8YOt^0 zS4JrsO-uyet1=rDWzFyJ??72~2i4=3cTFd^SCw85?_KQ1yY}&1oycT^p^y)q3*0X9 z*|Vj&06#;!H(h-a%|a&b;5_Ei+bo{03Qd}UyKC{<&F#;S5!{ny%2ev=vzW zvKrsFQWV{y^m-u2rmglL5Rcb zKhGz={w*{U*@U^~R%Ra{#0*UgSGnP@dd*h*m{ft0oLZE^`D;W>mX;!{M-iy-97RLx#$zG<2WuY4{|vQ>0J6gcmv=r8&0r&$P8d6%`P| z=SsXw!1N@HQH;9}S(y&!Q{?no4K)XS8-bj*lWzLI#FQ%uoye$|10sGigjn%BBr-V6 zFO?KYaEh877G|U3dKs>AlR7uHMV(Ot>Gmy}k`#ZZxS3`JBHK|(=l_?1|Mc-m}b$wxu&EcA-l?|pEwL-mxn zL*PJ>y=odYtuwuDcVDVji+RpkS=R>Nt?c>sME~+Wm$%MaR!q@fLIx`?{EDytg}BY3 zzxr}aWl}38R}@>4w`F7CXuCI(B`QAsaz9r1QG7jv_`b?s{VZF#%IjHR*BF-kInEuo z<6`;4!)0W(VSq-x8glDHvddR@bTD7HP&!Dy;dw5M#fIlKXshrRmUES^ts2y|+u1dg zqez(C6J84X-HRnhp#H&|=Honl!f!H3` z0mznfx_7--6cJO7!WvX<7%opG=6YFP1!9lM<15c+t9;XEBc>^7XU9FK6F1F)^GC39 ztcEmGyYB;I`23EWq~H<=^;~LG=0L?s;9|!3-k8v1TTeM#JX%%4FfQ}+*r=f|X1QCn zBmy72oO_F?uho(5={105YvhZ3BEbMd*58p(w-VH&_s2mC&VASK8iP&F?Uz$|1`2wX z_aDq|y{sUlRg0`mlm1B6CP6~2I+>gB67*Q+Xmg7s0&e~!RJ#X82 zsK~s4i-C%S2@YAsXr&ubWLg42w(>A=ipvWg^Y@J_ohzL9DJQ3xXMU92MTwJ#Y9_}) zNVS~4g{~kII`lKhuG!;dLuWS3oHn(mI|>ENx^fj+vtxNYR{?8ETEZFCm`>J;Xrutu z&ab=s#lAf$Hmly8 zA#?=$XR2uBn&P~y_R`1WT<5AHl~hx*f<^TnuXV2$$6+RI=LEI-PG5({R_^tKMDp*v zg)f=2~M5GP@ELafpTi5#Qw zMXHT-lGNBqq((;nz{6pWa_S6TLq)~h2PcTdnSXBKn|3{Ak7e+KaF&iv+s1yDVs5E< zsiF1K3O<*9eF^m)$5yB?r@@`CvFW*idkwiEG(Ls9GCrEO_Q{qd+akg_GUI0DXOy0og zP6Cy8B1BCJlh8UBHGoHTn0e&v;D&VQHJ>huM<>D#pWarhtimLStR9qQt1}PBbX#rX zBaz;YD28v3^k13KkPOVPw(!&w!HS6DU!u^pEq@I-^fPuSw1NFbTbC!79p`ZiH-liXo762>g%#h z)62@K2AMYA=xhq+k)0_olX|}%EL^7Gf13S`;&70={M;Jp%^3Dc%>smnh;_q|tIy@! z4MO%!pY*d$c`+{#>oRVsU;FW;+Op!PytO3cW88=L5P zIgg3FtKOmFZMOYpQ7MjEU8--hhsWu}Y0+vI7IKf!#J%R$jzOu5b+=2zp6El6|0*tz z)2m*kK@V;#_tGxZOcy!K&5b`BxtguRU76fg6zF*X@Ahd*G98>KaKQ|6#?B`OG4IzU z?$<(g;!jhqdBD0kG-<$sv>{*FM27i%?#5dbtZ7Y~#|vb&@Jxq*W!VqRnN4D}-YvPr z%Q_7I3YMTyly7QakO81&r|?_r%&l%k*YHhS{a%u^AUh{;6XOl%0ER?&K^x408XTd% zIeN5Mk9pG7qaD_pF7!_^Zsyysz}bFW6VRIK`80V0l#db?{wXV|1=t{*e=}(>V``LB zJ~LeZNf{kR6?Al$b23oZ(Qsjk%N!K5u>amFT-UY1A)fH;g=_9k*5%4PMF(g5U!^y3 ziW-;kcUwEOHBn(KCvFeeHnq+cQuLN3izw5{Yi`ZmOO<`PL{cA2@K|aznr=`(&g}-NT<#TzJ;Y3z65%$Pcdj!CquUL zWb#(rsU{e>!0sMV3h#6#xP{tPHPb7xM=e4Mnj49rVgY z@C^MSWcdLfsCP3!onx(6r(lI^GuiL7z1BNH6W7UXL2H*+jyKJ&Q>*6ss3k5a1L|-B z!p_mK^TJMQYgz*2kDsfE{G^@nN7eO6cB4e*t(atK5ZGjJ#A9=0RHeiO;;`a zeezL{kYRG!s`EKJUcJFJr(96NQyE$@ZjJ4HfR5r}P*`wQDt0hw??JcLFgSMN@$u-! z@Y}l7Ovy3v)5+G8+z5gQuQ{ef!=fH*Wk65 zyr*Fb`Qy`E?0}WyIJ!+1@W&?^Y`pw15h@@= zICL*$OqiC47%h93{g&{Gi~DRLS|tkJJI-3zHAL9n>1uVKha{eX%G-rBmkN|0FCizv zW&m;tWft9RTmDImN%73rfV=?SX`u7bvuoE6wvnGZxbsH1kJ|gKRE<(yEg@s*KfZwY z`J^U-9mOth90T|Dc+eee@Y2|T)>Q#j+`c{`Y5BE|Z>Cl_R`PK{o@ayFmz|$(SqUe;Iz-CxsvG05cX-{${iWp3 zd6hst+CGtpXf$=1aa9f5n^p}aRPN{8a~zl@Y>Z3s`+N7`2wHzaD)fe*;&iVL;%-65 zEzOQXI7wG4)JEo8GD1j+$h{gMh-3KOn27@+tx4AB{zjAL3$b3s+oJYFRfa2x!a=%g zb$y+$;%*wgBis0frT0U&@`u8Hyzh{2a7x%n38PTSIq{!T<0###t|&4Dt+L^M-QRyj zA{)8KyD&hY9ewb#iwa68>f+&_!U?#5e0;)TPB-=6#3NO!)H=D3bHdTO;PH1MI=iev z@*bdr9IyBJ#+G?Z**d_cNQLj$f@?PJ#ZN$cXn;pn4eMkbybCZBlbb*ipHzuX!lU{q zQlDxcP6*dlSs}u6_imCLqVzV+1yU0=!Q9xPI5?okaH8VDCeM#R#zYD~%1N9}+foRL zPzQ0PDF*&7jetbV(rKCa8e{$2+m$5u>5`&3E)Kj8`&fTctuvnO{xjO;G+j%L>b`Q` z=RE@Fv*~_05AO)>0fup&J7}j<`^3{G@3x9bm=!jxehINCQhw>~qMg^JLwkfoua$e6 z3QCDmp8U^W4W#0c?&pS>u>n)RLowqIZ8 zXYYV$&PNH9HDX$Ol6@2Y?lFw#^?WiGAeu2zW`6iAE zJGwqLdYlBF61CZ^@m1})?}dfFVLiljZjS0bujnJ1XzzR;k#%O8d8;))_j zjf)mTQs^Fz%GaVq|KqFR_A2ky+KMCSrW_(hN*0)E7~H;d77;^y$OUoE#`)bL=!_GC zJ4ci>jorIx!KBZqpj?bYs-Y-i*T|^DqP|apd$d?&-T_Y=Vk7QcyYt(D18KiZnj!?W z1@7K&!=gn;_?5xb_uhw0s8t6-*Ww}y6u0(%sWeaD3jwdFJL{>Y=4aOYp0eUBH(a#0 ztdE04Rgin%cJ|{IuxvW5E7HEdag@9-g9>>GE_i!eixU^%mZA88m zAd{R%qgX3udD&qlemrP6YbOtrQ|SHZMLIe{<}KHB-!aEuDDfXiirvckxoHs4SbJbT z>1?;c_S%npN&ZnozDv4F*gBEKhvPQLYf+NrT7gDJB!!z9`XzoQBI$0OZku;n=se?S zdCB3x;cu4)_HEi%0F6Q6(&^fV-FWz|b*Dv*?}Z|zIycRU-Z+5Ja7@Vwp06mQMA%Q! zGVxUfPot0JKzS3$4e6KVOn zM3euCpZ#nZRC{vpeqcKgl~+Xl<%LVkPlJLc{^xod*D^U%EPAjRF}%NB(*{%pq)0iDWNBWEW_JQMM@9wyct z7xY)bgnWl42`s&{&W`+{Lp}A|i|-}UNqnTB;jCW;Z6M?!kJ+1MH*fkfftAVA2U*Ce zbV&&&wDq0)2`KZZNZ7;1-ZbHd?^bKYNmW3|7dXjQsp?bjBJtoav9||Md%pc9>JOb4 z(VY)XgqXx@4JciKa2$n!U9)O=A?*}A+cB@ zyE_%uF2V5cl}?QYqpmWzX~{Cro+jFk6L-XuQ31_+$yWGgGDH(`I+BqsTn1%$93J_T zR)ozt);jfX(!9=m;G^~=k+!Z`+uf)K`CMZu|M(dWt8S0>ZRVOypJ{9uS3Tt^qg9;U zz)f?apCsc0tGECyJRcTH8XqlhagyTFnKos43+IH%2^-@Wr&hCdwzF{B8fZAbL(M5y zGTJh`vX?K_LC*4%@o}9=j>HwAr*7jGpKpNxO5%P9&te6(;seLD#oX7xm;Ek#i1%bI z>-CAy8f$V8hPwcLX?d$_duRE%Cz)7%CG-spJV+M|FR0%DqnucH+dcaQ~YZ3*bRhD`S5e_rwjPaPophMd+!MWtZ7G!ueIO& z?J~sZnNk{1$}vNvs4}Z-$DuYVC|BSehxB?s*NaZT!PyWi48U@AQkB^6N**5Tb^zHl z;n!%Q@UYR*ZT3E1Q#Mdfokg^8?{{UhS{I{lM2Ru{SIqQR@U%?=xtJ^&J2qx9O|G!N zPG1YdnhP`VH`#Y6?}?ZL-59mgv$Ne?V)g{zE7? zN4gL{9I;b0F*k4Em>m!@wP25tyJ zqvLgr5F2hrmXZ^=*nz4R%2kOoCBWp z+Y{6l`#rMz0!t-)xKG)^9vBON$dU|mjn|n;u9A-(zi>mh*ygz-`CvRXMxJ*eD!OKO ziO>(4A}{bF7IMOqx0GR#T!ubY+rni%*lKe=-+{>Dv<0BIkiQTo+KAgy;)!5U{nEj{ z_P5g1zZ|^^$Yy=@AVGMjB9p`5{q?&z|XhzcFZYdi=1y-z`M3#7;r6 z9gx9Cef4Ze#kV>1Q84K-VzSc?lUCjZH1yzzT-uk4!3>E^OlmAN<%Y&3l$&Qe>cg|; zcP@blip}@iq%bgWfnbt{8hH^N>+%w5!3kbIR|G>gm~u@rY4*xVJt+ow^@Q-LBPiY_ zpKI3M9KT3a;h7U&g^z3F5iD5i5-Skq>qo z)yZp7=ebF$@Mw9m-0W=jynk(&LHEUHb@AeKsU#<|3EF_$vH@&}t|?*7cm3$5iZE`Z zD|sEUtHo?eOI~k-Q6!9HJxKaFbeqeKR!=62DlREpacyVMk>az==cD3dC&GR`Yhmd@g8cmbR$ZNTgh1mnEj{Kj~*}ML>XkQeLk_&x_!c zMJ9BQtl*+8@vd)gOoR~hNVbHB2jCsy$Yt%4c;AyMaa?0gr46scIS}WTgrX3VA3mkOde_l3?ZEa5YhH%8T|8zKY<(PD z7d;K`2&zMd@LrsH8{%eIIk0ks>Me-LfJFojC>3PnheytbCyMpYpigF9#fT?#VK&Cv zd{X80faK%yv%Zh116g)<@zh%WVt!>efmcE5<^Qx~Wu9=x*Y!Z_b``AYp2DQsT`2*&C5egczyea*>W;E;p8JW<;;?|0|!Px;aA zl2Zlvh*{M&q+s8hVV3p+;pBXHdemc31?TvV*s2Phk7%ozHw?CSSahxKOTF>}f;Yb3 zFUhfi9kXqqBWb=-C?CTec1)3n{?CKpsCt44JW^$*FW3c%*xAGb3DpR zlX+R5QoFSBh>?1uDoyMd5IH^ACz`IwojQf&XWGkDT5qRgXjj~tVvc^%q|ZYBj!krD zI|GQHad#QMUaUhp?FnsUviog)R#Xyc;S+NFbfjnijDtN)xm%xdnbXX0jDQ9;>ik=Z zdFKsd(A_g1X+Ck*!d}Z~u*$95)ltZ0l#NMiE0?o{!=ynpuG@eF^2Ku!Yoq_HGe(RC zPJji=t8=?D>B>w#LK=xoN~9Azi{o&pYp5+mLiUy!ope<+W4&AEDb{mx4M?^VL)uFk zJNZOzG<%RcilLY)d+e3yU}ADzXXHI%LF*Qmb$bc9F-B?HdDApV+Up3#X!)zRjscno+9Asyx~)VB0Q za&H>E6@zK%#Wel3kDmR$V_P~4C0;+!4bPSs3LA=-{*`C6ybkK{Fsk z7vI%7f`Y9@f`)cZf%kfNJ(uA#{UMWH8VcBREm!`AShUbT*Y7;KLSs0;t{iyqL1FVk zb)7kMJ#Ef%YRYXkdN}Pt>rSo{3*t@i8yrVEt|c@_FBclzlgzo;yP~$SmD~1LiSWyj zm~KarX0x2lHuZBU{df+1yNmM@<~ZBa&wfETa)2UuH>Ju2$@l1M`WxS4O<=)>-|23v?Zz`aXJN(Gx>$gcAFt z@~hLeSbJZ3f_y>HP~GEqH_WLWS`=d*x^siJ3i(pa4f|bBeYQJmOH(e)_Gy4Sa4F~h zrK7r4t9x*ps4zS_l~`JYXK$g|wF|Hx^4i|d&iq-9wtHCXD?$s01As@@e0K#=u~J!& z?0LOw6*u|}U5ey%g7@yY!U`fcki*{u`(6lQL+uU0*?{<|P#@xp+@M$*k2ei8Q*>;% z`iN#9^kZIhX*aqYF*1Fm`7%Z_vu<6HXiR}rGfJo0oBBNAa^$Q@8ZH}mpNPMW{fNa{ zouAlYzqI>A@U2~9KRcGFZ9n-G!j>Ei?K?zl#31N((UJ<0=DHPgO`q1uP*g&zd{ahN z+8jX}@=+W>vtQMOqj{e)N4cIl4l!~FoAXqoU*#=k3FIX$WuYXWG|{^e%6Wj6EKzP6 z$1bK-Vc|ETno*bhN!lpi1PRoE0ep@nvpt^*Z5;Obt)K^XV5>KG5DKXP<(Mtoz2?Vk z&i!7Y{!D22teTsaJWMI}3BlE?YGe|8$SXW0_Tmr>s11lk7aK|U{VjY(n2*Lpkx3ou zmEIKXrnkC#giOCdo@dMscBc8VAD}3DJ+$A%Y2e$uLMh99zuNkYf zKNja>;p&fSyg2fCxy_Fa`o1$Jol1MLHc6d#mFuh;Q(wMpK(Q=%K}GcFGR6l}QIal% zyN1y%kfR|`pqN~{Knr+B-J|wN(Ec-x`7}b0>K2tmT=7A}lM{YNFfRp=(l8LV@$rQRAp6ytlHwRHCJci@cGJ&sd5bc@5yC+n6O!l-G|38v;}B_lf<#muz(@6_WPbxY zKNI4V)Q=JwOlTz5QJOUaS*dH&G*yHz;t;vm0<^5V{7|`+bYxycA1SLq_|GcAv=erp zr+LUSPw?8QSmx&7JNI~_sfVf|86c_YNR)_E_D z6P9N-a`$;MEz$PG(aMr_bDxV?)@voV}|u^b7;(h30iqR zZ9Mwr;@e5Vk^J?~51u%=g6v~KL;WQ~ z>d?vO{Qz`fTdesWxlZmK5^ShZYKCyQCjSg zl!zOR!o4+AtX72QO!TzY>k2!oTm$+@dlReT*Yg;zeM_<6uJqP`e8ddBCfVwG#`P#) zY(2>y+ebwR$2hT{e51Lf22;`e+*xO{yQiDKBny4%Tv#SLr+A|3M{4p4I`nWPm4YFh zYtQ&HYxCeG_C$_7M{O7HtMkv0t+lJU?-U5os|w;@i^28ke-*A3Jzy$MNtR6;KRnV{ z=)Z3w$~*!l&rDyh5W)p%$EDhGSm@v4%rj+<;mQQv(;DKc`QLhi6{J7rq&B}j;cORo z_G2`3=)BCl->}v6vzz$3DH%G!23W%8hoL$*56Gp&7RtEx}2Vdc*7NKMM@%p>t* zkxXDs4Zlkp3NIUKLmM7V{?)j&J#OUow#8&X&gT3naFw|7Odh81<9W>@ypD-L9D*b+ zRFIXP0Kb3zcT#bOez~XzMY_sxK{G)Y42|IjOQH9O$%Bv^?FNwC-+2@$x<0;Ihy$E# z5Ej9Jk)a;AUy^|G63jg-3v$`0k1GJqZ(pqWj?}OGzFVOoIMKX9YVoHVL4;S*n- zpWg*TShk`9;^U3o@-uJJ8LQF0xEZulHbsv&KMoh9Qet~%MWz3X z0p|s#!D?a48I0}mDB6NNmt}o zkI9ZriEMkm#dLo=Lg%6GI97s)bHkugiL6pm7ABVHpZIL@ZYjC5rP;CnF0rDaEmDwIRZk8k~{$nYL3finlPN;r~z!f9yTN=b5?Scqr zhel^-P3L?sU_vqos|$R}ni|NeTFMl9I0(n?*2L>0~k zafVeB?c{~h3-6`7{v_X@v&qW@g=8$>+w-e}l7(~;waD7hXbl#j*@P(6Xnk*z(DSRS zudXb*oz~|V@VxBN%xuj3?QXR_oaPUpw_3oAsGL_35bE*A_oqsAzZ1+1`X?!}KYs+ZI`8A1jSXsOkZBDLOf*{}YRg69H4(hrhKTUEgl=FY zMdw=e&_!<5ViOLT;~UZ!$j2}8TG#0Fuof`!**u|CYFtC9b$da>r+s=E2>MfTsQf58 zbXn*I7ux6EsP&d zH{--e3jXJn;3zyap0MS;qXTq+@QdC+sgB7L!>J2oU&erV$OYkYN{LbIDiu5FP5tGwGI2hP_qpx0JNBy zpi8WX+peiC3vq?2Qg+WAEX%|kTHZ6ImbgMXyju(3O0d4fwRymJgpwXD8$a~=t(X{6 zHoEh~Wu?Wj>hu`7;H}*|>d9m6-C&dHAg2Q^ir zq~Hq%Yf~unMLQzXn~TvSqM^8$E$^OSJZWc132@U2^Vu*=KV&Y z<$Id8M=f>E(`8ez!ycvouvh-l8uWeU&FvbV+vE~UzeL01D#NyY&ii?Ku+s*dsvyca zg^LOws-h!Gqi@6t-v(ton-<6VK3-AhE6mA#o0IIiBXyHYEa(srX&IOGHN3+#?p>n3 zxCj42mTeA4Hk39a8p%x822!|+ac#Z_{mo^Ov{H%E$iO(Wff;$PS1S*BzN|OnoxoWx z8c{vSZn^Gvb&*uFfh*B|Nlbl19@Kq(#{M@Rm=9Qr!o%N{MrmJ?cXWniW2T|WtDX0A zEnjJxgvbdOgQPzd4=uTI!sNXuGH|YZoXy8EJ?2O=rJOi94A8MC@j) zAPSrC-xT3@j=zSzdX|OiWu8@Dgc1P*(9_WS!0CbD_FLk#`T zc@Bqb+Q(b1b8P2I5{S5dv2(-pCPZ0z=nP<;XWU^LE|E5Tz9*cx=zGxASclqx3%^2a z3g(#x_sqv*_;hB9j5{@x^O$W&zU?*qiuPQn6~w|@hv=~v5=mw3FAAUX!1lH^Z}YI; z%BE*d_`hQTa8O_hQ=z9QW!{?6JZ1{|;uSC>eJu8Pf_(CppqFzf^tg}dOLi2O%Ih%f zd(^(rA+;CQD4)hbZxNU+^kAGOF0F8j{ClkV+mZunLjr<~$;9!4QiQ@$=8vZYpHZlw z+2k0}Qr|^K{!XjV3W49taEOJ2?7H;D2{1uc{H;EfB&3HWfBb=C>0GVj%~zEZ*_j1w z&qdXjFn)P(dJrt));X-b8m&0Qg&3gn`s-auo1Wa$Pqjvp0d1`qJ3YU4MYeR!f`w30 zuj3)&7?FqX9L>R>doO-%!ba`Oa;U>Jdkm}?4M1+-)g@{1haW~6i8bHO{g^AFFtZlo z7cv%a+H#JKlR^s&iXb4mK#)z}w$c;=i1%SF3%}s?<3luzpD#dVevLU7i_Q4JvQg^< zKDic2oauLxfPutPgwr(QZG|gX8o_crkrq&L1UZJC4sr|LQkbCfV!QUutT!f3Fa7Wr{;Z=AlfF z%#IOpm;7BEnd9h4bEX9VSND1aZDt9Sp9sr30>XBS>Ea5x5V5=ygvcl#OM88a{3_j@D}Tu!NBJoTd7Wub*NdY1(FXoBHLG&HcP^ zTWG_NqpFs>sLRZ3IB`hH?=B}RKn@=#kFr~cYV|6n;lOfOo6Ze2dsVG7S}QIsw};D} zQ&!ivId3I0b447oOrf!yyBN>MvJ%05;O+1$R78%a&m@z`64Zu$YpwOm*N;>V9*Q&$ zkF>&1wSGF(4K+B%Y93CV>?!&lMQ}q_^A#Ia$IijlEN7RLsDiu23Zwf{IBt{L?0J4C zMsJW%hNE|wwZCsU7jChC)1?_M?(#S1y1VS;R{zT-!M$r%NVKb^WUgy-@;^3mKIoW@^a7f=|tt&}N(TD@S4fqG72Pmxj z_}I6h#~bBM-j>qQc%@XhLU-bCi33P;3&-Ht)VovUv%oXysclDW0 zzDo}Cerj}_Kt7ULln@z_O|c+PZ#dpPMJ6=8A;)S*#O3K$LXV!vH=j9fYn6Z{qp}T7 zm|pt6%vgIf`SM)WE6q%VRMd{AQ;O;Z6|R)&l$ZImq#K=YrpHoDXxUaQHX!R{mR}Qu zhx6rG&cf3|F~4-Iu%n6qOty)!m;*m|!-IOF_Q~?|;|swVg<#Btoa6Xh!?%CdDDOiU z9j*2?!sY!=h~O!+PFfC{!5*xVB_1nNoF9j+nXkinzkzRVo7>Dy7uI_VuLs@EKs*c} zMfwqIRf1GRYPT7!%$!WX;#+Sgog{im7hSOm37J6nbfnL|M(vmey-K_ZKXNVR?q=Z+ zF}hfJHDS}E$_(YnGAf|p=R*|$^?dTV3N<#nP% z4TZRoTmiawFoWlxeRKUJ8483=@EyJFcOn7Jl3Auw#N_KM&d(b|`~yMg^glH=5N)1I z2IVIXbT2oy+=y_&^I1z(A3UW$+^_EW?W}I$z2C3KzV!IWFZF6H^2H(FNCeg;`0Ne% zMqw-Qllo>}Y$8%tT^Hzqv!UG%xaS=qGFpKL!)3%^{k%GQe>+)3W8~(hY8k6QD96h( zI&}QtQRR@3UqW1mj0aoKx2vv1-*Ce?tA6wvKgHR)J6A9|!Q z(9?zyecUqMoyPNf-tP~+32=V&JAfCu%vhC_auu4oIcENF@Wti)Y^Rph)FGr=`$`VR zsXrQGa-IvSE;NCF#!k5HT4P}&s?Q7MvP*}3QI7b*rkHg_1|jB3tA)b{Jk>EA(EQ&m z<{fvlo7Q4iQRiu;*XI(XDXXIkLE!1~5v5)F@K12nj|DWfY;*VH%i2VIcEIYAg1~E` zf_qQT2ttsRR0@kO!)Gi<@Vv)fE9@EbP&(al%T`Pk$ggwrbCPuASO0Ub>7hv(@%xr& z^bOp%TZ(WbK@n7X$u|rS+ajqPR`*|dDpGcI-L<)R?#|~{`FF@SU*a<{A}m=TwJPtLh`#U#)4^EWr>PIw^$j*04kI&BO1%-^5m08ky_ptCo^WR1BdF}lHe zweoyhH$c#Ac7Ry>EY$#d{T5pLZl3k^J=0h1A~{% z(+8i=UX+P!VRR$j3`(H=c*rJ>DsF6_lG|1_3G*U@8C{A^BW{wg0Zp?)F?-{UCf{nY zyH7_-tihwp`+kKkea-3dQ4ucmKJHDwKP9IkBye{SX8=?;+zubi8+CX*Y+HOP84hk=c~{xFP$%2Bp|?V?E&ta2;D(j(34dN!sW;XPlwY{ zps`&j=jA&W9$G=Zl~0|%?KNEG1`c#HAhvN*or!#^F|s4)^DcZBvtws9N1>+y&!~5@ zZYB3kpp|^s3(g!l;ELVO8m~ zHZx8{wsI00vgG9_(ssbm3O9(fqx>TxDa*ni<*F6Ribx&s-`nF|SgauBMob(Mv}l=> z$8D?MtH($;aX%_K9D8(*CluZLOpxcr=}28xBWzYq{#MC-A!ge z7U0s$27!#2HTD0opyT6Bja9-6@I!USv}M!m06d3 z3I08kAjhupH2aPxjZrS!!)`F-0Xhhbu{v{=`^C1J4}H}a8csk#A?DF?vfhtxKP;P; zCZOZW2yt^I_b0*&ExR4K=*Q)Ctta__O|%~9sG#uv@Z%|~YyomeRysOL zOVjl5IK%CW@5DJ_>7R1K*s%Zv5xpz%`a?z~o<{hF>bA%ZphvU5!Y6 z5-ps5ri2sA(hr5`Km{jJDcR+uktWJQ9dcpw1dkKOYYHYcJWeR(3ylR9YHTv$x0iwe z#lGxXrUB*t>HrObbKqFK1?<|cWiC)otdvM3b_w8*{sO z7cb%f^^Y*fo;l$X;`sWj1UfQ&oSHGKizOvGw|O6QUmEY~=2E&lHi;UgR8Br))=R&) z6DvGd>y%Jz+{Nq{V6X!_Bm|fq@-(s;WhAYVu4C8l)+^9_bHaahL{A=SOpbdm`lgA- z!udHX--iPl3rNy?{akOY59r;I8x&^~+$Mp!D_Q_3V$ zYz%wf8^I@qSlvP^4{}z$0_ZJhX#ic%Uh-GfBh(1C-zRHnf$)dotJ3`y1md zH-c}CmU);de?U0KvI*eZuCNQ08RJ&9Jcx0N9G2f(zH1Fw=0kxD z(ysU)EtI%3(`?ZXH^uE72{1}rLcBZnzPjyUeuiAUR?%?-PtdyL9N4zxNQXxXIENcQ zRBiHr7~iH9!+T6RpI}}SxUvZ-Kd`g^xjXr;S&rI!N=Hb$YkLwa6d&7?vCAXTQ1bGM zG?V$ttB!u?mJM>lXZxHeFn{C+oNVxmn%UARMmYTd;QT@*G?)Sv`iEjx9&v>qDwbl; zXsPbwp0z3KEK_+vwm^_^96e9qF(GWB?D41V!7?t7CV6u)GwGO?IA1mUYwg7Ute+oiysM0CmKSMUynK@GSK>7lnWgO!D-I=O0~+iyw5vc zmzg809-ySee{Uyx=SRtmd%y7t`B%?+la!n6z13TV;Vq$ zb#i_NIqz7%R(QV>?q7QCMfpCuGRQyhSacwA`oJ#cM{{j!h3Izh3VvYOD26=I^3IFN z!qExocj&807(CY0QZi-FH(Tw;rTE8R$e^vxbdf#-%ulLru{S1S1Bx;+y4jm-=%1F_ zB;^;sO?#NOQaZLnE)r|XIopAIHLeigv+v~0L5hcpG+=aJWJuXC-3tf2@knbN=`fCY zj(fG_#5C?F=ts($?-?9JWm>ty8NPaV?2By?Se}zx1ERBtXn{uJBRNF2BWHv5Ds*#?RE`XUpDmamM=3J@6WH#q0K$9 zqJsR)8Q9%VDR9F{F@vRxM0Kn}k`;LC@5b-Pynr;cycFAuQh+C)DFhe{nWvK)vM7Fu z3{~6Xxi~$UjpT)nsY(V|F{7-YVj`W2;jtvOnY#y$hAeBEp938)76IfO4guB#m}Ihn zf;BJ&P6v3bxZ#>h9#klNTVc^j?ZQDZoqXIYVgR?k&k8_ma*t41G4i+l>EtfZiH#c zj5LHXM5NmoVw^Gf)x;0z)5rn1)vH1qW>wu{VMGRuXK$wtuKau8{C1@4g7rJEn=-4! zE{Y^QpX4PZm3$=HIgKA!UTcy#S30E@uGjK|!3|WLMedMA)6WH9-=l$@P|`fUJ#W1) zuHQEA6ulIN8RM}C1XWr4YUah3_ z&WrtwWky_gHo)AHjc%C2T2VY5gkFPS@mb;#U z?ziWMK7CJkNWyG_Tzx)rg&A$8iX#w(!fw!S`A^roJXf$m#By2E!13VZ9QTMA!?2rq z%i9gPxK)#;QxUg8UO9Y+#9z>pD{B79>E8E_l~SNi1if6ihO&rW`XiB-=eo4aHwR5C zM4Mg&C^P5=Cb#@?_qlI|J+te>nbb z_+CW4q@bV1yGO3OV^7C0-cLpU^4PP9j}#<}1Rs$NKG9FINVki9WI3*yV4rayD4RR5 z8Gn))H64P!>zLHAjt&s_TiAbflqW$x^7Yv@t#?lFjnnl5qPCTvs)u;_y0}s%C7*A# zun3iBr?S5}%bC*L&B&{uN3%fX5Bej02vWTdOH{`!aS6z&I~>;1KLe>Ko+|k;XDl&Z zhtE5&)~essQH>=V#yBBX7uLT7AC}#dH8ntaJA9v6(jD}f1CIq;sb@^@eWB?S;?a}l zIG5fwZIsfBeBLtZlO1EeqWMvmHr?Cl^o{M9;_K)n*WoeKb4SIY?7$()A*UAu>eC9m zxgB3Rt>yufMCkyWBGvL0ok#A^3?Ra82DBiueJo1M2#r1ZFyXQAZLOW_B#dAeaa3JE zKj}wd1Me6|&Uah=K4K>qrW9{Ylv6lTkS$%uZzUb|CzFF4!FYv6aI@Es@4F&Beo|bh z!Mhluzw>%w@u>2BZl}1yq9>tNv0*6?Js`Y;&nTQJt9>?ymKEr6y3O(ao?-$fC2+Y> zM%(rIBA>p1HQo0i;9x>i=vE_xer#=E1DVigI!!ABDfgsP9sr?OM8v~>TsAUhZvW|u zrmAI1j(Cj}D{?;j2?5ceOKzp)R|ytFNj^Vlj`ClG6+09!Ct`5g+YLVFG?idKFclws zQ89EiAt$=2xx-A$+Oo%e`8M#YmCb!67Luu+S7z8DQ|P$-XS3h!EmPhHTRRh=g6+}5 z{8T~S54T$T`E#*Lomd8?hD@RGo_^y^l zPU+ys_+;YOe?)^%$2V79a_AXjGh>A%*4Owe7rD}|H?ixIS`7kD+YL?=S$;UPf1KUE z^KE6T_i{;lL7NA}|2fTj(E-$ft3|b1nx4x%9nyYYB zdkT|r5u4oA+xyEr1NEN}=L{zM1NIl?^VAG87-MxV_^$w=b@#hKesK2}S=!5TX0b_D z&Ij}ZM-tU0s(3Jog?3j83_T%eHLQe)OH z&tT1@ANy>B3wiFqIgDZPnXdb(LteKY?nm+3?{RCcEm5&&)Iz?RFF9h(u-MUkNi|XE zMNWL8*xgd!h}aKwFj7w4jiY$0BKAL&g2Ia^WXjhPb)-DVW*s_ZFW`n)$1i=(G89IcoQei(_>^+{fwKLJS$g6n2qCL*g#^a_Xj>A2D56 zsyd&EKD%2RE2L7n?L3g-ex}Ucm_Z1zq_L*k`|kV2>#>WSh{X5pA8!`lwGhklJF zw3_A0v^hqI^Waxv$3J9aU zLU7absQAlNu)mKqs)Ax9$nDbwi*i@rOvOlGA=YtNE0MK*wM$3}dt$Mf-3$KB`#_s& zD*Wah_bb=IX8-C6GFr-PQXI~VqJH#F{xA6HA6^{@q94uCdQ&QX;HS&1{jke0;xpK@ zBLhbr3Fql4+dRww?2oFuyLcIvp}+^Vos2<0(p6CDFd0cf(u6yC1!eCj-bTy(Qkzb1 zE>}bj4l@0ZN{Z)7?kjtAq+UeMtUo#{=n|)vyvI6bZFlg3T19fm$bCicBcVw0weHRp z^l}dH#&~Yb_%!$3i9YpeNWJqWD*-QRc=td9V&+VUNXY|6ozW2|T$#SyKY)+<#rK>6 zVwX6VT)|N_)SfK_@$JXqF!{!{Jv@*KA5l-5Yem%(7=YS`RKHbyhSCYhO2ut>i{6ti z)2_InSzRtYWW_17BNyec3~1pmW%%jDDI0!gdRND}JwMi)2MFA&Rqga;#ec}c!4efV zfxZQ0UXOGFa4FtXU{Tmae}6*7wVV|rY4H&aXI{e9tIO|P=8n$`1ZG(q8;xMk0jp5Y zcd8gPcjR`-ENQ6RDxmrl&y;En1=MYidMzH|1vz%g&z>EUD)rU}jSeW7d&DZ5 z!!`tp1f89?hFSL*}lUQX~6KCVsFsiQC4hd~s4j<({!s>8LCPcZiusWN+syI@7x7+o_hTeuKKM z%jyi8Os{aCi{0&;E!1{czjPv5dXDtwFMm{l`NMU8N{#Nd$=PC~D=np2#8!Ef@-r}o zH;1NI*j*UDov`35raRXs_$N0uk42iKNKqc?vHECNBL^C=Kv)H%`zb*~b3uF^zJH@w zQjQ}Nvk~XlPobE_(SxH}ophtv9X=mbB_i<4y_Z6;2t(AQU4kMc1vj&mn}kLiDiNDT zE86#7_X(>m@Uwcin zbr$nv*2o7rQYHQa?&XI5O^SX!Z>w7851!v4>}ks@PLG{A{j-bZ25Y3k%kyF)5;{Mo zm_gsAF9M>?!1K)N^tbmK6&2(yTOAHk^#+ET)L95)NO*(HwFyx9Z(MmJ?OXw8_T0U3 z8X~)uj97^o5di!?1(L(lp{BZjb3YW;ESj-r)dJZ~YNIDK;o}JXr zfz&V~i&wxZ`alr~3>EvoX`>`TyU{UuyedJ~H)iXb?57-SBt$QH*1na~BT`K$8#=fv zzhLtVJFM9c_~>Pw1c&oI#^gO%U-ec8ZynZ0#r)LV@g8=Vad2G69XaRSh0gk|Hxh-l zZr;IdIlXpwUp%PJ0RI#_EVxJ3=^i~s@6g*_@Wr9d4JN$=<^*n|yQhD;MKsMWXUna8 zbPmbOMwSLx&KjRY=!BOWcPwBIZ$vcOaa`z*#MrR5l!00J-bN>RB)T(Fy_~?54 z1h*v%u~u|wg7lSjEq_XV){Lk$0BV8SHBZb5ynw~3Y9sHj$5F+I&rF4RSn>6Yf^mJ#M?9A>;hT~GaVnXjh!HfaO!sSR417wW!xN~A z#Q8_GDiXv=!|XYUW&Q*^qw2f_qolanmiBx6-tR$_NAk+f>F`tVtwE=s!(6F&Yjuwk z6~pxrna4b1GTiSV7P$S5k>>6|z)j7-vL$gvImVmGW+!^sq{&S$N=$NmE{|d_jX;PV zhtLA^0FK6ag#JZRD@JzMuG$OzpD&crm?%!R9*C-wayOVuF6GOMCP<1yk zm9cu#FUI$=PbdJ*O8L_e!bmZkX@Tn zawKo?DxTcF;Hv&wwNsZAoLM+Ye-9yzFQ!U2gy+-rmAJ5l4mw@MG0ah*ai{nE>5}Y} zFu27}&g$_s$RwmS63oA8SE*Q$3>7$Rbyi9|$NQkV^SuX#4+9)gt?=~?k~`faJ6T{c z;W+FxmlKZwm>kZ}oW}W{5WWNhAj}5f2pB8hn&T`GVEfpunSluU> zl*nb{VWz!L+{(Z%V zAp8w^j(rB3R($kbxh7j*N!eK$WRMnspDVH1-Og_-i5s0rsES=~)8dR3g(<6QRQcf~ zXfi{{FSP|UoQ&O28DRPTSRLHL4lUwtU_2_}C3>qh*+!#plL+Q=1ao z`IeY(HPP#^hC&XI=zYgiwd3&cFnk;QNG#_>iX>qX#;C&o1Cyl454Jq3MY6Z|mdSME z0kaV{bsu~`Ug9;^^Y@I%tA32p=ji3?1-u<(jOgYPCO=ygx3urxx6^6@ufWYW(>Sd; zydq%&KSb7zr6rGFNIi|2Z_<%~aGOn`nj?HBQ12H@hsdF3E?GlBi9hG$iYLnOzP%8p z>o1@SJvBkifG%<_V7GzAfI9@7Jl<|Us$kEGtO1vtfL*~ zPjsiYT_ED7is9ymxldvKd)9DLW`=^>NT`ca= zo23BKP`$EJvat^xAUq-M&S&lL9qq&ULlblPTpY;#a~FUOL!HEq~xo3X@egnK<~n8eU(BESize zm;&RlWqvY4hr0N8?9jN*MI@cJISWp$ zBiy>(@IoWtYcsn7E|1Ul7^EC1MXsaEA2c{w*hckm$5iGpoXb30UYQagqB3rJd}ib=rh1leZSN znOi*>n$Xr~_QB#OrKPk{VA^F(Tz!}iECQv$0CVpF_nd)YFSwuT3~u=`Ss(q*UPA!B z^*hgJx8+nkv(sutPet%Huehpqc4Btj197W!dGDH z;G3oC6$hwF%I70}J5D%_*A7qQGw=o}<66qMZOsXy%g)%q0s;p8ANlc-Z;Q!_qLug> z9bT`z`AG7L1pNdS_v%vhy)m;+t#IE~ZU6za5V{LUaKn04#b>`yK}0tCJe*`g9KOH% zb^WOOX?FSc=NW~+%hLaX^|G2_y)R{ICI6l{`kmSU-D+;UHDhl4@I#V3O}(Ug+1vxw z{oc4ttGCBNhRWwjjT!YSd|_0q2|vx4W!QzPalXoGly}i$#jAcElXI2TP5iPw273{D znt9f*NkbUEp7pRl`jmM>L>VpZ4pYdBHnJT3LK5A=)%=r24IV-190-aSgr)-*Ev^uKG~P4ZZ5_r4;qJ=^;7iLPzu6&_ zuDV5{p`js>x<)kj{+c~`u#B7jKxU=?r-a_K*V>wd!$HrP?=i2LHqW}gd!YG%i0GjU zT4ZqU7geH%z3HdB8E;2_4(oB#3MnW%h&4>vfzO5y_iKaZ5s5S@DawL*EB>L!G$3nz=f zye@4&t|@ry$@y#&7RgmoFWW{Op%d*g8jHnR3Mjuwzoi1t!LSp<#P>G3Lbql@zXg%4 zcgnQc_N-k51CY?#1yu>KUdQRMDbubzInpY4{jf}{D4fc*JI4L^sfgY|YeTtB1M6*@ z%~kC~{?&1={S=;~#a!&6^4HU>jXv8P2MG$d_HKLA^@;Y6Pc69`aVVxx)3nMKY?{8w z1aLHv9wB;-{VxL=U4J^`Z5wEnX*JmEP`!cE)cBP+&^xGBccHrN0>1`hUyMi4EJks) zZ!pgYeIHv589HCe|IzS{9ixD&8in~x694Wy|6Q)A)$(pqgE>Kr{>h?eAZzqCpRbbmsQw zT@ZYks5HmCH*}hHCD_@svM(xmuD#{7Lc1bW8~k{xSWOICp%%{4lgekSf6jY)WovOt zIyd-`t$ZA%dA!djz(%Nh0r5yV>%#&#YRUO*bwhB@qw1CP9DL1RAXcW1loOTsffgc1 zwbJJMt#H?wa=qKSQ;^VETMwd&*q<$8U}7bh6>GIXY50Ul5)B=TP%`@&o~ZMw!NtU- z%CfwdF&QVGk>g6U5ed}$3Vp`rlu5fzn=jy5F@=S(*QJZkTB8SW_w%Oqv{ClTW*5i7 z6dOUc@VTx2Ls*tQi(#W{0pfODvCZQc3%;JL7nyA|r2T4TK5Ty=qb=50eNgYsD)KJhKT52K|k|2nGnw^9%vJUj7$R$#7^IIOlcis=H ze^UPs7ARxf?XevGlJWdW^A|w38&NX(>gE}9&m!F)Y?9Qw%W^N^=ZZ=^hHXbchIfNq z9hJU*gmhyg6$~tIo2;+CC-oSbD|Smg3G z1Nrjw%>rWWBQP#P+K7YYlm_8f)lYhWdsEi_e6HKjuMzHz%D8HamF*IwDjoEhE09u31+GKr|A-uFRS$InY13)j*AAEM9{(wcy;xI<*OyPK zT9`6UY;jueu5>0frAk$4G!-@gK{*Zctu1`^YLFGbT@mmXO+eRGaHz@&U>aoRd zv`Kb4AD_L#6_~cwtkbBx6dB1G*ckHY;*vnFr45(rfI5M5wFT3qp(ELeN6cMqRZ$oU z$(*Mnyk(DnUROSD34d7Zepa61Vt2Cf^zg_(j>ALga@ra7Q)V)o%5Q5ok~+>Y+S)8p ztNizjLoI}nOOjBT(D=mXp~B1GB8wK}rvK(7Uyr{Q_MCq`_A2tWorG=wg%e*`rRowX zsdHJlHj912)shIYzioQzJaC~jC?jBKwNVY)Z|Y3_r`-Q>rC&SX&ucmp(E^wOT**|i z0y2O8>ExmAp-m_Vw$^lUeBWVy4SVQw_hD{%ijDe=J0hGW;H!A!_E&?pEyc2j7Vd?A ze(P_S{PWdoncs}ibZ39`;ZFv&JjrHqk?_5e^Rd2R=09j^Y4n|cZKB}YP=Ki8$} zfwcwJvjQP`Cp+QhwTQF62WdC!ifIzIH6~wiqHPyt(*$bVMe6G-+*iKw+t2ormz#Jj z>v_#!{hNEd2M~smgvz<&X8yTz{$Aw%iE%Bz8J7w7;W7AQm;E0;3wVhI=)TiU--fC3 zZy5Bq2MSsu{lzLUqT>t4pWOS~KmX+w9R}7a)@s~xP|-g<-oL(;JjDC8y6s!z;YWX{ z?*G$s6aA+4x5F-t{}G~px%r>cMGM3JwK|sou6KBU3EaQ?ELzZeG$}zTPjinSPyaeW z{_SIYg8yD!3y8E1`(M}dPxO|2`AZN*YekO#odo@jn&13>uWktvHIMP1mq+(&hf>c| zdHyBf|NdDvI)AV3@TkuY{XZ^`@b{jK-N*M*DN;&1%;I%eVdsxQ|Myq_lWSeAoWGxF zQSMH+8N2179eDM3Ce6PQNFjzl$Zqssvi~E6{!8|Mv)BLMly>c2T2VU< zJG00C$i@GSVt}Sgo^FlI*kt_D?`9&ZfaqEG?GGHyl(?Zl)&Z>_760ipqg4oM7-7Bh z>)UPme}4PRe^e5Il8=8M!~^cn|Eq)kkuCq#LI0}te^cncI_Uo^9rSuD^EI|EZEKf8AC?szKBO2N043pEs_!Xbf*4fAo{;3ne-h zYZ=-=^5FINx@EvdCfY#R5`0+K>`$YmSoaT8MlAIoO_?BeY^IS6^E^=NvT@2Sgnj#4 z+J4tNT)o%>Z+)n2MHDX$34NgCCee>ebuV$-#s@)$q(3|pp;@%h*gs|a;cuTxw2=#C zhW))=qWZoocoT2GP(^Oxd3+YD`CzbIR(5gPc7VOmg7MmFTBKyT%$M(`sG;9=Me?GF%pC)P8KiNj#Xpj5q!3Rq)pZV@Y zyyuE)?O)x>rW?{=WELX44kqo`+@u(Qjdm23(~*FAG%VI=6qR3}s@3KEX$F5X`-93x zNwlIV=7;GmGpNSOW$Fd5PXNYG{y4z8^nVAfw5yDPs4nj&P>Y(tT2j@KqC93wwY4Xn zbHrh*Dz3h%sjKLr19#b~QT6m?`W2-WO)K7vjnOg)DvhaK1v{DN?C;kVaL91zRnf8D zfm4ALyerulcJeDssFiZlFj55n#T?Z?j79^UDcYM^dC)v7%uB#_WomDxf@1N|6%*A1 z@Q%;c_w5Q}gg3v<**D^rSCBSKlQaR3%!~zuIoxLeG0_36iAdb4jp|Sze*f#Ts+<@g zIu*H#@Xf;Rd6VHy*e%T#xu*;lP2YPg~StNe&v2vzn@>Xy7I|KAX z;B}X%--{+cr7sZ1~FK_E3-1gC5{{nCumtg;oRS0Mi^UEEZXfQ^SErWw`Ic^Z?78YBXpx4 zjno;t7eaU(I)BD2yA9};9o^!e!I=^iCnJ7ZAin)%?C`V@?Nm$?UVg-(pYSNZ6P{7I z?p+C~uXM?I{QOwg@3Ho81`{#ppXpB1wLn|w{xp8VJXpF5( zCH;s?pVC;rELwo|_~zYh`_)Acfy6uva{B{3zX%+kaaGQ{s=aEPUm_68_;TSw7?gNbJsOAR67p4j4p=PlIX>lm&itpK{hc z4NyMM!y$k=0Qqe*>}%=niy#s*3!}=7S~K6^(s--JZ6QvWv8oSdV*8%Lo{PYdt*ZJoA9qQ zrPH$hp8QDjYpT=10F#CqkLB%QBlDlp zm{d0BgOpM)4W7LkECV(!54L8m6ub(ce;TC=O^zbvYD5)!T!Jd@3)tx8Z;H7h^Db`c zxZb7934CV}-JgdKr#IIWXPbprhV8V5eQ313k@m1yIy8J-Q%O^`QS6fDvS8oB>)tvBi=O{F~Nnoo+ONjPn0OEeZop*}Idy5*TfI?8)n4_BQgmgL=s%jDiQ zJgtD%*Wi!9YL*T5O&57rX27Q-klPk6IQB3a|(g*N82lWMPjCSg6ytWJD znywZUN=Pj4c26#+#|c+)&Y3u>Ilvc{e~J%13^erHB!sWSzL(T7c4!|sWAEu}%W%eu zZ|G}z?_KpWtvH@KLWpJFqN#kwVrrYgwQs-GCe7Ar!s8N?AaboxBFxylxN>>SQ>e)}D{$T1}T?9XGQ)V=CgVEaqTlP^emFYjAY|wOzel zrdSfYy`bYLucj4cS6mD@|H0D=D@`)b$Et(wQ#vQ|0cRNaQ*43=_C2Dju!t!h zKX&X@L)M$cNU%N&{hzp(z0r2dwWbQaGWAEo5=ryfK@_n2EE&(} zCq2LTVCCF->Bq?uq46}NN1hl09{;%L4!tlx)VxR7kixjo@8&X3c3=;r+_9!LzSaH(U z(=hzH%t%O=!_V2Ho)_#suh3tpi#U)$lplJ zI1K2&zsl^V^K#W~&#aa9Canro_XIPXS*f*88wddUIOtXwRY=w5 z>V^Qxa{LSgAj-F9&gEedP+9zj+{RqOq#^phcG{=tKLR!qPf!7y2f~u1sybErz}-|f zl?)*x!b+OvRuK=s*?_lF2=<4lm?%md&kZ}g8;(>o{DftXT4R+p)WHa!7GM?XAPO3> zL4nm!Gqa2i-ZRd8tDwjJ74V_u{PYw+pt08mO{XTkOeJr<%#Tt{`EXsS30a%>1x@A2=g?Ug zpK4FF9nCgJh9z!ibwEx$!GcqHD6`$yuq1PeO56;&Kblk$zlLkvZ?IEPLv}V8Qt50ppHD(!M@{h9`ow0Z zou6Z`+N^2&wLh{j=<%+EN(l~-#&DUM+>d>ts&K!%$5ZSAJskh&+mi+Edza7&KOEw4EKF zzJ$NQhggKf9j1;_-1X+b0 zvtHk7O2YO+1#Ub(+-saG&2SSzm_r7NyG1iFZ*JDPB9C@1MC=_bFGR)MNs>nI+``w` zF7}@zm3<|4#Wvi&nPwn7ic>{nl6Jg(e}cFUrgcz0o<`A?d_5=JV`)}d`0BD=Dy_S1 zfW~id#e01@|5MXuI7j)=(*etN!OEi*pZG=!6d`SUj+`W3X?~S7vXjHL_apoDIs+Q z!7qF$rUG=yfT$wv-A1Cw+0p`7*JT7r)g&KHhPT?)(kb|2`(tDZ>ln#-{Ozd0QOdT^*|!^aaw-lcDIoLl=6yZ0JF6(#-sI$GSWS$&#TsB>gi)|B_voEPqWt2 z%XaR6a2{1dnHV$?t|w4Y=U$FZek5eMMOkO|^=q5)pBF#nGGC|5*|f(rMbLPCk;qaI zTe0!A_V3sCZ>{~MORiD6ghQXVsWbVk26c?}yM`FElt?vqMsam;gBWQthGHIj7<^fh z*bBe6{Do-n7I)v)GTqI_b2os*_k2?za<;?>z8n5wQbmZ(iL>;M0|>fBw+u+t6;$~j z#{yN`|2qhJN6J(DyGE=8l#3TSI<1x`$0WNGJR0aP{n>_+QMQ%26|EF+r**P%V7{o$ zu}S)^E1*pJeoF8AZzPDhX1BBG$S6or`k2_R+zWH{fF}WUjli4iHFgnp1-`^wiTB;d z$8+wd{O;4!$&CI}ww_iC+Db-+ZGrwMCDV!ruQGu0r_Fs@#q7@YCCO=35Y-r$xiY24 zVVWkK4I7n0RDGX=75d*Z@x8*1T+m5L8gWD&pxL#6P&^ZC>{W0}R6jvm)Bvklf6VKt zOKp>2X&l2eK$phIS%=_d>TTsCXX6q4XjBVYfARG3utuxqe5WUXBj+V+@07-uwgL~g zMdT4mtiC$0N{;SLSK>30hvFtHLV8-q7NASi{BP%?twBBylZ*KG$R1%k6tAt;nto{RuqMJ-FkS-4_;x&Sy1pmrPxG>n1Ki zNTa*~8C*s&$h*ag{S$vu=0-Ma^TDX@RCKMZAF*!!&nzmtO-fVFCYfA0s=>$Isd74m z#y%Yj?xS9oSLAIaegQ=|t2XzuEnzpGUMS_pw)3@Ix%u@kw`HObSj)(7Vt2|G9jMG4 zKv(u}G2v$i7HtQe3Tq9SEG&;D4!`zR_rwYhLoSoaRHZVDlUA*nw~dx&qI34(S^~# zO&3*@RPoOdG2b7A7Nz-Ti@yxZxMjBflYeJ96!pL(J=tF$K3~s9~FMCPFPEye6Z;tsIMW?Zs|GP zSaM+(?8x!lkaX_o2;NL_dNNv4D};P{*z#HpEY!VC*eG#L7W0^#KO6GKL;40>=#pLM zv%Q>6R>)EAV3R>nas}T}x-LLGj&M`(GyLTZ7`b(p*z)~yk3nke=aeFRfPh&oVKTSV z9qu*H{DZ77`8u(u@%Hz$qPT@YF-f*nEngw`h{BEd zeyGnfjwG!z#{QL6m5jXmM|zVb_}KTeD`_aNHtE87h=vR^qR9Pd&nC{!DnR*mvVTQP z{3$K?0jig+k)7Bi_GT+>exVr+8S?$^q2pi{{4iWvNw+^$u_ z`0IdnWq)(3hh~N7@<`QZZzA;uVv~S#B?)DZU>e^!smd({AZ&ftr42FD)*hD{p~;cz z>hT`__zD+g;1<8ccw)uD0w6%oj2Xyzs^$kV9D@^^K-GG*dd!lS-A|P8K_^+W#3RnE zuMSjcCJ{2pG z8}epcv+jG_kb;cwM%+@|NjXC-)WIHCCSCJaYTwLu;wTk|d9~PHcrWse7ze;dJj6dv zo@nMFJarVD^Ry{i7Jf=xia(ZqpFsXiW>y-(nK{#uRwY#y73J}fJihp+mkd%t@rfIY zM>Mr`Jrr>!h|t}Htfu1nUDFYQuB3+ZqD+=q___|`+MWtYz8U$q6S zUGkcp-~bH*L?~u=J3p=?Z(KeAn@xv$FS~<}tZ`H>OpkhRR^@G??U!jEr(RNy zIasOV2?(rs8n1|E>J`+lb3&%UR zC1wNj+nKw_q}xk`$|SZI0$BRe;a((l5$~a{M^Hc(;^LwqM#2+G4-pQvv9$3r>yLij zzKwh2XD$#sTsB`wp{Z%xZe7Q8cyu5TuqweD6o44%Q4}~YE-ni(u9U6&FdFZZzPv1E zzXm_(I9kCyh>tz74~`6Pml2zdK8#2ScI*gfR(Z3@*>ni2t zsxP*E`SupaE{5yMM^;Lz+5VB&b)=;q8!(mr8c{wwZYHBPYW?9vpge6OnZw{6(ut#| zxa@w0#FFqePDh6W%E~d&{mul4U1@e(`#vzAgWTUIO&hsVaRO_7@E(mD;gM#`cnUxs zhr}KfLglUw)XV5vlWODIMo*$eW+(1j?6v7LdRJt#i<=<}t#9>yX$m(DaMWGA?kwj3 zmC|UM!Cg!D22A`ViFQR%S+JQKm8?-`D6#$A7}S+-kWaKh+bh<18E66%Q~sOPFa3wr zZ}Q9P&u`1S>UVWD>)$-1=SNri zfEkdS1F9tsIYvhN>kK=tUfpm<+2slgm`0aYLdq>Pu3y)fonQZDzyf?$-l^Bqh zJz)3qM6ZV7R#&mF_~K`@AYJSg8o$euX-7XDYPaFl$Sx)NX@LgL!ZMcP$!Noz&~sHm z*SxYI%8p1j@^+atiRc-8r4Aygp=sD=m>=gU-~2RrG^OSP^{3?%S6?eQyOe-$h0iKd zci$G6yxPc;&XoA}jy;X&@#mYfBr%6NG5y07QSKp~BNZ>OHz=8At6+4dwXqE7?|9KL zk_WF#O4O$pC10{>PxThBfIsz4)l|3Tl(AI}>tYzruGW!yRo`o)B6GWyJGps%s!GAF zFT&m`Q3lU)^e1iP!z%Em5-SY-xf)K@f&Zk&K4$8FwfCjrY_4nDovbP~EK^!qbW*fJ zRVXzS#X?atF;xdcVyGeJd0Z$~CtCA7OSHrgQ%g%#%^{{pLy1s9i6KP3N4vV#-uvDA z+dsZP-;ei?Lk@=|&+}aObzj$cp4WNnJrT!PYW2L<)UDB+kf+2%D&Z54DzucuQMT9S zb_6W*(Kwmq>GuiTa+wPvFZ(k*Y8;#v62)jrD<9MiwyOM=*#pPttZJyCp}@N90jk<7 zY7^Pea_~a&$Z>CF)Dw#DqZrTyX56|s6LquPD-aQwtA#$0lX5^UE=d<>r11hw`>^_+ z>Z>&GIdQkUM~SsFb+>4MiHq$ybrTft_HEGpOY0I=`S`cwf#oolKIizgKvQ?K@!+V~ zWzS}F6&&;tChT_C+-~tTlK6WiQojN(U`(*(t?IXa>b6|Oe9>#CI%%4G8p zaZ2{95hbW6*^hUm5di7XntR(I>IVL7^mhBbYpEP4_0%IRrZ;hDJ5fyOEy7ai1$1Es zcC8vq_D}qi{a~*66R}~OVeY%A?R!v+|J3~jf}yWC$4RM4Nm1(EAm;LXP{|r$AgHsv{k|#zNLI=TJx_FD@)dT=(8dR00g+&a=ovZm}8!qzK}^L&MK>cijkVR653@`IYCPHiMe8PuORWxIF< zx@d{IYI9iB(_xEhG=ZnAg-kJ!6u7dq~6mmZ97M*xNJc$-q8(%LC?Usa&gqdH*Wf zjG5QFT=F;UcKc#p)}jMat$ug+fUIv;EKGl~ukw?~5V8%&nC1bjAAN1&SE>}J} z9}YJ3i$Ddci}mt;3s^uA&eil=Si$08Hiaa4B`�ryvg?x@mG1o8oc8)+8y+uV?pt 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 to verify the domain by clicking on **Search Property** > **Add Property**. Type in your domain and press Continue. +2. Add a **TXT** record to your DNS configuration. Follow the directions for your provider, or refer to the [Google documentation](https://support.google.com/a/answer/183895?hl=en). + +### Linking the domain to Google Analytics admin + +1. Log into [Google Analytics](https://analytics.google.com/analytics/). +2. Click **Admin**. +3. Select **Create Property** in the Property column. +4. Choose **Web**. +5. Fill in the details and click **Create**. + +### Getting your Google Analytics `Tracking ID` + +1. Sign in to your Google Analytics account. +2. Click **Admin**. +3. Select an account from the menu in the ACCOUNT column. +4. Select a property from the menu in the PROPERTY column. +5. Under Property, click **Tracking Info** > **Tracking Code**. Your Tracking ID is displayed at the top of the page. + +### Using the ID in the plugin + +1. Run `npm install gatsby-plugin-google-analytics` in your terminal. +2. Add the following to your `gatsby-config.js` file. + +```javascript:title="gatsby-config.js" +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-google-analytics`, + options: { + // replace "UA-XXXXXXXXX-X" with your own Tracking ID + trackingId: "UA-XXXXXXXXX-X", + }, + }, + ], +}` +``` + +3. Build and deploy your site to start seeing traffic in your [Google Analytics dashboard](https://analytics.google.com/analytics/web/). + +### Additional resources + +- [adding-analytics](https://www.gatsbyjs.org/docs/adding-analytics/) diff --git a/docs/docs/recipes/working-with-plugins.md b/docs/docs/recipes/working-with-plugins.md index cf88925d67485..da76c2d96bb51 100644 --- a/docs/docs/recipes/working-with-plugins.md +++ b/docs/docs/recipes/working-with-plugins.md @@ -97,7 +97,7 @@ my-plugin ```javascript:title=gatsby-site/gatsby-config.js module.exports = { plugins: [ - require.resolve(`../my-plugin), // highlight-line + require.resolve(`../my-plugin`), // highlight-line ], } ``` diff --git a/docs/docs/sourcing-from-graphcms.md b/docs/docs/sourcing-from-graphcms.md index 4ea87069f9a59..a994d9e251cc2 100644 --- a/docs/docs/sourcing-from-graphcms.md +++ b/docs/docs/sourcing-from-graphcms.md @@ -35,7 +35,7 @@ You can install this component with: ### Configure the plugin -The last step required before you can query your data is to configure the `gatsby-source-graphql` plugin. Open `gatsby-config.js` and add the following object to the plugins array. This example uses an open API from GraphCMS but you will most likely want to replace this with your own API and provide a fieldName that makes the most sense to your project. [Here's more information on working with GraphCMS APIs.](https://docs.graphcms.com/developers/api) +The last step required before you can query your data is to configure the `gatsby-source-graphql` plugin. Open `gatsby-config.js` and add the following object to the plugins array. This example uses an open API from GraphCMS but you will most likely want to replace this with your own API and provide a fieldName that makes the most sense to your project. [Here's more information on working with GraphCMS APIs.](https://docs.graphcms.com/docs/api) ```js { diff --git a/docs/docs/telemetry.md b/docs/docs/telemetry.md index 7bf87537eb415..ea9c2fc1c7125 100644 --- a/docs/docs/telemetry.md +++ b/docs/docs/telemetry.md @@ -32,13 +32,13 @@ We use these metrics to better understand the usage patterns. These metrics will Specifically, we collect the following information for _all_ telemetry events: -- Timestamp of the occurrence -- Command invoked (e.g. `build` or `develop`) -- Gatsby machine ID. This is generated with UUID and stored in global gatsby config at ~/.config/gatsby/config.json. -- Unique session ID. This is generated on each run with UUID. -- One-way hash of the current working directory or a hash of the git remote -- General OS level information (operating system, version, CPU architecture, and whether the command is run inside a CI) -- Current Gatsby version +- Timestamp of the occurrence. +- Command invoked (e.g. `build` or `develop`). +- Gatsby machine ID: This is generated with UUID and stored in global gatsby config at `~/.config/gatsby/config.json`. +- Unique session ID: This is generated on each run with UUID. +- One-way hash of the current working directory or a hash of the git remote. +- General OS level information (operating system, version, CPU architecture, and whether the command is run inside a CI). +- Current Gatsby version. The access to the raw data is highly controlled, and we cannot identify individual users from the dataset. It is anonymized and untraceable back to the user. diff --git a/docs/docs/using-gatsby-image.md b/docs/docs/using-gatsby-image.md index 5e45a5510462d..4e6d7b4a1fb0e 100644 --- a/docs/docs/using-gatsby-image.md +++ b/docs/docs/using-gatsby-image.md @@ -83,30 +83,31 @@ module.exports = { ```jsx:title=src/pages/my-dogs.js import React from "react" -import { useStaticQuery, graphql } from "gatsby" // highlight-line +import { graphql } from "gatsby" // highlight-line import Layout from "../components/layout" -export default () => { - // highlight-start - const data = useStaticQuery(graphql` - query MyQuery { - file(relativePath: { eq: "images/corgi.jpg" }) { - childImageSharp { - # Specify the image processing specifications right in the query. - fluid { - ...GatsbyImageSharpFluid - } - } - } - } - `) - // highlight-end +export default ({ data }) => { return (

    I love my corgi!

    ) } + +// highlight-start +export const query = graphql` + query MyQuery { + file(relativePath: { eq: "images/corgi.jpg" }) { + childImageSharp { + # Specify the image processing specifications right in the query. + fluid { + ...GatsbyImageSharpFluid + } + } + } + } +` +// highlight-end ``` { ```jsx:title=src/pages/my-dogs.js import React from "react" -import { useStaticQuery, graphql } from "gatsby" +import { graphql } from "gatsby" import Layout from "../components/layout" import Img from "gatsby-image" // highlight-line -export default () => { - const data = useStaticQuery(graphql` - query MyQuery { - file(relativePath: { eq: "images/corgi.jpg" }) { - childImageSharp { - # Specify the image processing specifications right in the query. - fluid { - ...GatsbyImageSharpFluid - } - } - } - } - `) +export default ({ data }) => { return (

    I love my corgi!

    @@ -147,6 +136,19 @@ export default () => {
    ) } + +export const query = graphql` + query MyQuery { + file(relativePath: { eq: "images/corgi.jpg" }) { + childImageSharp { + # Specify the image processing specifications right in the query. + fluid { + ...GatsbyImageSharpFluid + } + } + } + } +` ``` Note: This example configuration assumes your images and Markdown pages are sourced from the same directory. Check out the section on [configuring for different directories](#configuring-for-images-and-posts-in-different-directories) for additional help. @@ -193,6 +197,7 @@ The `gatsby-plugin-mdx` plugin will be used in the example below. Put the `gatsb module.exports = { plugins: [ `gatsby-plugin-sharp`, + `gatsby-remark-images`, { resolve: `gatsby-plugin-mdx`, options: { diff --git a/docs/sites.yml b/docs/sites.yml index 4d601b56c9da5..2cb8b68ab0d46 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -9978,6 +9978,32 @@ built_by: Built by Rebels Ltd. built_by_url: https://builtbyrebels.com/ featured: false +- title: OCIUS + url: https://www.ocius.com.au/ + main_url: https://www.ocius.com.au/ + source_url: https://github.com/ocius/website + description: > + Ocius Technology Ltd (formerly Solar Sailor Holdings Ltd) is an Australian public unlisted company with Research and Development facilities at the University of NSW. + categories: + - Business + - Technology + - Science + built_by: Sergey Monin + built_by_url: https://build-in-saratov.com/ +- title: Kosmos & Kaos + main_url: https://www.kosmosogkaos.is/ + url: https://www.kosmosogkaos.is/ + description: > + A carefully designed user experience is good business. + categories: + - Design + - Consulting + - Agency + - Web Development + - JavaScript + built_by: Kosmos & Kaos + built_by_url: https://www.kosmosogkaos.is/ + featured: false - title: Design Portfolio of Richard Bruskowski main_url: https://bruskowski.design/ url: https://bruskowski.design/ @@ -10140,6 +10166,17 @@ - Web Development built_by: Jason Zheng built_by_url: https://github.com/bilafish +- title: Fluiditype + url: https://www.fluiditype.com/ + main_url: https://www.fluiditype.com/ + description: > + Fluditype is small CSS library focusing on pure typographic fluidity. Recommend to be used for blogs, portfolios, documentation & and simplistic text websites. + categories: + - Open Source + - Design + built_by: Boris Kirov + built_by_url: https://www.boriskirov.com + featured: false - title: Bonsaiilabs main_url: https://bonsaiilabs.com/ url: https://bonsaiilabs.com/ @@ -10223,3 +10260,87 @@ - Food - Marketing built_by: Tyson Foods, Inc. +- title: Brad Garropy + url: https://bradgarropy.com + main_url: https://bradgarropy.com + source_url: https://github.com/bradgarropy/bradgarropy.com + categories: + - Blog + - Education + - Entertainment + - JavaScript + - Open Source + - Portfolio + - Programming + - SEO + - Technology + - Web Development + built_by: Brad Garropy + built_by_url: https://twitter.com/bradgarropy +- title: mrkaluzny + main_url: https://mrkaluzny.com + url: https://mrkaluzny.com + description: > + Web designer and web developer specializing in providing services for SME sector. + featured: false + categories: + - Web Development + - Programming + - Business + - Portfolio + - Freelance + built_by: Wojciech Kaluzny +- title: The COVID Tracking Project + url: https://covidtracking.com/ + main_url: https://covidtracking.com/ + source_url: https://github.com/COVID19Tracking/website + description: > + The COVID Tracking Project collects and publishes the most complete testing data available for US states and territories. + categories: + - Media + - Healthcare + built_by: The COVID Tracking Project Web Team + built_by_url: https://github.com/COVID19Tracking/website/graphs/contributors +- title: The Gauntlet Coverage of COVID-19 in Canada + url: https://covid19.thegauntlet.ca + main_url: https://covid19.thegauntlet.ca + description: > + Tracking The Spread of Coronavirus in Canada + categories: + - Media + - Education + built_by: Masoud Karimi + built_by_url: https://github.com/masoudkarimif +- title: Zestard Technologies + main_url: https://www.zestard.com + url: https://www.zestard.com + description: > + Zestard Technologies is an eCommerce Specialist company focusing on Magento & Shopify as a core expertise. + categories: + - Web Development + - WordPress + - Technology + - Agency + - E-commerce + built_by: Zestard Technologies + built_by_url: https://www.zestard.com +- title: Kostas Vrouvas + main_url: https://kosvrouvas.com + url: https://kosvrouvas.com + featured: false + categories: + - Blog + - Portfolio + built_by: Kostas Vrouvas +- title: Hanare Cafe in Toshijima, Toba, Japan + main_url: https://hanarecafe.com + url: https://hanarecafe.com + source_url: https://github.com/mnishiguchi/hanarecafe-gatsby + description: > + A website for a cafe/bakery located in Toshijima, a beautiful sightseeing spot just a 20-minutes ferry ride from downtown Toba, Japan. + categories: + - Food + - Travel + built_by: Masatoshi Nishiguchi + built_by_url: https://mnishiguchi.com + featured: false diff --git a/docs/starters.yml b/docs/starters.yml index c91cbc029fb91..729783be16311 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1,3 +1,16 @@ +- url: https://22boxes-gatsby-uno.netlify.com/ + repo: https://github.com/iamtherealgd/gatsby-starter-22boxes-uno + description: A Gatsby starter for creating blogs and showcasing your work + tags: + - Blog + - Portfolio + - Markdown + - SEO + features: + - Work and About pages + - Work page with blog type content management + - Personal webiste to create content and put your portfolio items + - Landing pages for your work items, not just links - url: https://gatsby-wordpress-libre.netlify.com/ repo: https://github.com/armada-inc/gatsby-wordpress-libre-starter description: A Gatsby starter for creating blogs from headless WordPress CMS. @@ -1869,19 +1882,24 @@ - Full Render Control with Portable Text - gatsby-image support - Content types for company info, pages, projects, people, and blog posts -- url: https://gatsby-starter-under-construction.netlify.com/ - repo: https://github.com/robinmetral/gatsby-starter-under-construction - description: Blazing fast "Under Construction" page with a blazing quick setup. +- url: https://gatsby-starter-oss.netlify.com/ + repo: https://github.com/robinmetral/gatsby-starter-oss + description: A Gatsby starter to showcase your open-source projects. tags: - - Onepage + - Portfolio + - Styling:Theme-UI - Styling:CSS-in-JS - - SEO + - Onepage - PWA + - SEO + - Testing + - Linting features: - - Configure everything in gatsby-config.js - - Creative CSS3 background patterns by Lea Verou - - Built-in Google Fonts support - - Social icons with react-social-icons + - 🐙🐈 Pull your pinned repos from GitHub + - 👩‍🎤 Style with Emotion + - ✨ Themeable with Theme UI + - 🚀 Powered by gatsby-theme-oss + - 💯 100/100 Lighthouse scores - url: https://gatsby-starter-docz.netlify.com/ repo: https://github.com/RobinCsl/gatsby-starter-docz description: Simple starter where building your own documentation with Docz is possible @@ -4411,7 +4429,7 @@ - HTML5UP - Styling:SCSS features: - - Kentico Kontent Caas plafrorm as the data source + - Kentico Kontent CaaS platform as the data source - Landing page divided by section. - Support for code syntax highlighting - Includes plugins for easy, beautiful typography @@ -5808,3 +5826,89 @@ - Includes React Helmet - Clean minimalist design - Completely customizable using only gatsby-config.js file +- url: https://builderio.github.io/gatsby-starter-builder/ + repo: https://github.com/BuilderIO/gatsby-starter-builder + description: Gatsby starter with drag + drop page building with your React components via Builder.io + tags: + - CMS:Other + - CMS:Headless + features: + - Builder.io integration with sample pages/header/footer. + - Drag and drop page editing and creations. + - Lots of built-in templates, widgets, or bring in your own custom components. + - Uses @builder.io/gatsby plugin to dynamically create pages published on the editor. + - SEO +- url: https://gatsby-starter-reason-blog.netlify.com/ + repo: https://github.com/mukul-rathi/gatsby-starter-reason-blog + description: The Gatsby Starter Blog using ReasonML! + tags: + - Blog + - Styling:CSS-in-JS + - Language:Other + features: + - Basic setup for a full-featured type-safe blog + - ReasonML support out-of-the-box + - ReasonReact v3 JSX syntax + - CSS-in-Reason support + - StaticQuery GraphQL support in ReasonML + - Similar to gatsby-starter-blog +- url: https://gatsby-ts-tw-styled-eslint.netlify.com + repo: https://github.com/Miloshinjo/gatsby-ts-tw-styled-eslint-starter + description: Gatsby starter with Typescript, TailwindCSS, @emotion/styled and eslint. + tags: + - Linting + - Styling:CSS-in-JS + - Styling:Tailwind + - Language:TypeScript + features: + - Typescript support + - CSS-in-JS with @emotion/styled (like styled components) + - TailwindCSS (1.2) support + - eslint with airbnb settings +- url: https://mik3y.github.io/gatsby-starter-basic-bootstrap/ + repo: https://github.com/mik3y/gatsby-starter-basic-bootstrap + description: A barebones starter featuring react-bootstrap and deliberately little else + tags: + - Styling:Bootstrap + - Styling:SCSS + features: + - Uses react-bootstrap, sass, and little else + - Skeleton starter, based on gatsby-starter-default + - Optional easy integration of themes from Bootswatch.com +- url: https://gatsby-starter-songc.netlify.com/ + repo: https://github.com/FFM-TEAM/gatsby-starter-song + description: A Gatsby starter for blog style with fresh UI. + tags: + - Blog + - Netlify + - SEO + - Language:TypeScript + - Styling:CSS-in-JS + features: + - Emoji (emojione) + - Code syntax highlighting (atom-one-light Style) + - Mobile friendly and fully responsive + - Comment feature ( utterances) + - Post side PostTOC + - Simple fresh design like Medium + - Readability +- url: https://gatsby-starter-kontent-lumen.netlify.com/ + repo: https://github.com/Kentico/gatsby-starter-kontent-lumen + description: A minimal, lightweight, and mobile-first starter for creating blogs uses Gatsby and Kentico Kontent CMS. Inspired by Lumen. + tags: + - SEO + - CMS:Headless + - CMS:Kontent + - Netlify + - Styling:SCSS + - Blog + features: + - Kentico Kontent CaaS platform as the data source. + - Mobile-First approach in development. + - Archive organized by tags and categories. + - Automatic Sitemap generation. + - Lost Grid. + - Beautiful typography inspired by matejlatin/Gutenberg. + - Stylesheet built using Sass and BEM-Style naming. + - Syntax highlighting in code blocks. + - Google Analytics support. diff --git a/docs/tutorial/seo-and-social-sharing-cards-tutorial/index.md b/docs/tutorial/seo-and-social-sharing-cards-tutorial/index.md index 607f026a74588..6a80451ab5f90 100644 --- a/docs/tutorial/seo-and-social-sharing-cards-tutorial/index.md +++ b/docs/tutorial/seo-and-social-sharing-cards-tutorial/index.md @@ -117,7 +117,7 @@ function SEO({ description, lang, meta }) { // highlight-start { name: "keywords", - content: data.site.siteMetadata.keywords.join(","), + content: site.siteMetadata.keywords.join(","), }, // highlight-end ]} @@ -176,7 +176,7 @@ function SEO({ description, lang, meta, image: metaImage, title }) { // highlight-start const image = metaImage && metaImage.src - ? `${data.site.siteMetadata.siteUrl}${metaImage.src}` + ? `${site.siteMetadata.siteUrl}${metaImage.src}` : null // highlight-end @@ -194,7 +194,7 @@ function SEO({ description, lang, meta, image: metaImage, title }) { }, { name: "keywords", - content: data.site.siteMetadata.keywords.join(","), + content: site.siteMetadata.keywords.join(","), }, { property: `og:title`, @@ -318,12 +318,10 @@ function SEO({ description, lang, meta, image: metaImage, title, pathname }) { const metaDescription = description || site.siteMetadata.description const image = metaImage && metaImage.src - ? `${data.site.siteMetadata.siteUrl}${metaImage.src}` + ? `${site.siteMetadata.siteUrl}${metaImage.src}` : null // highlight-start - const canonical = pathname - ? `${data.site.siteMetadata.siteUrl}${pathname}` - : null + const canonical = pathname ? `${site.siteMetadata.siteUrl}${pathname}` : null // highlight-end return ( @@ -352,7 +350,7 @@ function SEO({ description, lang, meta, image: metaImage, title, pathname }) { }, { name: "keywords", - content: data.site.siteMetadata.keywords.join(","), + content: site.siteMetadata.keywords.join(","), }, { property: `og:title`, diff --git a/integration-tests/gatsby-cli/__tests__/build.js b/integration-tests/gatsby-cli/__tests__/build.js index f33b4c551fad9..770b017d8fe7d 100644 --- a/integration-tests/gatsby-cli/__tests__/build.js +++ b/integration-tests/gatsby-cli/__tests__/build.js @@ -1,4 +1,4 @@ -import { GatsbyCLI, removeFolder } from "../test-helpers" +import { GatsbyCLI } from "../test-helpers" const MAX_TIMEOUT = 2147483647 jest.setTimeout(MAX_TIMEOUT) @@ -6,10 +6,8 @@ jest.setTimeout(MAX_TIMEOUT) describe(`gatsby build`, () => { const cwd = `gatsby-sites/gatsby-build` - beforeAll(() => removeFolder(`${cwd}/.cache`)) - beforeAll(() => removeFolder(`${cwd}/public`)) - afterAll(() => removeFolder(`${cwd}/.cache`)) - afterAll(() => removeFolder(`${cwd}/public`)) + beforeAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) + afterAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) it(`creates a built gatsby site`, () => { const [code, logs] = GatsbyCLI.from(cwd).invoke(`build`) diff --git a/integration-tests/gatsby-cli/__tests__/develop.js b/integration-tests/gatsby-cli/__tests__/develop.js index fcb412f38ef5c..2fadccac3a6d8 100644 --- a/integration-tests/gatsby-cli/__tests__/develop.js +++ b/integration-tests/gatsby-cli/__tests__/develop.js @@ -1,6 +1,4 @@ -import spawn from "cross-spawn" -import { GatsbyCLI, removeFolder } from "../test-helpers" -import strip from "strip-ansi" +import { GatsbyCLI } from "../test-helpers" const timeout = seconds => new Promise(resolve => { @@ -13,10 +11,8 @@ jest.setTimeout(MAX_TIMEOUT) describe(`gatsby develop`, () => { const cwd = `gatsby-sites/gatsby-develop` - beforeAll(() => removeFolder(`${cwd}/.cache`)) - beforeAll(() => removeFolder(`${cwd}/public`)) - afterAll(() => removeFolder(`${cwd}/.cache`)) - afterAll(() => removeFolder(`${cwd}/public`)) + beforeAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) + afterAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) it(`starts a gatsby site on port 8000`, async () => { // 1. Start the `gatsby develop` command @@ -25,17 +21,10 @@ describe(`gatsby develop`, () => { // 2. Wait for the build process to finish await timeout(10) - // 3. Get the process identifier for what is running on port 8000 - const res = spawn.sync("lsof", ["-i", ":8000", "-t"]) - const portPID = Number(/\d+/.exec(res.output?.toString())[0]) + // 3. kill the `gatsby develop` command so we can get logs + childProcess.kill() - // 4. kill the `gatsby develop` command so we can get logs - spawn.sync("kill", [childProcess.pid]) - - // 5. Make sure the process we started was the one on gatsby port - expect(portPID).toEqual(childProcess.pid) - - // 6. Make sure logs for the user contain expected results + // 4. Make sure logs for the user contain expected results const logs = getLogs() logs.should.contain(`success open and validate gatsby-configs`) logs.should.contain(`success load plugins`) @@ -55,16 +44,17 @@ describe(`gatsby develop`, () => { logs.should.contain(`success write out redirect data`) logs.should.contain(`success onPostBootstrap`) logs.should.contain(`info bootstrap finished`) - logs.should.contain( - `You can now view gatsby-starter-default in the browser.` - ) - logs.should.contain(`http://localhost:8000/`) - logs.should.contain( - `View GraphiQL, an in-browser IDE, to explore your site's data and schema` - ) - logs.should.contain(`http://localhost:8000/___graphql`) - logs.should.contain(`Note that the development build is not optimized.`) - logs.should.contain(`To create a production build, use gatsby build`) + // These don't fire in CI. Need to figure out how to make it work. Might not be possible + // logs.should.contain( + // `You can now view gatsby-starter-default in the browser.` + // ) + // logs.should.contain(`http://localhost:8000/`) + // logs.should.contain( + // `View GraphiQL, an in-browser IDE, to explore your site's data and schema` + // ) + // logs.should.contain(`http://localhost:8000/___graphql`) + // logs.should.contain(`Note that the development build is not optimized.`) + // logs.should.contain(`To create a production build, use gatsby build`) }) it.skip(`starts a gatsby site on port 9000 with -p 9000`, () => {}) diff --git a/integration-tests/gatsby-cli/__tests__/repl.js b/integration-tests/gatsby-cli/__tests__/repl.js new file mode 100644 index 0000000000000..8e0dbd0092775 --- /dev/null +++ b/integration-tests/gatsby-cli/__tests__/repl.js @@ -0,0 +1,51 @@ +import { GatsbyCLI } from "../test-helpers" + +const timeout = seconds => + new Promise(resolve => { + setTimeout(resolve, seconds * 1000) + }) + +const MAX_TIMEOUT = 2147483647 +jest.setTimeout(MAX_TIMEOUT) + +describe(`gatsby repl`, () => { + const cwd = `gatsby-sites/gatsby-repl` + + beforeAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) + afterAll(() => GatsbyCLI.from(cwd).invoke(`clean`)) + + it(`starts a gatsby site on port 8000`, async () => { + // 1. Start the `gatsby develop` command + const [childProcess, getLogs] = GatsbyCLI.from(cwd).invokeAsync(`repl`) + + // 2. Wait for the build process to finish + await timeout(4) + + // 3. Kill the repl + childProcess.kill() + + // 4. Make assertions + const logs = getLogs() + logs.should.contain(`success open and validate gatsby-configs`) + logs.should.contain(`success load plugins`) + logs.should.contain(`success onPreInit`) + logs.should.contain(`success initialize cache`) + logs.should.contain(`success copy gatsby files`) + logs.should.contain(`success onPreBootstrap`) + logs.should.contain(`success createSchemaCustomization`) + logs.should.contain(`success source and transform nodes`) + logs.should.contain(`success building schema`) + logs.should.contain(`success createPages`) + logs.should.contain(`success createPagesStatefully`) + logs.should.contain(`success onPreExtractQueries`) + logs.should.contain(`success update schema`) + logs.should.contain(`success extract queries from components`) + logs.should.contain(`success write out requires`) + logs.should.contain(`success write out redirect data`) + logs.should.contain(`success onPostBootstrap`) + logs.should.contain(`info bootstrap finished`) + + // This is the actual repl prompt + logs.should.contain(`gatsby >`) + }) +}) diff --git a/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/.gitignore b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/.gitignore new file mode 100644 index 0000000000000..f81327511eeb4 --- /dev/null +++ b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/.gitignore @@ -0,0 +1,69 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# dotenv environment variable files +.env* + +# gatsby files +.cache/ +public + +# Mac files +.DS_Store + +# Yarn +yarn-error.log +.pnp/ +.pnp.js +# Yarn Integrity file +.yarn-integrity diff --git a/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/package.json b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/package.json new file mode 100644 index 0000000000000..1ba3273f25386 --- /dev/null +++ b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/package.json @@ -0,0 +1,37 @@ +{ + "name": "gatsby-starter-default", + "private": true, + "description": "A simple starter to get up and developing quickly with Gatsby", + "version": "0.1.0", + "author": "Kyle Mathews ", + "dependencies": { + "gatsby": "^2.19.45", + "prop-types": "^15.7.2", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-helmet": "^5.2.1" + }, + "devDependencies": { + "prettier": "^1.19.1" + }, + "keywords": [ + "gatsby" + ], + "license": "MIT", + "scripts": { + "build": "gatsby build", + "develop": "gatsby develop", + "format": "prettier --write \"**/*.{js,jsx,json,md}\"", + "start": "npm run develop", + "serve": "gatsby serve", + "clean": "gatsby clean", + "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/gatsbyjs/gatsby-starter-default" + }, + "bugs": { + "url": "https://github.com/gatsbyjs/gatsby/issues" + } +} diff --git a/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/src/pages/index.js b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/src/pages/index.js new file mode 100644 index 0000000000000..cf671a42b39d9 --- /dev/null +++ b/integration-tests/gatsby-cli/gatsby-sites/gatsby-repl/src/pages/index.js @@ -0,0 +1,2 @@ +import React from "react" +export default () =>
    Hi
    diff --git a/package.json b/package.json index ea2313a66b456..70c0465e96888 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@types/lodash": "^4.14.149", "@types/node": "^12.12.30", "@types/node-fetch": "^2.5.5", + "@types/react": "^16.9.31", "@types/stack-trace": "^0.0.29", "@types/webpack": "^4.41.7", "@typescript-eslint/eslint-plugin": "^2.24.0", diff --git a/packages/gatsby-cli/CHANGELOG.md b/packages/gatsby-cli/CHANGELOG.md index 82a519cb8878c..a8392ff136ed7 100644 --- a/packages/gatsby-cli/CHANGELOG.md +++ b/packages/gatsby-cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.11.5](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.4...gatsby-cli@2.11.5) (2020-04-03) + +**Note:** Version bump only for package gatsby-cli + +## [2.11.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.3...gatsby-cli@2.11.4) (2020-04-01) + +**Note:** Version bump only for package gatsby-cli + ## [2.11.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.2...gatsby-cli@2.11.3) (2020-03-27) **Note:** Version bump only for package gatsby-cli diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index 4d4d57e5314a9..33c6763dd20f7 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-cli", "description": "Gatsby command-line interface for creating new sites and running Gatsby commands", - "version": "2.11.3", + "version": "2.11.5", "author": "Kyle Mathews ", "bin": { "gatsby": "lib/index.js" @@ -26,7 +26,7 @@ "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", "gatsby-core-utils": "^1.1.1", - "gatsby-telemetry": "^1.2.2", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "is-valid-path": "^0.1.1", "lodash": "^4.17.15", diff --git a/packages/gatsby-cli/src/structured-errors/__tests__/error-schema.ts b/packages/gatsby-cli/src/structured-errors/__tests__/error-schema.ts index d49787a1dc45a..a01e785f294b5 100644 --- a/packages/gatsby-cli/src/structured-errors/__tests__/error-schema.ts +++ b/packages/gatsby-cli/src/structured-errors/__tests__/error-schema.ts @@ -1,12 +1,12 @@ -import schema from "../error-schema" +import { errorSchema } from "../error-schema" test(`throws invalid on an invalid error`, () => { - expect(schema.validate({ lol: `true` })).rejects.toBeDefined() + expect(errorSchema.validate({ lol: `true` })).rejects.toBeDefined() }) test(`does not throw on a valid schema`, () => { expect( - schema.validate({ + errorSchema.validate({ context: {}, }) ).resolves.toEqual(expect.any(Object)) diff --git a/packages/gatsby-cli/src/structured-errors/construct-error.ts b/packages/gatsby-cli/src/structured-errors/construct-error.ts index 20f1db865b959..a53249b47c5fc 100644 --- a/packages/gatsby-cli/src/structured-errors/construct-error.ts +++ b/packages/gatsby-cli/src/structured-errors/construct-error.ts @@ -1,44 +1,8 @@ -import Joi from "@hapi/joi" import stackTrace from "stack-trace" -import errorSchema from "./error-schema" -import { errorMap, defaultError, IErrorMapEntry, ErrorId } from "./error-map" +import { errorSchema } from "./error-schema" +import { errorMap, defaultError, IErrorMapEntry } from "./error-map" import { sanitizeStructuredStackTrace } from "../reporter/errors" - -interface IConstructError { - details: { - id?: ErrorId - context?: Record - error?: Error - [key: string]: unknown - } -} - -interface ILocationPosition { - line: number - column: number -} - -interface IStructuredError { - code?: string - text: string - stack: { - fileName: string - functionName?: string - lineNumber?: number - columnNumber?: number - }[] - filePath?: string - location?: { - start: ILocationPosition - end?: ILocationPosition - } - error?: unknown - group?: string - level: IErrorMapEntry["level"] - type?: IErrorMapEntry["type"] - docsUrl?: string -} - +import { IConstructError, IStructuredError } from "./types" // Merge partial error details with information from the errorMap // Validate the constructed object against an error schema const constructError = ({ @@ -63,7 +27,7 @@ const constructError = ({ } // validate - const { error } = Joi.validate(structuredError, errorSchema) + const { error } = errorSchema.validate(structuredError) if (error !== null) { console.log(`Failed to validate error`, error) process.exit(1) diff --git a/packages/gatsby-cli/src/structured-errors/error-map.ts b/packages/gatsby-cli/src/structured-errors/error-map.ts index bc6c917ee7555..a3a56cc07a934 100644 --- a/packages/gatsby-cli/src/structured-errors/error-map.ts +++ b/packages/gatsby-cli/src/structured-errors/error-map.ts @@ -1,25 +1,5 @@ import { stripIndent, stripIndents } from "common-tags" - -interface IOptionalGraphQLInfoContext { - codeFrame?: string - filePath?: string - urlPath?: string - plugin?: string -} - -enum Level { - ERROR = `ERROR`, - WARNING = `WARNING`, - INFO = `INFO`, - DEBUG = `DEBUG`, -} - -enum Type { - GRAPHQL = `GRAPHQL`, - CONFIG = `CONFIG`, - WEBPACK = `WEBPACK`, - PLUGIN = `PLUGIN`, -} +import { IOptionalGraphQLInfoContext, Level, Type } from "./types" const optionalGraphQLInfo = (context: IOptionalGraphQLInfoContext): string => `${context.codeFrame ? `\n\n${context.codeFrame}` : ``}${ diff --git a/packages/gatsby-cli/src/structured-errors/error-schema.ts b/packages/gatsby-cli/src/structured-errors/error-schema.ts index a5de534971e91..ec14cfd6f65be 100644 --- a/packages/gatsby-cli/src/structured-errors/error-schema.ts +++ b/packages/gatsby-cli/src/structured-errors/error-schema.ts @@ -1,38 +1,39 @@ import Joi from "@hapi/joi" +import { ILocationPosition, IStructuredError } from "./types" -const Position = Joi.object().keys({ +export const Position: Joi.ObjectSchema = Joi.object().keys({ line: Joi.number(), column: Joi.number(), }) -const errorSchema = Joi.object().keys({ - code: Joi.string(), - text: Joi.string(), - stack: Joi.array() - .items( - Joi.object().keys({ - fileName: Joi.string(), - functionName: Joi.string().allow(null), - lineNumber: Joi.number().allow(null), - columnNumber: Joi.number().allow(null), - }) - ) - .allow(null), - level: Joi.string().valid([`ERROR`, `WARNING`, `INFO`, `DEBUG`]), - type: Joi.string().valid([`GRAPHQL`, `CONFIG`, `WEBPACK`, `PLUGIN`]), - filePath: Joi.string(), - location: Joi.object({ - start: Position.required(), - end: Position, - }), - docsUrl: Joi.string().uri({ - allowRelative: false, - relativeOnly: false, - }), - error: Joi.object({}).unknown(), - context: Joi.object({}).unknown(), - group: Joi.string(), - panicOnBuild: Joi.boolean(), -}) - -export default errorSchema +export const errorSchema: Joi.ObjectSchema = Joi.object().keys( + { + code: Joi.string(), + text: Joi.string(), + stack: Joi.array() + .items( + Joi.object().keys({ + fileName: Joi.string(), + functionName: Joi.string().allow(null), + lineNumber: Joi.number().allow(null), + columnNumber: Joi.number().allow(null), + }) + ) + .allow(null), + level: Joi.string().valid([`ERROR`, `WARNING`, `INFO`, `DEBUG`]), + type: Joi.string().valid([`GRAPHQL`, `CONFIG`, `WEBPACK`, `PLUGIN`]), + filePath: Joi.string(), + location: Joi.object({ + start: Position.required(), + end: Position, + }), + docsUrl: Joi.string().uri({ + allowRelative: false, + relativeOnly: false, + }), + error: Joi.object({}).unknown(), + context: Joi.object({}).unknown(), + group: Joi.string(), + panicOnBuild: Joi.boolean(), + } +) diff --git a/packages/gatsby-cli/src/structured-errors/types.ts b/packages/gatsby-cli/src/structured-errors/types.ts new file mode 100644 index 0000000000000..428620550433d --- /dev/null +++ b/packages/gatsby-cli/src/structured-errors/types.ts @@ -0,0 +1,57 @@ +import { IErrorMapEntry, ErrorId } from "./error-map" + +export interface IConstructError { + details: { + id?: ErrorId + context?: Record + error?: Error + [key: string]: unknown + } +} + +export interface ILocationPosition { + line: number + column: number +} + +export interface IStructuredError { + code?: string + text: string + stack: { + fileName: string + functionName?: string + lineNumber?: number + columnNumber?: number + }[] + filePath?: string + location?: { + start: ILocationPosition + end?: ILocationPosition + } + error?: unknown + group?: string + level: IErrorMapEntry["level"] + type?: IErrorMapEntry["type"] + docsUrl?: string +} + +export interface IOptionalGraphQLInfoContext { + codeFrame?: string + filePath?: string + urlPath?: string + plugin?: string +} + +export enum Level { + ERROR = `ERROR`, + WARNING = `WARNING`, + INFO = `INFO`, + DEBUG = `DEBUG`, +} + +export enum Type { + GRAPHQL = `GRAPHQL`, + CONFIG = `CONFIG`, + WEBPACK = `WEBPACK`, + PLUGIN = `PLUGIN`, +} diff --git a/packages/gatsby-image/CHANGELOG.md b/packages/gatsby-image/CHANGELOG.md index a7c4d57034abc..af91e3c96f100 100644 --- a/packages/gatsby-image/CHANGELOG.md +++ b/packages/gatsby-image/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-image@2.3.1...gatsby-image@2.3.2) (2020-04-07) + +### Bug Fixes + +- **gatsby-image:** apply IE polyfill styles to placeholder images too ([#22863](https://github.com/gatsbyjs/gatsby/issues/22863)) ([80c453e](https://github.com/gatsbyjs/gatsby/commit/80c453e)) + ## [2.3.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-image@2.3.0...gatsby-image@2.3.1) (2020-03-23) ### Bug Fixes diff --git a/packages/gatsby-image/package.json b/packages/gatsby-image/package.json index 190492b76c7cf..a739a4d9b629d 100644 --- a/packages/gatsby-image/package.json +++ b/packages/gatsby-image/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-image", "description": "Lazy-loading React image component with optional support for the blur-up effect.", - "version": "2.3.1", + "version": "2.3.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-image/src/index.js b/packages/gatsby-image/src/index.js index 5cbb09e7a72c8..8621fbfe83fb6 100644 --- a/packages/gatsby-image/src/index.js +++ b/packages/gatsby-image/src/index.js @@ -262,14 +262,12 @@ const noscriptImg = props => { // Earlier versions of gatsby-image during the 2.x cycle did not wrap // the `Img` component in a `picture` element. This maintains compatibility // until a breaking change can be introduced in the next major release -const Placeholder = ({ - src, - imageVariants, - generateSources, - spreadProps, - ariaHidden, -}) => { - const baseImage = +const Placeholder = React.forwardRef((props, ref) => { + const { src, imageVariants, generateSources, spreadProps, ariaHidden } = props + + const baseImage = ( + + ) return imageVariants.length > 1 ? ( @@ -279,7 +277,7 @@ const Placeholder = ({ ) : ( baseImage ) -} +}) const Img = React.forwardRef((props, ref) => { const { @@ -357,6 +355,7 @@ class Image extends React.Component { } this.imageRef = React.createRef() + this.placeholderRef = props.placeholderRef || React.createRef() this.handleImageLoaded = this.handleImageLoaded.bind(this) this.handleRef = this.handleRef.bind(this) } @@ -517,6 +516,7 @@ class Image extends React.Component { {image.base64 && ( + import(`object-fit-images`).then(({ default: ObjectFitImages }) => { ObjectFitImages(this.imageRef.current.imageRef.current) - ) + ObjectFitImages(this.placeholderRef.current) + }) } } render() { const { objectFit, objectPosition, ...props } = this.props + const polyfillStyle = { + objectFit: objectFit, + objectPosition: objectPosition, + fontFamily: `"object-fit: ${objectFit}; object-position: ${objectPosition}"`, + } + return ( ) diff --git a/packages/gatsby-link/CHANGELOG.md b/packages/gatsby-link/CHANGELOG.md index 8e7515a467ef4..4b56e33f9b6ed 100644 --- a/packages/gatsby-link/CHANGELOG.md +++ b/packages/gatsby-link/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-link@2.3.1...gatsby-link@2.3.2) (2020-04-03) + +### Bug Fixes + +- **gatsby-link:** drop custom innerRef typing and reuse one from @reach/router ([#22770](https://github.com/gatsbyjs/gatsby/issues/22770)) ([14b9605](https://github.com/gatsbyjs/gatsby/commit/14b9605)) + ## [2.3.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-link@2.3.0...gatsby-link@2.3.1) (2020-03-23) **Note:** Version bump only for package gatsby-link diff --git a/packages/gatsby-link/index.d.ts b/packages/gatsby-link/index.d.ts index 795ffa1361ab3..6792bdf51d765 100644 --- a/packages/gatsby-link/index.d.ts +++ b/packages/gatsby-link/index.d.ts @@ -6,7 +6,6 @@ export interface GatsbyLinkProps extends LinkProps { activeClassName?: string /** Inline styles for when this Link is active */ activeStyle?: object - innerRef?: Function onClick?: (event: React.MouseEvent) => void /** Class the link as highlighted if there is a partial match via a the `to` being prefixed to the current url */ partiallyActive?: boolean diff --git a/packages/gatsby-link/package.json b/packages/gatsby-link/package.json index 49a337820aa79..53f49ec41bb34 100644 --- a/packages/gatsby-link/package.json +++ b/packages/gatsby-link/package.json @@ -1,14 +1,14 @@ { "name": "gatsby-link", "description": "An enhanced Link component for Gatsby sites with support for resource prefetching", - "version": "2.3.1", + "version": "2.3.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" }, "dependencies": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" }, "devDependencies": { diff --git a/packages/gatsby-plugin-benchmark-reporting/CHANGELOG.md b/packages/gatsby-plugin-benchmark-reporting/CHANGELOG.md index e10dc0149ea9d..8fc88a0a12bf0 100644 --- a/packages/gatsby-plugin-benchmark-reporting/CHANGELOG.md +++ b/packages/gatsby-plugin-benchmark-reporting/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-benchmark-reporting@0.1.1...gatsby-plugin-benchmark-reporting@0.1.2) (2020-04-03) + +### Bug Fixes + +- **gatsby-plugin-benchmark-reporting:** Update pageCount to use NUM_PAGES ([#22766](https://github.com/gatsbyjs/gatsby/issues/22766)) ([b5b41a0](https://github.com/gatsbyjs/gatsby/commit/b5b41a0)) + ## [0.1.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-benchmark-reporting@0.1.0...gatsby-plugin-benchmark-reporting@0.1.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-benchmark-reporting diff --git a/packages/gatsby-plugin-benchmark-reporting/package.json b/packages/gatsby-plugin-benchmark-reporting/package.json index fe9f70ac6b54d..722e31b29bf94 100644 --- a/packages/gatsby-plugin-benchmark-reporting/package.json +++ b/packages/gatsby-plugin-benchmark-reporting/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-benchmark-reporting", "description": "Gatsby Benchmark Reporting", - "version": "0.1.1", + "version": "0.1.2", "author": "Peter van der Zee ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-benchmark-reporting/src/gatsby-node.js b/packages/gatsby-plugin-benchmark-reporting/src/gatsby-node.js index 7e08286af4645..41635f2e006c9 100644 --- a/packages/gatsby-plugin-benchmark-reporting/src/gatsby-node.js +++ b/packages/gatsby-plugin-benchmark-reporting/src/gatsby-node.js @@ -157,11 +157,6 @@ class BenchMeta { `find public .cache -type f -iname "*.bmp" -or -iname "*.tif" -or -iname "*.webp" -or -iname "*.svg" | wc -l` ) - const pageCount = glob(`**/**.json`, { - cwd: `./public/page-data`, - nocase: true, - }).length - const benchmarkMetadata = this.getMetadata() return { @@ -181,7 +176,7 @@ class BenchMeta { webpack: webpackVersion, }, counts: { - pages: pageCount, + pages: parseInt(process.env.NUM_PAGES), jpgs: jpgCount, pngs: pngCount, gifs: gifCount, diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index 07e341bfbd189..e9fe9d76cb9ca 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.0.0](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-google-gtag@1.2.1...gatsby-plugin-google-gtag@2.0.0) (2020-04-01) + +### Bug Fixes + +- **gatsby-plugin-google-gtag:** OutboundLink Forward Ref ([#22705](https://github.com/gatsbyjs/gatsby/issues/22705)) ([7a4db4b](https://github.com/gatsbyjs/gatsby/commit/7a4db4b)) + ## [1.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-google-gtag@1.2.0...gatsby-plugin-google-gtag@1.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-google-gtag diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index d2948108648af..81e834d2b89d2 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.2.1", + "version": "2.0.0", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-google-gtag/src/index.js b/packages/gatsby-plugin-google-gtag/src/index.js index 8be786d406d73..455ba289465c6 100644 --- a/packages/gatsby-plugin-google-gtag/src/index.js +++ b/packages/gatsby-plugin-google-gtag/src/index.js @@ -1,50 +1,51 @@ import React from "react" import PropTypes from "prop-types" -function OutboundLink(props) { - return ( -
    { - if (typeof props.onClick === `function`) { - props.onClick(e) - } - let redirect = true - if ( - e.button !== 0 || - e.altKey || - e.ctrlKey || - e.metaKey || - e.shiftKey || - e.defaultPrevented - ) { - redirect = false - } - if (props.target && props.target.toLowerCase() !== `_self`) { - redirect = false - } - if (window.gtag) { - window.gtag(`event`, `click`, { - event_category: `outbound`, - event_label: props.href, - transport_type: redirect ? `beacon` : ``, - event_callback: function() { - if (redirect) { - document.location = props.href - } - }, - }) - } else { - if (redirect) { - document.location = props.href - } +const OutboundLink = React.forwardRef(({ children, ...props }, ref) => ( + { + if (typeof props.onClick === `function`) { + props.onClick(e) + } + let redirect = true + if ( + e.button !== 0 || + e.altKey || + e.ctrlKey || + e.metaKey || + e.shiftKey || + e.defaultPrevented + ) { + redirect = false + } + if (props.target && props.target.toLowerCase() !== `_self`) { + redirect = false + } + if (window.gtag) { + window.gtag(`event`, `click`, { + event_category: `outbound`, + event_label: props.href, + transport_type: redirect ? `beacon` : ``, + event_callback: function() { + if (redirect) { + document.location = props.href + } + }, + }) + } else { + if (redirect) { + document.location = props.href } + } - return false - }} - /> - ) -} + return false + }} + > + {children} + +)) OutboundLink.propTypes = { href: PropTypes.string, diff --git a/packages/gatsby-plugin-mdx/CHANGELOG.md b/packages/gatsby-plugin-mdx/CHANGELOG.md index c65fee889e0d3..4e2e592fd360b 100644 --- a/packages/gatsby-plugin-mdx/CHANGELOG.md +++ b/packages/gatsby-plugin-mdx/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.6](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-mdx@1.1.5...gatsby-plugin-mdx@1.1.6) (2020-04-07) + +### Bug Fixes + +- **gatsby-plugin-mdx:** pass on proper `modules` option value to babel ([#22903](https://github.com/gatsbyjs/gatsby/issues/22903)) ([cd120ae](https://github.com/gatsbyjs/gatsby/commit/cd120ae)) + +## [1.1.5](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-mdx@1.1.4...gatsby-plugin-mdx@1.1.5) (2020-04-07) + +**Note:** Version bump only for package gatsby-plugin-mdx + ## [1.1.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-mdx@1.1.3...gatsby-plugin-mdx@1.1.4) (2020-03-30) **Note:** Version bump only for package gatsby-plugin-mdx diff --git a/packages/gatsby-plugin-mdx/README.md b/packages/gatsby-plugin-mdx/README.md index 9006023a3980d..e84135696b459 100644 --- a/packages/gatsby-plugin-mdx/README.md +++ b/packages/gatsby-plugin-mdx/README.md @@ -52,7 +52,7 @@ MDX seeks to make writing with Markdown and JSX simpler while being more express Install with npm: ```shell -npm install --save gatsby-plugin-mdx @mdx-js/mdx @mdx-js/react +npm install gatsby-plugin-mdx @mdx-js/mdx @mdx-js/react ``` Install with yarn: @@ -335,6 +335,7 @@ images can be optimized by Gatsby and you should continue using it. // gatsby-config.js module.exports = { plugins: [ + `gatsby-remark-images`, { resolve: `gatsby-plugin-mdx`, options: { @@ -358,6 +359,8 @@ Using a string reference is also supported for `gatsbyRemarkPlugins`. gatsbyRemarkPlugins: [`gatsby-remark-images`] ``` +> Note that in the case of `gatsby-remark-images` the plugin needs to be included as both a sub-plugin of gatsby-plugin-mdx and a string entry in the plugins array. + #### Remark plugins This is a configuration option that is [mirrored from the core MDX diff --git a/packages/gatsby-plugin-mdx/package.json b/packages/gatsby-plugin-mdx/package.json index 1507840fabddb..c4dd73eed21c9 100644 --- a/packages/gatsby-plugin-mdx/package.json +++ b/packages/gatsby-plugin-mdx/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-mdx", - "version": "1.1.4", + "version": "1.1.6", "description": "MDX integration for Gatsby", "main": "index.js", "license": "MIT", diff --git a/packages/gatsby-plugin-mdx/utils/gen-mdx.js b/packages/gatsby-plugin-mdx/utils/gen-mdx.js index 8e51b88dee1dd..fc6fbd4b3ef3d 100644 --- a/packages/gatsby-plugin-mdx/utils/gen-mdx.js +++ b/packages/gatsby-plugin-mdx/utils/gen-mdx.js @@ -150,7 +150,7 @@ ${code}` { useBuiltIns: `entry`, corejs: 2, - modules: `false`, + modules: false, }, ], ], diff --git a/packages/gatsby-plugin-sharp/CHANGELOG.md b/packages/gatsby-plugin-sharp/CHANGELOG.md index 17fab3de9ac25..998bd83212386 100644 --- a/packages/gatsby-plugin-sharp/CHANGELOG.md +++ b/packages/gatsby-plugin-sharp/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.5.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-sharp@2.5.3...gatsby-plugin-sharp@2.5.4) (2020-04-04) + +### Bug Fixes + +- **dependencies:** bump potrace version ([#22803](https://github.com/gatsbyjs/gatsby/issues/22803)) ([7a8f016](https://github.com/gatsbyjs/gatsby/commit/7a8f016)) + ## [2.5.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-sharp@2.5.2...gatsby-plugin-sharp@2.5.3) (2020-03-24) ### Bug Fixes diff --git a/packages/gatsby-plugin-sharp/package.json b/packages/gatsby-plugin-sharp/package.json index e587f27ffe2c9..027a527dc10c4 100644 --- a/packages/gatsby-plugin-sharp/package.json +++ b/packages/gatsby-plugin-sharp/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sharp", "description": "Wrapper of the Sharp image manipulation library for Gatsby plugins", - "version": "2.5.3", + "version": "2.5.4", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -19,7 +19,7 @@ "imagemin-webp": "^5.1.0", "lodash": "^4.17.15", "mini-svg-data-uri": "^1.1.3", - "potrace": "^2.1.2", + "potrace": "^2.1.5", "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", diff --git a/packages/gatsby-plugin-twitter/CHANGELOG.md b/packages/gatsby-plugin-twitter/CHANGELOG.md index 77be9f42196cc..5b2d713b71a01 100644 --- a/packages/gatsby-plugin-twitter/CHANGELOG.md +++ b/packages/gatsby-plugin-twitter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-twitter@2.2.1...gatsby-plugin-twitter@2.2.2) (2020-04-07) + +**Note:** Version bump only for package gatsby-plugin-twitter + ## [2.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-twitter@2.2.0...gatsby-plugin-twitter@2.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-twitter diff --git a/packages/gatsby-plugin-twitter/README.md b/packages/gatsby-plugin-twitter/README.md index f725fa9fda08a..5048cf676c868 100644 --- a/packages/gatsby-plugin-twitter/README.md +++ b/packages/gatsby-plugin-twitter/README.md @@ -3,16 +3,22 @@ Loads the Twitter JavaScript for embedding tweets, timelines, share and follow buttons. Lets you add tweets to markdown and in other places. -Note: when copying the embed code, just copy the blockquote section and not the -script. - ## Install -`npm install --save gatsby-plugin-twitter` +```shell +npm install gatsby-plugin-twitter +``` -## How to use +## Configure ```javascript // In your gatsby-config.js plugins: [`gatsby-plugin-twitter`] ``` + +## How to Use + +1. On Twitter, find the tweet you'd like to display. +2. In the top right-hand corner of the tweet, click the caret (∨) and select "Embed tweet". +3. Take the code you're given and copy it into your markdown page. + > Note: when copying the embed code, copy **only** the blockquote section and not the script. diff --git a/packages/gatsby-plugin-twitter/package.json b/packages/gatsby-plugin-twitter/package.json index ef0dcea8bec8a..ab8b56a7c76b4 100644 --- a/packages/gatsby-plugin-twitter/package.json +++ b/packages/gatsby-plugin-twitter/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-twitter", "description": "Loads the Twitter JavaScript for embedding tweets.", - "version": "2.2.1", + "version": "2.2.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-remark-images/CHANGELOG.md b/packages/gatsby-remark-images/CHANGELOG.md index 673ea825e697b..8405ec81cbbff 100644 --- a/packages/gatsby-remark-images/CHANGELOG.md +++ b/packages/gatsby-remark-images/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-images@3.2.1...gatsby-remark-images@3.2.2) (2020-04-04) + +### Bug Fixes + +- **dependencies:** bump potrace version ([#22803](https://github.com/gatsbyjs/gatsby/issues/22803)) ([7a8f016](https://github.com/gatsbyjs/gatsby/commit/7a8f016)) + ## [3.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-images@3.2.0...gatsby-remark-images@3.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-remark-images diff --git a/packages/gatsby-remark-images/package.json b/packages/gatsby-remark-images/package.json index 7d5bb8cc7735d..df78afdc06090 100644 --- a/packages/gatsby-remark-images/package.json +++ b/packages/gatsby-remark-images/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-images", "description": "Processes images in markdown so they can be used in the production build.", - "version": "3.2.1", + "version": "3.2.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "is-relative-url": "^3.0.0", "lodash": "^4.17.15", "mdast-util-definitions": "^1.2.5", - "potrace": "^2.1.2", + "potrace": "^2.1.5", "query-string": "^6.11.1", "unist-util-select": "^1.5.0", "unist-util-visit-parents": "^2.1.2" diff --git a/packages/gatsby-source-contentful/CHANGELOG.md b/packages/gatsby-source-contentful/CHANGELOG.md index f78238fc00251..8770dad513b03 100644 --- a/packages/gatsby-source-contentful/CHANGELOG.md +++ b/packages/gatsby-source-contentful/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-contentful@2.2.6...gatsby-source-contentful@2.2.7) (2020-04-04) + +**Note:** Version bump only for package gatsby-source-contentful + +## [2.2.6](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-contentful@2.2.5...gatsby-source-contentful@2.2.6) (2020-04-03) + +### Bug Fixes + +- **gatsby-source-contentful:** use request url for base64 image cache key ([#22745](https://github.com/gatsbyjs/gatsby/issues/22745)) ([cfd2384](https://github.com/gatsbyjs/gatsby/commit/cfd2384)) + ## [2.2.5](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-contentful@2.2.4...gatsby-source-contentful@2.2.5) (2020-03-26) ### Performance Improvements diff --git a/packages/gatsby-source-contentful/package.json b/packages/gatsby-source-contentful/package.json index 5971ff12bd2d7..e234d60fbb66e 100644 --- a/packages/gatsby-source-contentful/package.json +++ b/packages/gatsby-source-contentful/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-contentful", "description": "Gatsby source plugin for building websites using the Contentful CMS as a data source", - "version": "2.2.5", + "version": "2.2.7", "author": "Marcus Ericsson (mericsson.com)", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -18,7 +18,7 @@ "deep-map": "^1.5.0", "fs-extra": "^8.1.0", "gatsby-core-utils": "^1.1.1", - "gatsby-plugin-sharp": "^2.5.3", + "gatsby-plugin-sharp": "^2.5.4", "gatsby-source-filesystem": "^2.2.2", "is-online": "^8.2.1", "json-stringify-safe": "^5.0.1", diff --git a/packages/gatsby-source-contentful/src/extend-node-type.js b/packages/gatsby-source-contentful/src/extend-node-type.js index ef7ad9ce43d69..ef1560221e431 100644 --- a/packages/gatsby-source-contentful/src/extend-node-type.js +++ b/packages/gatsby-source-contentful/src/extend-node-type.js @@ -55,7 +55,7 @@ const getBase64Image = imageProps => { // Note: sha1 is unsafe for crypto but okay for this particular case const shasum = crypto.createHash(`sha1`) - shasum.update(`requestUrl`) + shasum.update(requestUrl) const urlSha = shasum.digest(`hex`) // TODO: Find the best place for this step. This is definitely not it. diff --git a/packages/gatsby-source-graphql/CHANGELOG.md b/packages/gatsby-source-graphql/CHANGELOG.md index 44fe6c58a11b9..c2cd2581bccb6 100644 --- a/packages/gatsby-source-graphql/CHANGELOG.md +++ b/packages/gatsby-source-graphql/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.3.1...gatsby-source-graphql@2.3.2) (2020-04-06) + +### Bug Fixes + +- **gatsby-source-graphql:** Convert ts to plain js until better times ([#22848](https://github.com/gatsbyjs/gatsby/issues/22848)) ([ad945ec](https://github.com/gatsbyjs/gatsby/commit/ad945ec)) + +## [2.3.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.3.0...gatsby-source-graphql@2.3.1) (2020-04-03) + +**Note:** Version bump only for package gatsby-source-graphql + # [2.3.0](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.2.1...gatsby-source-graphql@2.3.0) (2020-03-25) ### Features diff --git a/packages/gatsby-source-graphql/README.md b/packages/gatsby-source-graphql/README.md index 01c7489664930..138bad905823a 100644 --- a/packages/gatsby-source-graphql/README.md +++ b/packages/gatsby-source-graphql/README.md @@ -26,7 +26,7 @@ module.exports = { // Field under which the remote schema will be accessible. You'll use this in your Gatsby query fieldName: "swapi", // Url to query from - url: "https://api.graphcms.com/simple/v1/swapi", + url: "https://swapi-graphql.netlify.com/.netlify/functions/index", }, }, diff --git a/packages/gatsby-source-graphql/package.json b/packages/gatsby-source-graphql/package.json index 3c1f66d577221..1345e4e467375 100644 --- a/packages/gatsby-source-graphql/package.json +++ b/packages/gatsby-source-graphql/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-graphql", "description": "Gatsby plugin which adds a third-party GraphQL API to Gatsby GraphQL", - "version": "2.3.0", + "version": "2.3.2", "author": "Mikhail Novikov ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.ts b/packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.js similarity index 89% rename from packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.ts rename to packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.js index fa025e36c09fb..a60879a366ee4 100644 --- a/packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.ts +++ b/packages/gatsby-source-graphql/src/batching/__tests__/dataloader-link.js @@ -1,14 +1,13 @@ -import { parse } from "graphql" -import { execute } from "apollo-link" -import { createDataloaderLink } from "../dataloader-link" +const { parse } = require(`graphql`) +const { execute } = require(`apollo-link`) +const { createDataloaderLink } = require(`../dataloader-link`) const sampleQuery = parse(`{ foo }`) const expectedSampleQueryResult = { data: { foo: `bar` } } -// eslint-disable-next-line @typescript-eslint/camelcase const fetchResult = { data: { gatsby0_foo: `bar` } } -const makeFetch = (expectedResult: any = fetchResult): jest.Mock => +const makeFetch = (expectedResult = fetchResult) => jest.fn(() => Promise.resolve({ json: () => Promise.resolve(expectedResult), @@ -23,7 +22,7 @@ describe(`createDataloaderLink`, () => { }) const observable = execute(link, { query: sampleQuery }) observable.subscribe({ - next: (result: any) => { + next: result => { expect(result).toEqual(expectedSampleQueryResult) done() }, diff --git a/packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.ts b/packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.js similarity index 95% rename from packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.ts rename to packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.js index bcf6654c849f0..faa52143c0ebf 100644 --- a/packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.ts +++ b/packages/gatsby-source-graphql/src/batching/__tests__/merge-queries.js @@ -1,5 +1,5 @@ -import { print, parse } from "graphql" -import { IQuery, merge, resolveResult } from "../merge-queries" +const { print, parse } = require(`graphql`) +const { merge, resolveResult } = require(`../merge-queries`) describe(`Query merging`, () => { it(`merges simple queries`, () => { @@ -213,7 +213,7 @@ describe(`Resolving merged query results`, () => { }) it(`throws on unexpected results`, () => { - const shouldThrow = (): void => { + const shouldThrow = () => { resolveResult({ data: { gatsby0_foo: `foo`, @@ -225,10 +225,8 @@ describe(`Resolving merged query results`, () => { }) }) -type QueryFixture = [string, object] - -function fromFixtures(fixtures: QueryFixture[]): IQuery[] { - return fixtures.map(([query, variables]: QueryFixture) => { +function fromFixtures(fixtures) { + return fixtures.map(([query, variables]) => { return { query: parse(query), variables, diff --git a/packages/gatsby-source-graphql/src/batching/dataloader-link.ts b/packages/gatsby-source-graphql/src/batching/dataloader-link.js similarity index 67% rename from packages/gatsby-source-graphql/src/batching/dataloader-link.ts rename to packages/gatsby-source-graphql/src/batching/dataloader-link.js index 87895e3ace8df..8967befce06ae 100644 --- a/packages/gatsby-source-graphql/src/batching/dataloader-link.ts +++ b/packages/gatsby-source-graphql/src/batching/dataloader-link.js @@ -1,22 +1,14 @@ -import DataLoader from "dataloader" -import { ApolloLink, Observable, Operation, FetchResult } from "apollo-link" -import { print } from "graphql" -import { IQuery, IQueryResult, merge, resolveResult } from "./merge-queries" +const DataLoader = require(`dataloader`) +const { ApolloLink, Observable } = require(`apollo-link`) +const { print } = require(`graphql`) +const { merge, resolveResult } = require(`./merge-queries`) -interface IOptions { - uri: string - fetch: Function - fetchOptions?: object - dataLoaderOptions?: object - headers?: object -} - -export function createDataloaderLink(options: IOptions): ApolloLink { - const load = async (keys: ReadonlyArray): Promise => { +export function createDataloaderLink(options) { + const load = async keys => { const query = merge(keys) - const result: object = await request(query, options) + const result = await request(query, options) if (!isValidGraphQLResult(result)) { - const error: any = new Error( + const error = new Error( `Failed to load query batch:\n${formatErrors(result)}` ) error.name = `GraphQLError` @@ -34,12 +26,12 @@ export function createDataloaderLink(options: IOptions): ApolloLink { const dataloader = new DataLoader(load, { cache: false, maxBatchSize, - batchScheduleFn: (callback): any => setTimeout(callback, 50), + batchScheduleFn: callback => setTimeout(callback, 50), ...options.dataLoaderOptions, }) return new ApolloLink( - (operation: Operation): Observable => + operation => new Observable(observer => { const { query, variables } = operation @@ -61,7 +53,7 @@ export function createDataloaderLink(options: IOptions): ApolloLink { ) } -function formatErrors(result: any): string { +function formatErrors(result) { if (result?.errors?.length > 0) { return result.errors .map(error => { @@ -75,7 +67,7 @@ function formatErrors(result: any): string { return `Unexpected GraphQL result` } -function isValidGraphQLResult(response): response is IQueryResult { +function isValidGraphQLResult(response) { return ( response && response.data && @@ -83,7 +75,7 @@ function isValidGraphQLResult(response): response is IQueryResult { ) } -async function request(query: IQuery, options: IOptions): Promise { +async function request(query, options) { const { uri, headers = {}, fetch, fetchOptions } = options const body = JSON.stringify({ diff --git a/packages/gatsby-source-graphql/src/batching/merge-queries.ts b/packages/gatsby-source-graphql/src/batching/merge-queries.js similarity index 68% rename from packages/gatsby-source-graphql/src/batching/merge-queries.ts rename to packages/gatsby-source-graphql/src/batching/merge-queries.js index 3f1229b836792..85474b9cbf2e1 100644 --- a/packages/gatsby-source-graphql/src/batching/merge-queries.ts +++ b/packages/gatsby-source-graphql/src/batching/merge-queries.js @@ -1,35 +1,9 @@ -import { - visit, - visitInParallel, - Kind, - DocumentNode, - VariableNode, - SelectionNode, - FragmentSpreadNode, - FragmentDefinitionNode, - InlineFragmentNode, - FieldNode, - NameNode, - OperationDefinitionNode, - Visitor, - ASTKindToNode, - VariableDefinitionNode, - DirectiveNode, -} from "graphql" -import _ from "lodash" - -export interface IQuery { - query: DocumentNode - variables: object -} - -export interface IQueryResult { - data: object -} +const { visit, visitInParallel, Kind } = require(`graphql`) +const _ = require(`lodash`) const Prefix = { - create: (index: number): string => `gatsby${index}_`, - parseKey: (prefixedKey: string): { index: number; originalKey: string } => { + create: index => `gatsby${index}_`, + parseKey: prefixedKey => { const match = /^gatsby([\d]+)_(.*)$/.exec(prefixedKey) if (!match || match.length !== 3 || isNaN(Number(match[1])) || !match[2]) { throw new Error(`Unexpected data key: ${prefixedKey}`) @@ -74,13 +48,13 @@ const Prefix = { * } * fragment FooQuery on Query { baz } */ -export function merge(queries: ReadonlyArray): IQuery { - const mergedVariables: object = {} - const mergedVariableDefinitions: VariableDefinitionNode[] = [] - const mergedSelections: SelectionNode[] = [] - const mergedFragmentMap: Map = new Map() +export function merge(queries) { + const mergedVariables = {} + const mergedVariableDefinitions = [] + const mergedSelections = [] + const mergedFragmentMap = new Map() - queries.forEach((query: IQuery, index: number) => { + queries.forEach((query, index) => { const prefixedQuery = prefixQueryParts(Prefix.create(index), query) prefixedQuery.query.definitions.forEach(def => { @@ -99,7 +73,7 @@ export function merge(queries: ReadonlyArray): IQuery { Object.assign(mergedVariables, prefixedQuery.variables) }) - const mergedQueryDefinition: OperationDefinitionNode = { + const mergedQueryDefinition = { kind: Kind.OPERATION_DEFINITION, operation: `query`, variableDefinitions: mergedVariableDefinitions, @@ -121,72 +95,60 @@ export function merge(queries: ReadonlyArray): IQuery { /** * Split and transform result of the query produced by the `merge` function */ -export function resolveResult(mergedQueryResult: IQueryResult): IQueryResult[] { +export function resolveResult(mergedQueryResult) { const data = mergedQueryResult.data - return Object.keys(data).reduce( - (acc: IQueryResult[], prefixedKey: string): IQueryResult[] => { - const { index, originalKey } = Prefix.parseKey(prefixedKey) - if (!acc[index]) acc[index] = { data: {} } - acc[index].data[originalKey] = data[prefixedKey] - return acc - }, - [] - ) + return Object.keys(data).reduce((acc, prefixedKey) => { + const { index, originalKey } = Prefix.parseKey(prefixedKey) + if (!acc[index]) acc[index] = { data: {} } + acc[index].data[originalKey] = data[prefixedKey] + return acc + }, []) } const Visitors = { - detectFragmentsWithVariables: ( - fragmentsWithVariables: Set - ): Visitor => { + detectFragmentsWithVariables: fragmentsWithVariables => { let currentFragmentName return { [Kind.FRAGMENT_DEFINITION]: { - enter: (def: FragmentDefinitionNode): void => { + enter: def => { currentFragmentName = def.name.value }, - leave: (): void => { + leave: () => { currentFragmentName = null }, }, - [Kind.VARIABLE]: (): void => { + [Kind.VARIABLE]: () => { if (currentFragmentName) { fragmentsWithVariables.add(currentFragmentName) } }, } }, - prefixVariables: (prefix: string): Visitor => { + prefixVariables: prefix => { return { - [Kind.VARIABLE]: (variable: VariableNode): VariableNode => - prefixNodeName(variable, prefix), + [Kind.VARIABLE]: variable => prefixNodeName(variable, prefix), } }, - prefixFragmentNames: ( - prefix: string, - fragmentNames: Set - ): Visitor => { + prefixFragmentNames: (prefix, fragmentNames) => { return { - [Kind.FRAGMENT_DEFINITION]: ( - def: FragmentDefinitionNode - ): FragmentDefinitionNode | void => + [Kind.FRAGMENT_DEFINITION]: def => fragmentNames.has(def.name.value) ? prefixNodeName(def, prefix) : def, - - [Kind.FRAGMENT_SPREAD]: (def: FragmentSpreadNode): FragmentSpreadNode => + [Kind.FRAGMENT_SPREAD]: def => fragmentNames.has(def.name.value) ? prefixNodeName(def, prefix) : def, } }, } -function prefixQueryParts(prefix: string, query: IQuery): IQuery { - let document: DocumentNode = aliasTopLevelFields(prefix, query.query) +function prefixQueryParts(prefix, query) { + let document = aliasTopLevelFields(prefix, query.query) const variableNames = Object.keys(query.variables) if (variableNames.length === 0) { return { ...query, query: document } } - const fragmentsWithVariables: Set = new Set() + const fragmentsWithVariables = new Set() document = visit( document, @@ -211,7 +173,7 @@ function prefixQueryParts(prefix: string, query: IQuery): IQuery { [Kind.INLINE_FRAGMENT]: [`selectionSet`], [Kind.FIELD]: [`selectionSet`], [Kind.SELECTION_SET]: [`selections`], - } as any + } ) } @@ -231,9 +193,9 @@ function prefixQueryParts(prefix: string, query: IQuery): IQuery { * * @see aliasFieldsInSelection for implementation details */ -function aliasTopLevelFields(prefix: string, doc: DocumentNode): DocumentNode { +function aliasTopLevelFields(prefix, doc) { const transformer = { - [Kind.OPERATION_DEFINITION]: (def): OperationDefinitionNode => { + [Kind.OPERATION_DEFINITION]: def => { const { selections } = def.selectionSet return { ...def, @@ -244,7 +206,7 @@ function aliasTopLevelFields(prefix: string, doc: DocumentNode): DocumentNode { } }, } - return visit(doc, transformer, { [Kind.DOCUMENT]: [`definitions`] } as any) + return visit(doc, transformer, { [Kind.DOCUMENT]: [`definitions`] }) } /** @@ -267,26 +229,18 @@ function aliasTopLevelFields(prefix: string, doc: DocumentNode): DocumentNode { * ... on Query { gatsby1_bar: bar } * } */ -function aliasFieldsInSelection( - prefix: string, - selections: ReadonlyArray, - document: DocumentNode -): SelectionNode[] { - return _.flatMap(selections, (selection: SelectionNode): SelectionNode[] => { +function aliasFieldsInSelection(prefix, selections, document) { + return _.flatMap(selections, selection => { switch (selection.kind) { case Kind.INLINE_FRAGMENT: return [aliasFieldsInInlineFragment(prefix, selection, document)] - case Kind.FRAGMENT_SPREAD: { const inlineFragment = inlineFragmentSpread(selection, document) return [ addSkipDirective(selection), aliasFieldsInInlineFragment(prefix, inlineFragment, document), - // Keep original spread in selection with @skip(if: true) - // otherwise if this was a single fragment usage the query will fail validation ] } - case Kind.FIELD: default: return [aliasField(selection, prefix)] @@ -294,12 +248,8 @@ function aliasFieldsInSelection( }) } -interface INodeWithDirectives { - readonly directives?: ReadonlyArray -} - -function addSkipDirective(node: T): T { - const skipDirective: DirectiveNode = { +function addSkipDirective(node) { + const skipDirective = { kind: Kind.DIRECTIVE, name: { kind: Kind.NAME, value: `skip` }, arguments: [ @@ -325,11 +275,7 @@ function addSkipDirective(node: T): T { * To * ... on Query { gatsby1_foo: foo, ... on Query { gatsby1_bar: foo } } */ -function aliasFieldsInInlineFragment( - prefix: string, - fragment: InlineFragmentNode, - document: DocumentNode -): InlineFragmentNode { +function aliasFieldsInInlineFragment(prefix, fragment, document) { const { selections } = fragment.selectionSet return { ...fragment, @@ -350,10 +296,7 @@ function aliasFieldsInInlineFragment( * Transforms to: * query { ... on Query { bar } } */ -function inlineFragmentSpread( - spread: FragmentSpreadNode, - document: DocumentNode -): InlineFragmentNode { +function inlineFragmentSpread(spread, document) { const fragment = document.definitions.find( def => def.kind === Kind.FRAGMENT_DEFINITION && @@ -362,8 +305,7 @@ function inlineFragmentSpread( if (!fragment) { throw new Error(`Fragment ${spread.name.value} does not exist`) } - const { typeCondition, selectionSet } = fragment as FragmentDefinitionNode - + const { typeCondition, selectionSet } = fragment return { kind: Kind.INLINE_FRAGMENT, typeCondition, @@ -372,10 +314,7 @@ function inlineFragmentSpread( } } -function prefixNodeName( - namedNode: T, - prefix: string -): T { +function prefixNodeName(namedNode, prefix) { return { ...namedNode, name: { @@ -392,7 +331,7 @@ function prefixNodeName( * { foo } -> { gatsby1_foo: foo } * { foo: bar } -> { gatsby1_foo: bar } */ -function aliasField(field: FieldNode, aliasPrefix: string): FieldNode { +function aliasField(field, aliasPrefix) { const aliasNode = field.alias ? field.alias : field.name return { ...field, @@ -403,10 +342,10 @@ function aliasField(field: FieldNode, aliasPrefix: string): FieldNode { } } -function isQueryDefinition(def): def is OperationDefinitionNode { +function isQueryDefinition(def) { return def.kind === Kind.OPERATION_DEFINITION && def.operation === `query` } -function isFragmentDefinition(def): def is FragmentDefinitionNode { +function isFragmentDefinition(def) { return def.kind === Kind.FRAGMENT_DEFINITION } diff --git a/packages/gatsby-telemetry/CHANGELOG.md b/packages/gatsby-telemetry/CHANGELOG.md index 66d9aa824e890..25cc177090c84 100644 --- a/packages/gatsby-telemetry/CHANGELOG.md +++ b/packages/gatsby-telemetry/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-telemetry@1.2.2...gatsby-telemetry@1.2.3) (2020-04-01) + +### Bug Fixes + +- **telemetry:** fix isTrackingEnabled always truthy ([#22613](https://github.com/gatsbyjs/gatsby/issues/22613)) ([5aaf296](https://github.com/gatsbyjs/gatsby/commit/5aaf296)), closes [#22531](https://github.com/gatsbyjs/gatsby/issues/22531) + ## [1.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-telemetry@1.2.1...gatsby-telemetry@1.2.2) (2020-03-25) ### Features diff --git a/packages/gatsby-telemetry/package.json b/packages/gatsby-telemetry/package.json index b7398285b5730..5c75fdd4aa617 100644 --- a/packages/gatsby-telemetry/package.json +++ b/packages/gatsby-telemetry/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-telemetry", "description": "Gatsby Telemetry", - "version": "1.2.2", + "version": "1.2.3", "author": "Jarmo Isotalo ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-theme-blog-core/CHANGELOG.md b/packages/gatsby-theme-blog-core/CHANGELOG.md index 22655e79134bb..4d6e924743c5d 100644 --- a/packages/gatsby-theme-blog-core/CHANGELOG.md +++ b/packages/gatsby-theme-blog-core/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.15](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.14...gatsby-theme-blog-core@1.3.15) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.14](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.13...gatsby-theme-blog-core@1.3.14) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.13](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.12...gatsby-theme-blog-core@1.3.13) (2020-04-04) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.12](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.11...gatsby-theme-blog-core@1.3.12) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.11](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.10...gatsby-theme-blog-core@1.3.11) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.10](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.9...gatsby-theme-blog-core@1.3.10) (2020-04-01) + +**Note:** Version bump only for package gatsby-theme-blog-core + ## [1.3.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.8...gatsby-theme-blog-core@1.3.9) (2020-03-30) **Note:** Version bump only for package gatsby-theme-blog-core diff --git a/packages/gatsby-theme-blog-core/package.json b/packages/gatsby-theme-blog-core/package.json index 8be812d44d94f..249207ad6d979 100644 --- a/packages/gatsby-theme-blog-core/package.json +++ b/packages/gatsby-theme-blog-core/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-theme-blog-core", - "version": "1.3.9", + "version": "1.3.15", "main": "index.js", "author": "christopherbiscardi (@chrisbiscardi)", "license": "MIT", @@ -19,18 +19,18 @@ "dependencies": { "@mdx-js/mdx": "^1.5.7", "gatsby-core-utils": "^1.1.1", - "gatsby-plugin-mdx": "^1.1.4", - "gatsby-plugin-sharp": "^2.5.3", + "gatsby-plugin-mdx": "^1.1.6", + "gatsby-plugin-sharp": "^2.5.4", "gatsby-remark-copy-linked-files": "^2.2.1", - "gatsby-remark-images": "^3.2.1", + "gatsby-remark-images": "^3.2.2", "gatsby-remark-smartypants": "^2.2.1", "gatsby-source-filesystem": "^2.2.2", - "gatsby-transformer-sharp": "^2.4.3", + "gatsby-transformer-sharp": "^2.4.4", "remark-slug": "^5.1.2" }, "devDependencies": { "@mdx-js/react": "^1.5.7", - "gatsby": "^2.20.9", + "gatsby": "^2.20.13", "prettier": "^1.19.1", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/packages/gatsby-theme-blog/CHANGELOG.md b/packages/gatsby-theme-blog/CHANGELOG.md index 3929762a2cea1..994f3423f48b8 100644 --- a/packages/gatsby-theme-blog/CHANGELOG.md +++ b/packages/gatsby-theme-blog/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.4.15](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.14...gatsby-theme-blog@1.4.15) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.14](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.13...gatsby-theme-blog@1.4.14) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.13](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.12...gatsby-theme-blog@1.4.13) (2020-04-04) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.12](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.11...gatsby-theme-blog@1.4.12) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.11](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.10...gatsby-theme-blog@1.4.11) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.10](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.9...gatsby-theme-blog@1.4.10) (2020-04-01) + +**Note:** Version bump only for package gatsby-theme-blog + ## [1.4.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.8...gatsby-theme-blog@1.4.9) (2020-03-30) **Note:** Version bump only for package gatsby-theme-blog diff --git a/packages/gatsby-theme-blog/package.json b/packages/gatsby-theme-blog/package.json index 14261ebc0e6db..1a88b78493d77 100644 --- a/packages/gatsby-theme-blog/package.json +++ b/packages/gatsby-theme-blog/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-theme-blog", - "version": "1.4.9", + "version": "1.4.15", "description": "A Gatsby theme for miscellaneous blogging with a dark/light mode", "main": "index.js", "keywords": [ @@ -23,13 +23,13 @@ "@theme-ui/prism": "^0.2.50", "@theme-ui/typography": "^0.2.46", "deepmerge": "^4.2.2", - "gatsby-image": "^2.3.1", + "gatsby-image": "^2.3.2", "gatsby-plugin-emotion": "^4.2.1", "gatsby-plugin-feed": "^2.4.1", "gatsby-plugin-react-helmet": "^3.2.1", "gatsby-plugin-theme-ui": "^0.2.53", - "gatsby-plugin-twitter": "^2.2.1", - "gatsby-theme-blog-core": "^1.3.9", + "gatsby-plugin-twitter": "^2.2.2", + "gatsby-theme-blog-core": "^1.3.15", "mdx-utils": "0.2.0", "react-helmet": "^5.2.1", "react-switch": "^5.0.1", @@ -39,7 +39,7 @@ "typography-theme-wordpress-2016": "^0.16.19" }, "devDependencies": { - "gatsby": "^2.20.9", + "gatsby": "^2.20.13", "prettier": "^1.19.1", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/packages/gatsby-theme-notes/CHANGELOG.md b/packages/gatsby-theme-notes/CHANGELOG.md index 3b802f6b731f3..eefd01562364b 100644 --- a/packages/gatsby-theme-notes/CHANGELOG.md +++ b/packages/gatsby-theme-notes/CHANGELOG.md @@ -3,6 +3,26 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.14](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.13...gatsby-theme-notes@1.2.14) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.13](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.12...gatsby-theme-notes@1.2.13) (2020-04-07) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.12](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.11...gatsby-theme-notes@1.2.12) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.11](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.10...gatsby-theme-notes@1.2.11) (2020-04-03) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.10](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.9...gatsby-theme-notes@1.2.10) (2020-04-01) + +**Note:** Version bump only for package gatsby-theme-notes + ## [1.2.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.8...gatsby-theme-notes@1.2.9) (2020-03-30) **Note:** Version bump only for package gatsby-theme-notes diff --git a/packages/gatsby-theme-notes/package.json b/packages/gatsby-theme-notes/package.json index ab6791a38d7c5..eb0b57b0969e2 100644 --- a/packages/gatsby-theme-notes/package.json +++ b/packages/gatsby-theme-notes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-theme-notes", "description": "Gatsby Theme for adding a notes section to your website", - "version": "1.2.9", + "version": "1.2.14", "author": "John Otander", "license": "MIT", "main": "index.js", @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-theme-notes#readme", "devDependencies": { - "gatsby": "^2.20.9", + "gatsby": "^2.20.13", "react": "^16.12.0", "react-dom": "^16.12.0" }, @@ -39,7 +39,7 @@ "gatsby-core-utils": "^1.1.1", "gatsby-plugin-compile-es6-packages": "^2.1.0", "gatsby-plugin-emotion": "^4.2.1", - "gatsby-plugin-mdx": "^1.1.4", + "gatsby-plugin-mdx": "^1.1.6", "gatsby-plugin-meta-redirect": "^1.1.1", "gatsby-plugin-og-image": "0.0.1", "gatsby-plugin-redirects": "^1.0.0", diff --git a/packages/gatsby-transformer-sharp/CHANGELOG.md b/packages/gatsby-transformer-sharp/CHANGELOG.md index 88b09b78c2e51..6bb46846509c5 100644 --- a/packages/gatsby-transformer-sharp/CHANGELOG.md +++ b/packages/gatsby-transformer-sharp/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sharp@2.4.3...gatsby-transformer-sharp@2.4.4) (2020-04-04) + +### Bug Fixes + +- **dependencies:** bump potrace version ([#22803](https://github.com/gatsbyjs/gatsby/issues/22803)) ([7a8f016](https://github.com/gatsbyjs/gatsby/commit/7a8f016)) + ## [2.4.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sharp@2.4.2...gatsby-transformer-sharp@2.4.3) (2020-03-27) ### Bug Fixes diff --git a/packages/gatsby-transformer-sharp/package.json b/packages/gatsby-transformer-sharp/package.json index 92312e1a37c05..17752f061f136 100644 --- a/packages/gatsby-transformer-sharp/package.json +++ b/packages/gatsby-transformer-sharp/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-sharp", "description": "Gatsby transformer plugin for images using Sharp", - "version": "2.4.3", + "version": "2.4.4", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "potrace": "^2.1.2", + "potrace": "^2.1.5", "probe-image-size": "^4.1.1", "semver": "^5.7.1", "sharp": "^0.25.1" diff --git a/packages/gatsby-transformer-sqip/CHANGELOG.md b/packages/gatsby-transformer-sqip/CHANGELOG.md index eaf9bdcc4571f..9b7e685b0ca73 100644 --- a/packages/gatsby-transformer-sqip/CHANGELOG.md +++ b/packages/gatsby-transformer-sqip/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.2.3...gatsby-transformer-sqip@2.2.4) (2020-04-04) + +**Note:** Version bump only for package gatsby-transformer-sqip + ## [2.2.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.2.2...gatsby-transformer-sqip@2.2.3) (2020-03-24) **Note:** Version bump only for package gatsby-transformer-sqip diff --git a/packages/gatsby-transformer-sqip/package.json b/packages/gatsby-transformer-sqip/package.json index 5311579301f7f..7680ebf715d56 100644 --- a/packages/gatsby-transformer-sqip/package.json +++ b/packages/gatsby-transformer-sqip/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-sqip", "description": "Generates geometric primitive version of images", - "version": "2.2.3", + "version": "2.2.4", "author": "Benedikt Rötsch ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-plugin-sharp": "^2.5.3", + "gatsby-plugin-sharp": "^2.5.4", "md5-file": "^4.0.0", "mini-svg-data-uri": "^1.1.3", "p-queue": "^2.4.2", diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index d9db9de35cfe2..9c321f38edd86 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.20.13](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.12...gatsby@2.20.13) (2020-04-07) + +**Note:** Version bump only for package gatsby + +## [2.20.12](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.11...gatsby@2.20.12) (2020-04-03) + +### Bug Fixes + +- **gatsby:** Fix OOM from telemetry storing too much ([#22752](https://github.com/gatsbyjs/gatsby/issues/22752)) ([a7281c2](https://github.com/gatsbyjs/gatsby/commit/a7281c2)) + +## [2.20.11](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.10...gatsby@2.20.11) (2020-04-03) + +### Bug Fixes + +- **gatsby:** Support grouping by reserved keywords ([#22603](https://github.com/gatsbyjs/gatsby/issues/22603)) ([ad6bc16](https://github.com/gatsbyjs/gatsby/commit/ad6bc16)) + +## [2.20.10](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.9...gatsby@2.20.10) (2020-04-01) + +### Bug Fixes + +- **core:** Add gatsby/graphql type definitions ([#22652](https://github.com/gatsbyjs/gatsby/issues/22652)) ([ac205cf](https://github.com/gatsbyjs/gatsby/commit/ac205cf)) + ## [2.20.9](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.8...gatsby@2.20.9) (2020-03-30) ### Bug Fixes diff --git a/packages/gatsby/index.d.ts b/packages/gatsby/index.d.ts index ffcdbdde7478b..020f0c8fa9a50 100644 --- a/packages/gatsby/index.d.ts +++ b/packages/gatsby/index.d.ts @@ -176,6 +176,8 @@ export interface GatsbyConfig { > /** It’s common for sites to be hosted somewhere other than the root of their domain. Say we have a Gatsby site at `example.com/blog/`. In this case, we would need a prefix (`/blog`) added to all paths on the site. */ pathPrefix?: string + /** In some circumstances you may want to deploy assets (non-HTML resources such as JavaScript, CSS, etc.) to a separate domain. `assetPrefix` allows you to use Gatsby with assets hosted from a separate domain */ + assetPrefix?: string /** Gatsby uses the ES6 Promise API. Because some browsers don't support this, Gatsby includes a Promise polyfill by default. If you'd like to provide your own Promise polyfill, you can set `polyfill` to false.*/ polyfill?: boolean mapping?: Record diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 6cba29edfeef0..268ee98574470 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.20.9", + "version": "2.20.13", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -79,13 +79,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.11.3", + "gatsby-cli": "^2.11.5", "gatsby-core-utils": "^1.1.1", "gatsby-graphiql-explorer": "^0.3.1", - "gatsby-link": "^2.3.1", + "gatsby-link": "^2.3.2", "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", - "gatsby-telemetry": "^1.2.2", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -177,6 +177,7 @@ "devDependencies": { "@babel/cli": "^7.8.4", "@babel/runtime": "^7.8.7", + "@types/hapi__joi": "^16.0.12", "@types/socket.io": "^2.1.4", "babel-preset-gatsby-package": "^0.3.1", "copy-and-watch": "^0.1.4", @@ -188,8 +189,8 @@ "rimraf": "^3.0.2", "xhr-mock": "^2.5.1", "zipkin": "^0.19.2", - "zipkin-transport-http": "^0.19.2", - "zipkin-javascript-opentracing": "^2.1.0" + "zipkin-javascript-opentracing": "^2.1.0", + "zipkin-transport-http": "^0.19.2" }, "engines": { "node": ">=10.13.0" diff --git a/packages/gatsby/src/joi-schemas/__tests__/__snapshots__/joi.js.snap b/packages/gatsby/src/joi-schemas/__tests__/__snapshots__/joi.ts.snap similarity index 100% rename from packages/gatsby/src/joi-schemas/__tests__/__snapshots__/joi.js.snap rename to packages/gatsby/src/joi-schemas/__tests__/__snapshots__/joi.ts.snap diff --git a/packages/gatsby/src/joi-schemas/__tests__/joi.js b/packages/gatsby/src/joi-schemas/__tests__/joi.ts similarity index 92% rename from packages/gatsby/src/joi-schemas/__tests__/joi.js rename to packages/gatsby/src/joi-schemas/__tests__/joi.ts index c4588d6502f67..a2480b7c1e009 100644 --- a/packages/gatsby/src/joi-schemas/__tests__/joi.js +++ b/packages/gatsby/src/joi-schemas/__tests__/joi.ts @@ -1,4 +1,4 @@ -const { gatsbyConfigSchema, nodeSchema } = require(`../joi`) +import { gatsbyConfigSchema, nodeSchema } from "../joi" describe(`gatsby config`, () => { it(`returns empty pathPrefix when not set`, async () => { @@ -133,7 +133,8 @@ describe(`node schema`, () => { const { error } = nodeSchema.validate(node) expect(error).toBeTruthy() - expect(error.message).toMatchSnapshot() + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + expect(error!.message).toMatchSnapshot() }) it(`doesn't allow unknown internal fields`, async () => { @@ -152,6 +153,7 @@ describe(`node schema`, () => { const { error } = nodeSchema.validate(node) expect(error).toBeTruthy() - expect(error.message).toMatchSnapshot() + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + expect(error!.message).toMatchSnapshot() }) }) diff --git a/packages/gatsby/src/joi-schemas/joi.js b/packages/gatsby/src/joi-schemas/joi.ts similarity index 83% rename from packages/gatsby/src/joi-schemas/joi.js rename to packages/gatsby/src/joi-schemas/joi.ts index d211184251ee8..9f626f19dfb42 100644 --- a/packages/gatsby/src/joi-schemas/joi.js +++ b/packages/gatsby/src/joi-schemas/joi.ts @@ -1,13 +1,16 @@ -const Joi = require(`@hapi/joi`) +import Joi from "@hapi/joi" +import { IGatsbyConfig, IGatsbyPage, IGatsbyNode } from "../redux/types" + +const stripTrailingSlash = (chain: Joi.StringSchema): Joi.StringSchema => + chain.replace(/(\w)\/+$/, `$1`) -const stripTrailingSlash = chain => chain.replace(/(\w)\/+$/, `$1`) // only add leading slash on relative urls -const addLeadingSlash = chain => +const addLeadingSlash = (chain: Joi.StringSchema): Joi.StringSchema => chain.when(Joi.string().uri({ relativeOnly: true }), { then: chain.replace(/^([^/])/, `/$1`), }) -export const gatsbyConfigSchema = Joi.object() +export const gatsbyConfigSchema: Joi.ObjectSchema = Joi.object() .keys({ __experimentalThemes: Joi.array(), polyfill: Joi.boolean().default(true), @@ -73,7 +76,7 @@ export const gatsbyConfigSchema = Joi.object() } ) -export const pageSchema = Joi.object() +export const pageSchema: Joi.ObjectSchema = Joi.object() .keys({ path: Joi.string().required(), matchPath: Joi.string(), @@ -85,7 +88,7 @@ export const pageSchema = Joi.object() }) .unknown() -export const nodeSchema = Joi.object() +export const nodeSchema: Joi.ObjectSchema = Joi.object() .keys({ id: Joi.string().required(), children: Joi.array().items(Joi.string(), Joi.object().forbidden()), diff --git a/packages/gatsby/src/query/graphql-runner.ts b/packages/gatsby/src/query/graphql-runner.ts index a041e7b2b0cd7..75fb944a3e1af 100644 --- a/packages/gatsby/src/query/graphql-runner.ts +++ b/packages/gatsby/src/query/graphql-runner.ts @@ -1,3 +1,5 @@ +import crypto from "crypto" +import v8 from "v8" import { parse, validate, @@ -164,9 +166,20 @@ export default class GraphQLRunner { if (typeof statsQuery !== `string`) { statsQuery = statsQuery.body } - this.stats.uniqueOperations.add(`${statsQuery}${JSON.stringify(context)}`) - - this.stats.uniqueQueries.add(statsQuery) + this.stats.uniqueOperations.add( + crypto + .createHash(`sha1`) + .update(statsQuery) + .update(v8.serialize(context)) + .digest(`hex`) + ) + + this.stats.uniqueQueries.add( + crypto + .createHash(`sha1`) + .update(statsQuery) + .digest(`hex`) + ) } const document = this.parse(query) diff --git a/packages/gatsby/src/redux/actions/public.js b/packages/gatsby/src/redux/actions/public.js index 5a6db72d66266..ec5061d2170bb 100644 --- a/packages/gatsby/src/redux/actions/public.js +++ b/packages/gatsby/src/redux/actions/public.js @@ -14,7 +14,7 @@ const { hasNodeChanged, getNode } = require(`../../db/nodes`) const sanitizeNode = require(`../../db/sanitize-node`) const { store } = require(`..`) const fileExistsSync = require(`fs-exists-cached`).sync -const joiSchemas = require(`../../joi-schemas/joi`) +import { nodeSchema } from "../../joi-schemas/joi" const { generateComponentChunkName } = require(`../../utils/js-chunk-names`) const { getCommonDir, @@ -744,7 +744,7 @@ const createNode = ( trackCli(`CREATE_NODE`, trackParams, { debounce: true }) - const result = Joi.validate(node, joiSchemas.nodeSchema) + const result = Joi.validate(node, nodeSchema) if (result.error) { if (!hasErroredBecauseOfNodeValidation.has(result.error.message)) { const errorObj = { diff --git a/packages/gatsby/src/redux/nodes.ts b/packages/gatsby/src/redux/nodes.ts index 3385e108a6a8d..1c68274b3f17f 100644 --- a/packages/gatsby/src/redux/nodes.ts +++ b/packages/gatsby/src/redux/nodes.ts @@ -2,6 +2,8 @@ import { store } from "./" import { IGatsbyNode } from "./types" import { createPageDependency } from "./actions/add-page-dependency" +export type FilterCacheKey = string + /** * Get all nodes from redux store. */ @@ -155,27 +157,22 @@ export const addResolvedNodes = ( * looping over all the nodes, when the number of pages (/nodes) scale up. */ export const ensureIndexByTypedChain = ( + cacheKey: FilterCacheKey, chain: string[], nodeTypeNames: string[], typedKeyValueIndexes: Map< - string, + FilterCacheKey, Map> > ): void => { - const chained = chain.join(`+`) - - const nodeTypeNamePrefix = nodeTypeNames.join(`,`) + `/` - // The format of the typedKey is `type,type/path+to+eqobj` - const typedKey = nodeTypeNamePrefix + chained - - if (typedKeyValueIndexes.has(typedKey)) { + if (typedKeyValueIndexes.has(cacheKey)) { return } const { nodes, resolvedNodesCache } = store.getState() const byKeyValue = new Map>() - typedKeyValueIndexes.set(typedKey, byKeyValue) + typedKeyValueIndexes.set(cacheKey, byKeyValue) nodes.forEach(node => { if (!nodeTypeNames.includes(node.internal.type)) { @@ -232,18 +229,13 @@ export const ensureIndexByTypedChain = ( * per `id` so there's a minor optimization for that (no need for Sets). */ export const getNodesByTypedChain = ( - chain: string[], + cacheKey: FilterCacheKey, value: boolean | number | string, - nodeTypeNames: string[], typedKeyValueIndexes: Map< - string, + FilterCacheKey, Map> > ): Set | undefined => { - const key = chain.join(`+`) - - const typedKey = nodeTypeNames.join(`,`) + `/` + key - - const byTypedKey = typedKeyValueIndexes?.get(typedKey) + const byTypedKey = typedKeyValueIndexes?.get(cacheKey) return byTypedKey?.get(value) } diff --git a/packages/gatsby/src/redux/run-sift.js b/packages/gatsby/src/redux/run-sift.js index e1905a2c21010..aba8ae2936406 100644 --- a/packages/gatsby/src/redux/run-sift.js +++ b/packages/gatsby/src/redux/run-sift.js @@ -1,4 +1,5 @@ // @flow + const { default: sift } = require(`sift`) const { prepareRegex } = require(`../utils/prepare-regex`) const { makeRe } = require(`micromatch`) @@ -19,6 +20,35 @@ const { getNode: siftGetNode, } = require(`./nodes`) +/** + * Creates a key for the filterCache + * + * @param {Array} typeNames + * @param {DbQuery} filter + * @returns {FilterCacheKey} (a string: `types.join()/path.join()/operator` ) + */ +const createTypedFilterCacheKey = (typeNames, filter) => { + // Note: while `elemMatch` is a special case, in the key it's just `elemMatch` + // (This function is future proof for elemMatch support, won't receive it yet) + let f = filter + let comparator = `` + let paths /*: Array*/ = [] + while (f) { + paths.push(...f.path) + if (f.type === `elemMatch`) { + let q /*: IDbQueryElemMatch*/ = f + f = q.nestedQuery + } else { + let q /*: IDbQueryQuery*/ = f + comparator = q.query.comparator + break + } + } + + // Note: the separators (`,` and `/`) are arbitrary but must be different + return typeNames.join(`,`) + `/` + comparator + `/` + paths.join(`,`) +} + ///////////////////////////////////////////////////////////////////// // Parse filter ///////////////////////////////////////////////////////////////////// @@ -105,7 +135,7 @@ function handleMany(siftArgs, nodes) { * * @param {Array} filters Resolved. (Should be checked by caller to exist) * @param {Array} nodeTypeNames - * @param {Map>>} typedKeyValueIndexes + * @param {Map>>} typedKeyValueIndexes * @returns {Array | undefined} */ const runFlatFiltersWithoutSift = ( @@ -149,7 +179,7 @@ const runFlatFiltersWithoutSift = ( /** * @param {Array} filters * @param {Array} nodeTypeNames - * @param {Map>>} typedKeyValueIndexes + * @param {Map>>} typedKeyValueIndexes * @returns {Array> | undefined} Undefined means at least one * cache was not found. Must fallback to sift. */ @@ -163,15 +193,21 @@ const getBucketsForFilters = (filters, nodeTypeNames, typedKeyValueIndexes) => { query: { value: targetValue }, } = filter - ensureIndexByTypedChain(chain, nodeTypeNames, typedKeyValueIndexes) + let cacheKey = createTypedFilterCacheKey(nodeTypeNames, filter) - const nodesByKeyValue = getNodesByTypedChain( + ensureIndexByTypedChain( + cacheKey, chain, - targetValue, nodeTypeNames, typedKeyValueIndexes ) + const nodesByKeyValue = getNodesByTypedChain( + cacheKey, + targetValue, + typedKeyValueIndexes + ) + // If we couldn't find the needle then maybe sift can, for example if the // schema contained a proxy; `slug: String @proxy(from: "slugInternal")` // There are also cases (and tests) where id exists with a different type @@ -202,7 +238,7 @@ const getBucketsForFilters = (filters, nodeTypeNames, typedKeyValueIndexes) => { * @property {boolean} args.firstOnly true if you want to return only the first * result found. This will return a collection of size 1. Not a single element * @property {{filter?: Object, sort?: Object} | undefined} args.queryArgs - * @property {undefined | Map>>} args.typedKeyValueIndexes + * @property {undefined | Map>>} args.typedKeyValueIndexes * May be undefined. A cache of indexes where you can look up Nodes grouped * by a key: `types.join(',')+'/'+filterPath.join('+')`, which yields a Map * which holds a Set of Nodes for the value that the filter is trying to eq @@ -243,7 +279,7 @@ exports.runSift = runFilterAndSort * @param {Array | undefined} filterFields * @param {boolean} firstOnly * @param {Array} nodeTypeNames - * @param {undefined | Map>>} typedKeyValueIndexes + * @param {undefined | Map>>} typedKeyValueIndexes * @param resolvedFields * @returns {Array | undefined} Collection of results. Collection * will be limited to 1 if `firstOnly` is true @@ -318,7 +354,7 @@ const filterToStats = ( * * @param {Array} filters Resolved. (Should be checked by caller to exist) * @param {Array} nodeTypeNames - * @param {Map>>} typedKeyValueIndexes + * @param {Map>>} typedKeyValueIndexes * @returns {Array|undefined} Collection of results */ const filterWithoutSift = (filters, nodeTypeNames, typedKeyValueIndexes) => { diff --git a/packages/gatsby/src/schema/__tests__/fixtures/queries.js b/packages/gatsby/src/schema/__tests__/fixtures/queries.js index 8e93dbdbd696a..d0697fc474309 100644 --- a/packages/gatsby/src/schema/__tests__/fixtures/queries.js +++ b/packages/gatsby/src/schema/__tests__/fixtures/queries.js @@ -39,6 +39,7 @@ const nodes = [ }, frontmatter: { title: `Markdown File 1`, + tags: [], date: new Date(Date.UTC(2019, 0, 1)), authors: [`author2@example.com`, `author1@example.com`], reviewer___NODE: `author2`, @@ -55,6 +56,7 @@ const nodes = [ }, frontmatter: { title: `Markdown File 2`, + tags: [`constructor`], published: false, authors: [`author1@example.com`], reviewer___NODE: null, diff --git a/packages/gatsby/src/schema/__tests__/queries.js b/packages/gatsby/src/schema/__tests__/queries.js index 8058d9a29b406..e39cfe0fe4b71 100644 --- a/packages/gatsby/src/schema/__tests__/queries.js +++ b/packages/gatsby/src/schema/__tests__/queries.js @@ -654,14 +654,14 @@ describe(`Query schema`, () => { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "edges": Array [], - "nodes": Array [], - "totalCount": 0, - }, -} -`) + Object { + "allMarkdown": Object { + "edges": Array [], + "nodes": Array [], + "totalCount": 0, + }, + } + `) }) it(`adds nodes field as a convenience shortcut`, async () => { @@ -874,47 +874,47 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "group": Array [ - Object { - "edges": Array [ Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, - }, - }, - Object { - "node": Object { - "frontmatter": Object { - "date": null, - "title": "Markdown File 2", - }, - }, - }, - ], - "fieldValue": "Author 1", - }, - Object { - "edges": Array [ - Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, + "allMarkdown": Object { + "group": Array [ + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + Object { + "node": Object { + "frontmatter": Object { + "date": null, + "title": "Markdown File 2", + }, + }, + }, + ], + "fieldValue": "Author 1", + }, + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + ], + "fieldValue": "Author 2", + }, + ], }, - }, - ], - "fieldValue": "Author 2", - }, - ], - }, -} -`) + } + `) }) it(`handles groups added in inline fragment`, async () => { @@ -940,47 +940,47 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "group": Array [ - Object { - "edges": Array [ - Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, - }, - }, Object { - "node": Object { - "frontmatter": Object { - "date": null, - "title": "Markdown File 2", - }, - }, - }, - ], - "fieldValue": "Author 1", - }, - Object { - "edges": Array [ - Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, + "allMarkdown": Object { + "group": Array [ + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + Object { + "node": Object { + "frontmatter": Object { + "date": null, + "title": "Markdown File 2", + }, + }, + }, + ], + "fieldValue": "Author 1", + }, + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + ], + "fieldValue": "Author 2", + }, + ], }, - }, - ], - "fieldValue": "Author 2", - }, - ], - }, -} -`) + } + `) }) it(`handles groups added in nested fragment`, async () => { @@ -1012,47 +1012,47 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "group": Array [ - Object { - "edges": Array [ Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, - }, - }, - Object { - "node": Object { - "frontmatter": Object { - "date": null, - "title": "Markdown File 2", - }, - }, - }, - ], - "fieldValue": "Author 1", - }, - Object { - "edges": Array [ - Object { - "node": Object { - "frontmatter": Object { - "date": "2019-01-01", - "title": "Markdown File 1", - }, + "allMarkdown": Object { + "group": Array [ + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + Object { + "node": Object { + "frontmatter": Object { + "date": null, + "title": "Markdown File 2", + }, + }, + }, + ], + "fieldValue": "Author 1", + }, + Object { + "edges": Array [ + Object { + "node": Object { + "frontmatter": Object { + "date": "2019-01-01", + "title": "Markdown File 1", + }, + }, + }, + ], + "fieldValue": "Author 2", + }, + ], }, - }, - ], - "fieldValue": "Author 2", - }, - ], - }, -} -`) + } + `) }) it(`groups null result`, async () => { @@ -1075,12 +1075,39 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "group": Array [], - }, -} -`) + Object { + "allMarkdown": Object { + "group": Array [], + }, + } + `) + }) + + it(`groups using reserved keywords`, async () => { + const query = ` + { + allMarkdown { + group(field: frontmatter___tags) { + field + fieldValue + } + } + } + ` + const results = await runQuery(query) + expect(results.errors).toBeUndefined() + expect(results.data).toMatchInlineSnapshot(` + Object { + "allMarkdown": Object { + "group": Array [ + Object { + "field": "frontmatter.tags", + "fieldValue": "constructor", + }, + ], + }, + } + `) }) }) @@ -1132,14 +1159,14 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "distinct": Array [ - "2019-01-01T00:00:00.000Z", - ], - }, -} -`) + Object { + "allMarkdown": Object { + "distinct": Array [ + "2019-01-01T00:00:00.000Z", + ], + }, + } + `) }) it(`handles null result`, async () => { @@ -1157,12 +1184,12 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "distinct": Array [], - }, -} -`) + Object { + "allMarkdown": Object { + "distinct": Array [], + }, + } + `) }) }) }) @@ -1249,25 +1276,25 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "nodes": Array [ - Object { - "frontmatter": Object { - "reviewer": Object { - "name": "Author 2", + Object { + "allMarkdown": Object { + "nodes": Array [ + Object { + "frontmatter": Object { + "reviewer": Object { + "name": "Author 2", + }, + }, + }, + Object { + "frontmatter": Object { + "reviewer": null, + }, + }, + ], }, - }, - }, - Object { - "frontmatter": Object { - "reviewer": null, - }, - }, - ], - }, -} -`) + } + `) }) it(`with defined field mappings`, async () => { @@ -1287,25 +1314,25 @@ Object { const results = await runQuery(query) expect(results.errors).toBeUndefined() expect(results.data).toMatchInlineSnapshot(` -Object { - "allMarkdown": Object { - "nodes": Array [ - Object { - "frontmatter": Object { - "reviewerByEmail": Object { - "name": "Author 2", + Object { + "allMarkdown": Object { + "nodes": Array [ + Object { + "frontmatter": Object { + "reviewerByEmail": Object { + "name": "Author 2", + }, + }, + }, + Object { + "frontmatter": Object { + "reviewerByEmail": null, + }, + }, + ], }, - }, - }, - Object { - "frontmatter": Object { - "reviewerByEmail": null, - }, - }, - ], - }, -} -`) + } + `) }) }) diff --git a/packages/gatsby/src/schema/resolvers.js b/packages/gatsby/src/schema/resolvers.js index 81faf07bc7c0c..b0cdf234a7ac2 100644 --- a/packages/gatsby/src/schema/resolvers.js +++ b/packages/gatsby/src/schema/resolvers.js @@ -74,7 +74,11 @@ const group = (source, args, context, info) => { acc[key] = (acc[key] || []).concat(node) }) return acc - }, {}) + // Note: using Object.create on purpose: + // object key may be arbitrary string including reserved words (i.e. `constructor`) + // see: https://github.com/gatsbyjs/gatsby/issues/22508 + }, Object.create(null)) + return Object.keys(groupedResults) .sort() .reduce((acc, fieldValue) => { diff --git a/starters/blog/package-lock.json b/starters/blog/package-lock.json index 44783b64a4115..a6aa38fc4e0c1 100644 --- a/starters/blog/package-lock.json +++ b/starters/blog/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -968,28 +1017,37 @@ } }, "@jimp/bmp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", - "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", - "core-js": "^2.5.7" + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", - "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^2.5.7", + "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -1004,6 +1062,11 @@ "ieee754": "^1.1.4" } }, + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -1012,254 +1075,526 @@ } }, "@jimp/custom": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", - "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { - "@jimp/core": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/gif": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", - "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "omggif": "^1.0.9" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/jpeg": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", - "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "jpeg-js": "^0.3.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blit": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", - "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blur": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", - "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-color": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", - "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "tinycolor2": "^1.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-contain": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", - "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-cover": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", - "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-crop": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", - "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-displace": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", - "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-dither": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", - "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-flip": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", - "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-gaussian": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", - "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-invert": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", - "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-mask": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", - "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-normalize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", - "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-print": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", - "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "load-bmfont": "^1.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-resize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", - "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-rotate": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", - "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-scale": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", - "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugins": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", - "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", - "requires": { - "@jimp/plugin-blit": "^0.6.8", - "@jimp/plugin-blur": "^0.6.8", - "@jimp/plugin-color": "^0.6.8", - "@jimp/plugin-contain": "^0.6.8", - "@jimp/plugin-cover": "^0.6.8", - "@jimp/plugin-crop": "^0.6.8", - "@jimp/plugin-displace": "^0.6.8", - "@jimp/plugin-dither": "^0.6.8", - "@jimp/plugin-flip": "^0.6.8", - "@jimp/plugin-gaussian": "^0.6.8", - "@jimp/plugin-invert": "^0.6.8", - "@jimp/plugin-mask": "^0.6.8", - "@jimp/plugin-normalize": "^0.6.8", - "@jimp/plugin-print": "^0.6.8", - "@jimp/plugin-resize": "^0.6.8", - "@jimp/plugin-rotate": "^0.6.8", - "@jimp/plugin-scale": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/png": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", - "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "pngjs": "^3.3.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/tiff": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", - "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", "utif": "^2.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/types": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", - "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", - "requires": { - "@jimp/bmp": "^0.6.8", - "@jimp/gif": "^0.6.8", - "@jimp/jpeg": "^0.6.8", - "@jimp/png": "^0.6.8", - "@jimp/tiff": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/utils": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", - "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@mikaelkristiansson/domready": { @@ -1407,9 +1742,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1522,9 +1857,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1542,27 +1877,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1603,42 +1938,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1670,160 +2005,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2223,17 +2557,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "aws-sign2": { @@ -2325,16 +2659,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2397,9 +2755,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2421,9 +2779,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2437,7 +2795,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -2825,13 +3183,24 @@ } }, "bl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz", - "integrity": "sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", "readable-stream": "^3.4.0" }, "dependencies": { + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3127,13 +3496,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3206,9 +3576,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3390,9 +3760,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "caseless": { "version": "0.12.0", @@ -3536,9 +3906,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -3770,9 +4140,9 @@ } }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4549,17 +4919,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4598,9 +4989,9 @@ } }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4621,9 +5012,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4939,9 +5330,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5281,9 +5672,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5446,9 +5837,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5629,9 +6020,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5778,6 +6169,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5787,9 +6186,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5949,9 +6348,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -6003,9 +6402,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -6097,9 +6496,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -6204,9 +6603,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -6232,11 +6631,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -6372,9 +6778,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6773,9 +7179,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -6797,9 +7203,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -6824,6 +7230,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -6969,9 +7386,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -7138,9 +7555,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -7187,7 +7604,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -7337,7 +7754,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -7359,11 +7776,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -7372,7 +7789,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -7399,7 +7816,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -7421,12 +7838,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -7496,17 +7914,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7638,9 +8049,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7653,18 +8064,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7703,13 +8114,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7730,13 +8141,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7770,12 +8181,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -7811,9 +8222,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -7830,8 +8241,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -7992,9 +8403,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -8002,17 +8413,17 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-image": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.2.44.tgz", - "integrity": "sha512-lKvBVc9lIYF1vrQ9b40Tmd5oOGTz69UXFT/gVtg5Ly5vVmDAU/4RdYbafQi6/KpCZRkAdO4ogtj0HB2YFjqfrQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.3.1.tgz", + "integrity": "sha512-VCJIb2Sp7Dcql+seZ14pqP2yL8oUlLin+HNEb5u8hcn3txkZhzIW3zwPQ3UwfPvi9Em3gBsEClCR6TQSw96J8g==", "requires": { "@babel/runtime": "^7.8.7", "object-fit-images": "^3.2.4", @@ -8020,25 +8431,25 @@ } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" @@ -8052,9 +8463,9 @@ } }, "gatsby-plugin-feed": { - "version": "2.3.29", - "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.3.29.tgz", - "integrity": "sha512-fbgmUdjcTj3pzDJa/y2MhSRAAYf6S5YVEN/CB+fqvaHyLq6gzRqLTEIYYnwtXhQk/14Zq6bntsRxH/2dA0J9bg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.4.1.tgz", + "integrity": "sha512-4+vdto148cIKPJT7bI9i//opwUu6ZqO5l1WNGAGubByWPLIA47VadcC5GzMHpWVtTMZugnmfotZI8t/3iCNP3w==", "requires": { "@babel/runtime": "^7.8.7", "@hapi/joi": "^15.1.1", @@ -8064,32 +8475,33 @@ } }, "gatsby-plugin-google-analytics": { - "version": "2.1.38", - "resolved": "https://registry.npmjs.org/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.1.38.tgz", - "integrity": "sha512-Ce5E1qoD1jQkDcQIm4qPmu0L66ujqwHua0Vy+UC4rUw2GdIn5dunpBklgYaDFF2DG1gDyMwJ4v+XElLaltXcDQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.2.2.tgz", + "integrity": "sha512-at0eUPTyetGuPW1ceISAv58a9fwbwsLX9V5ucwKYShs98Spil/FWviukW0f1A2LUsWOGTiVJYReS7IVVw+FlIA==", "requires": { - "@babel/runtime": "^7.8.7" + "@babel/runtime": "^7.8.7", + "minimatch": "3.0.4" } }, "gatsby-plugin-manifest": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.48.tgz", - "integrity": "sha512-RWD2HlKT7TFcXs3SIiZTWjq3Ud4z79cms8pBLXjlNNddatnSNi0ne2RknERCQgmTQvcJ9eNeIzfzVtR3WAcBYA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.3.3.tgz", + "integrity": "sha512-lEval/fZaCqu9qlQMY38A8fuoJOpWRih3Hh0sLfM2Bt1dPlVkjDQqpHbQCfEinQA41c6JUdFAQFhdp5+G0kOwQ==", "requires": { "@babel/runtime": "^7.8.7", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gatsby-plugin-offline": { - "version": "3.0.41", - "resolved": "https://registry.npmjs.org/gatsby-plugin-offline/-/gatsby-plugin-offline-3.0.41.tgz", - "integrity": "sha512-UkeW+2/jVGP2AIZIDPSqUYk+G+5BYe5CX5zb7wrShYpjeY7WCFyEitQRdBF5qAKd9cBzMCCSIjh9Pi+vjeZc9A==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/gatsby-plugin-offline/-/gatsby-plugin-offline-3.1.2.tgz", + "integrity": "sha512-RYX+tXO0/UGnhDCIcyloUD2veTqLUhOliNF7nyzYMEQKRtbqoIcJkYnJD5rfLWCvM5zqJgcIlr+lpFodA+yp6g==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "idb-keyval": "^3.2.0", "lodash": "^4.17.15", @@ -8104,14 +8516,14 @@ } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" @@ -8125,23 +8537,23 @@ } }, "gatsby-plugin-react-helmet": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.1.24.tgz", - "integrity": "sha512-kLR/RMDBVriJptsJufoL1UBVHgq2fZIMXen7nru2ugGn0m8xwpArFoOz6meYlpiDB3Z41eYR/+Nr8GizQnYcxg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.2.1.tgz", + "integrity": "sha512-5oarZdVvp3k3keG26eVFagVHLYw7wCGs/MXRYQg8MEyJewU3X4Uc0eo7qu4TM5EIuZ2ekaL14r86RB6RM5TORA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-plugin-sharp": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.13.tgz", - "integrity": "sha512-ogRe5CxBIBZ0R76t7F3F1ji00BO7qnTO4vZkREaSxDBwgY6SOGKT8uie497Ej6usfarc9XQ/jMnXBu5EkrT4tA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.5.3.tgz", + "integrity": "sha512-/qx0QJNXsmHudEGlRm6oqkq+X228hGBJ6KjCJpJK5bUwWdhcZRJNar337g/2BXPchaxk1emJTUK9y+qSvVpPvw==", "requires": { "@babel/runtime": "^7.8.7", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -8153,7 +8565,7 @@ "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", - "sharp": "^0.23.4", + "sharp": "^0.25.1", "svgo": "1.3.2", "uuid": "^3.4.0" }, @@ -8174,20 +8586,20 @@ } }, "gatsby-plugin-typography": { - "version": "2.3.25", - "resolved": "https://registry.npmjs.org/gatsby-plugin-typography/-/gatsby-plugin-typography-2.3.25.tgz", - "integrity": "sha512-Ju/2LL1DGr0iAV6i86UIJbYgKRkMISCBgwdkMnAwuQH8Kh4cn61PkYeydUJJSQnsvKz3/Xk4syZGu3/jqDGKRg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-typography/-/gatsby-plugin-typography-2.4.1.tgz", + "integrity": "sha512-OROPbhiMgbVNrLj4T24ScTqE2sKT+DuRA/toSsVVusA8u53V66mS3+koWZd6rJ/26uquBF7OlL6uHtteK/sOjQ==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -8202,9 +8614,9 @@ } }, "gatsby-remark-copy-linked-files": { - "version": "2.1.40", - "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.1.40.tgz", - "integrity": "sha512-htZTd5rD46rg4j6KykJJE/GnV+ONidanyDlZWBJyvmIM97Jmcgh6FLpwy68PCzjw32JBdow3Wu2H//vvGYdBYw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.2.1.tgz", + "integrity": "sha512-xTy52n0K+fF4aXCNYkpH1HdhYy47GwLG2tE5H+xIisyEQiCr5XA555yQdS0U4MRtDZEyfX4TB+XTwaNhOgTPgw==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", @@ -8224,14 +8636,14 @@ } }, "gatsby-remark-images": { - "version": "3.1.50", - "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.1.50.tgz", - "integrity": "sha512-lY3hTNB6KUGlmKUKoc2D3U+9FJrlPjwqvKVDXbGGj71xKkXtBt4ns1AqmdTiX+v8m2OpgzEcwlAxA/4wHF+dTg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.2.1.tgz", + "integrity": "sha512-3zzLRjfTiXG4u8kFK17tZYpu3FNIirfdaOt7ZtNyfaowLcB+Ok67KCweZlHlvr/+Zvj+gvXAHWycMnMQqlK0iw==", "requires": { "@babel/runtime": "^7.8.7", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "is-relative-url": "^3.0.0", "lodash": "^4.17.15", "mdast-util-definitions": "^1.2.5", @@ -8264,9 +8676,9 @@ } }, "gatsby-remark-prismjs": { - "version": "3.3.36", - "resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-3.3.36.tgz", - "integrity": "sha512-zB3ugln115JMrypaf1FqllilJx5C56Vw6ze12MLw5BLlWUAPXbteTWtWbFHKPeLK6tSQDLs97d8zFYTqySgSuw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-3.4.1.tgz", + "integrity": "sha512-DPg4PjalrElXXZ3KZRiWiJiHIsXaee51nN2hCoGC2hfaXW8VdSjXhpBSSps9OWuB+QNmdTp/EP3FDiiwImjpUw==", "requires": { "@babel/runtime": "^7.8.7", "parse-numeric-range": "^0.0.2", @@ -8274,9 +8686,9 @@ } }, "gatsby-remark-responsive-iframe": { - "version": "2.2.34", - "resolved": "https://registry.npmjs.org/gatsby-remark-responsive-iframe/-/gatsby-remark-responsive-iframe-2.2.34.tgz", - "integrity": "sha512-Fl+TKuK8KZZ7mVoUIXCaWB/MLgpwnXUHzY6Qtsx6zWre3x1IuQ9m2/OacvibAMLiyxqBkJJO8CjZ8TXIbf48dg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-responsive-iframe/-/gatsby-remark-responsive-iframe-2.3.1.tgz", + "integrity": "sha512-c0wXTQHWeo8eOeCJLZCZ32jWsZKpEPB/npXmQF8hYmh3NurdGYJ4xSQW6IWMu+1k0w/ueSVdf8s7U7Ghq9o0cw==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", @@ -8293,9 +8705,9 @@ } }, "gatsby-remark-smartypants": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.1.23.tgz", - "integrity": "sha512-Sjehajgd2TZvtMqux/7QXC8xC1DSzzBOPlYwM1J3neJhYDlOkqqF0l9HYZ6yjJ3f9rfD68flt9TzMqWVETWzSg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.2.1.tgz", + "integrity": "sha512-ivKkyy4Q17uRJ7D4Xu8lg0b5QF4BHz3MiwVguJlB1wGS2nbDI1L6BNoMZ7ftx5KLVYNL3XbkvMGcsqw7Qg6wZQ==", "requires": { "@babel/runtime": "^7.8.7", "retext": "^5.0.0", @@ -8304,9 +8716,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -8314,8 +8726,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -8329,13 +8741,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8344,7 +8774,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -8374,13 +8804,13 @@ } }, "gatsby-transformer-remark": { - "version": "2.6.59", - "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-2.6.59.tgz", - "integrity": "sha512-EL2S85aMtJadVsgKRI7hUZIaW4z5i4lLHXnivveEytu05f+GLnPKmBJB82n4LIRo6p+ebSLGx8Iql+pgy41WIQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-2.7.1.tgz", + "integrity": "sha512-9geE8itjePDvaa0uWmyRgi2emPt9ut420YyjaNJ1/4eZw9Yj8zAuCdancw7j1buhL0UAxgQ2YseO6+MWTHEoMw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gray-matter": "^4.0.2", "hast-util-raw": "^4.0.0", "hast-util-to-html": "^4.0.1", @@ -8409,9 +8839,9 @@ } }, "gatsby-transformer-sharp": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.3.19.tgz", - "integrity": "sha512-V3OoG9R0k+dUcJiHoI3miHrmW2kcTj8FD4GT3XZHXmpoJNIUJ/2a78+O0m6Px/3F8EzafGo35id4fFhLePZdsw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.4.3.tgz", + "integrity": "sha512-sBEgyx9q/I9phIuOq87BqDjtdpvsLKQPDXHzDmX/OcdwbfjS7HtmjhJcV2fCdTMEYKwK+s/iI1gamTtNe95/5w==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", @@ -8419,7 +8849,7 @@ "potrace": "^2.1.2", "probe-image-size": "^4.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gauge": { @@ -8753,9 +9183,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -8837,9 +9267,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "har-schema": { "version": "2.0.0", @@ -10381,15 +10811,23 @@ } }, "jimp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", - "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", - "requires": { - "@jimp/custom": "^0.6.8", - "@jimp/plugins": "^0.6.8", - "@jimp/types": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", + "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "jpeg-js": { @@ -10626,12 +11064,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -10945,11 +11383,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -11511,20 +11944,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, "modularscale": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/modularscale/-/modularscale-1.0.2.tgz", @@ -11603,7 +12034,8 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -11666,6 +12098,11 @@ "semver": "^5.4.1" } }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -11732,19 +12169,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -11849,9 +12276,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -12554,9 +12997,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -13352,11 +13795,11 @@ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" }, "potrace": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", - "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.5.tgz", + "integrity": "sha512-huAWS0flSZttRm+WA5IGSFxHLXgVd9JCGU8+heDD3fAvFmW1Wf1Y7qq3Un2hH2xBNMwDY7vP1PYA0VQUh7CC+Q==", "requires": { - "jimp": "^0.6.4" + "jimp": "^0.9.6" } }, "prebuild-install": { @@ -13458,9 +13901,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -13514,9 +13957,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -14217,9 +14660,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -14709,9 +15152,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -14803,12 +15246,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -15071,25 +15514,25 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", "requires": { "color": "^3.1.2", "detect-libc": "^1.0.3", - "nan": "^2.14.0", + "node-addon-api": "^2.0.0", "npmlog": "^4.1.2", "prebuild-install": "^5.3.3", - "semver": "^6.3.0", + "semver": "^7.1.3", "simple-get": "^3.1.0", - "tar": "^5.0.5", + "tar": "^6.0.1", "tunnel-agent": "^0.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" } } }, @@ -15126,9 +15569,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -15176,9 +15619,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -15569,9 +16012,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -15887,22 +16330,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -16172,18 +16635,23 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", "requires": { "chownr": "^1.1.3", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", + "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16192,12 +16660,12 @@ } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" } @@ -16246,9 +16714,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -16482,9 +16950,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -16601,9 +17069,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.0.tgz", + "integrity": "sha512-kVx7CDAsdBSWVf404Mw7oI9i09w5/mTT/Ruk+RWa64PLYKvsAucLLFHvQtnvjeADM4ZizxrvG5SHnF4Te4T2Cg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -17284,11 +17752,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -17333,14 +17801,14 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -17352,7 +17820,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -18149,9 +18617,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/blog/package.json b/starters/blog/package.json index 7758872be8d8b..c77802390b2c4 100644 --- a/starters/blog/package.json +++ b/starters/blog/package.json @@ -8,23 +8,23 @@ "url": "https://github.com/gatsbyjs/gatsby/issues" }, "dependencies": { - "gatsby": "^2.19.45", - "gatsby-image": "^2.2.44", - "gatsby-plugin-feed": "^2.3.29", - "gatsby-plugin-google-analytics": "^2.1.38", - "gatsby-plugin-manifest": "^2.2.48", - "gatsby-plugin-offline": "^3.0.41", - "gatsby-plugin-react-helmet": "^3.1.24", - "gatsby-plugin-sharp": "^2.4.13", - "gatsby-plugin-typography": "^2.3.25", - "gatsby-remark-copy-linked-files": "^2.1.40", - "gatsby-remark-images": "^3.1.50", - "gatsby-remark-prismjs": "^3.3.36", - "gatsby-remark-responsive-iframe": "^2.2.34", - "gatsby-remark-smartypants": "^2.1.23", - "gatsby-source-filesystem": "^2.1.56", - "gatsby-transformer-remark": "^2.6.59", - "gatsby-transformer-sharp": "^2.3.19", + "gatsby": "^2.20.12", + "gatsby-image": "^2.3.1", + "gatsby-plugin-feed": "^2.4.1", + "gatsby-plugin-google-analytics": "^2.2.2", + "gatsby-plugin-manifest": "^2.3.3", + "gatsby-plugin-offline": "^3.1.2", + "gatsby-plugin-react-helmet": "^3.2.1", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-plugin-typography": "^2.4.1", + "gatsby-remark-copy-linked-files": "^2.2.1", + "gatsby-remark-images": "^3.2.1", + "gatsby-remark-prismjs": "^3.4.1", + "gatsby-remark-responsive-iframe": "^2.3.1", + "gatsby-remark-smartypants": "^2.2.1", + "gatsby-source-filesystem": "^2.2.2", + "gatsby-transformer-remark": "^2.7.1", + "gatsby-transformer-sharp": "^2.4.3", "prismjs": "^1.19.0", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/starters/default/package-lock.json b/starters/default/package-lock.json index 27a42a857fd61..0fc5ffe484a3d 100644 --- a/starters/default/package-lock.json +++ b/starters/default/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -968,28 +1017,37 @@ } }, "@jimp/bmp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", - "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", - "core-js": "^2.5.7" + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", - "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^2.5.7", + "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -1004,6 +1062,11 @@ "ieee754": "^1.1.4" } }, + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -1012,254 +1075,526 @@ } }, "@jimp/custom": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", - "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { - "@jimp/core": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/gif": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", - "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "omggif": "^1.0.9" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/jpeg": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", - "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "jpeg-js": "^0.3.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blit": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", - "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blur": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", - "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-color": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", - "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "tinycolor2": "^1.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-contain": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", - "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-cover": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", - "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-crop": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", - "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-displace": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", - "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-dither": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", - "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-flip": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", - "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-gaussian": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", - "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-invert": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", - "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-mask": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", - "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-normalize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", - "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-print": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", - "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "load-bmfont": "^1.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-resize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", - "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-rotate": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", - "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-scale": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", - "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugins": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", - "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", - "requires": { - "@jimp/plugin-blit": "^0.6.8", - "@jimp/plugin-blur": "^0.6.8", - "@jimp/plugin-color": "^0.6.8", - "@jimp/plugin-contain": "^0.6.8", - "@jimp/plugin-cover": "^0.6.8", - "@jimp/plugin-crop": "^0.6.8", - "@jimp/plugin-displace": "^0.6.8", - "@jimp/plugin-dither": "^0.6.8", - "@jimp/plugin-flip": "^0.6.8", - "@jimp/plugin-gaussian": "^0.6.8", - "@jimp/plugin-invert": "^0.6.8", - "@jimp/plugin-mask": "^0.6.8", - "@jimp/plugin-normalize": "^0.6.8", - "@jimp/plugin-print": "^0.6.8", - "@jimp/plugin-resize": "^0.6.8", - "@jimp/plugin-rotate": "^0.6.8", - "@jimp/plugin-scale": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/png": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", - "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "pngjs": "^3.3.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/tiff": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", - "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", "utif": "^2.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/types": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", - "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", - "requires": { - "@jimp/bmp": "^0.6.8", - "@jimp/gif": "^0.6.8", - "@jimp/jpeg": "^0.6.8", - "@jimp/png": "^0.6.8", - "@jimp/tiff": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/utils": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", - "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@mikaelkristiansson/domready": { @@ -1407,9 +1742,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1514,9 +1849,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1534,27 +1869,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1572,42 +1907,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1634,160 +1969,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2182,17 +2516,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "aws-sign2": { @@ -2284,16 +2618,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2356,9 +2714,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2380,9 +2738,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2396,7 +2754,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -2779,13 +3137,24 @@ } }, "bl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz", - "integrity": "sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", "readable-stream": "^3.4.0" }, "dependencies": { + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3081,13 +3450,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3160,9 +3530,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3344,9 +3714,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "caseless": { "version": "0.12.0", @@ -3465,9 +3835,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -3688,9 +4058,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4428,17 +4798,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4477,9 +4868,9 @@ } }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4500,9 +4891,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4818,9 +5209,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5146,9 +5537,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5311,9 +5702,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5494,9 +5885,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5643,6 +6034,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5652,9 +6051,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5809,9 +6208,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -5863,9 +6262,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -5950,9 +6349,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -6057,9 +6456,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -6085,11 +6484,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -6225,9 +6631,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6626,9 +7032,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -6650,9 +7056,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -6677,6 +7083,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -6822,9 +7239,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -6991,9 +7408,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -7040,7 +7457,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -7190,7 +7607,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -7212,11 +7629,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -7225,7 +7642,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -7252,7 +7669,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -7274,12 +7691,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -7349,17 +7767,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7491,9 +7902,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7506,18 +7917,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7556,13 +7967,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7583,13 +7994,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7623,12 +8034,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -7664,9 +8075,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -7683,8 +8094,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -7840,9 +8251,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -7850,17 +8261,17 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-image": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.2.44.tgz", - "integrity": "sha512-lKvBVc9lIYF1vrQ9b40Tmd5oOGTz69UXFT/gVtg5Ly5vVmDAU/4RdYbafQi6/KpCZRkAdO4ogtj0HB2YFjqfrQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.3.1.tgz", + "integrity": "sha512-VCJIb2Sp7Dcql+seZ14pqP2yL8oUlLin+HNEb5u8hcn3txkZhzIW3zwPQ3UwfPvi9Em3gBsEClCR6TQSw96J8g==", "requires": { "@babel/runtime": "^7.8.7", "object-fit-images": "^3.2.4", @@ -7868,49 +8279,49 @@ } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-manifest": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.48.tgz", - "integrity": "sha512-RWD2HlKT7TFcXs3SIiZTWjq3Ud4z79cms8pBLXjlNNddatnSNi0ne2RknERCQgmTQvcJ9eNeIzfzVtR3WAcBYA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.3.3.tgz", + "integrity": "sha512-lEval/fZaCqu9qlQMY38A8fuoJOpWRih3Hh0sLfM2Bt1dPlVkjDQqpHbQCfEinQA41c6JUdFAQFhdp5+G0kOwQ==", "requires": { "@babel/runtime": "^7.8.7", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gatsby-plugin-offline": { - "version": "3.0.41", - "resolved": "https://registry.npmjs.org/gatsby-plugin-offline/-/gatsby-plugin-offline-3.0.41.tgz", - "integrity": "sha512-UkeW+2/jVGP2AIZIDPSqUYk+G+5BYe5CX5zb7wrShYpjeY7WCFyEitQRdBF5qAKd9cBzMCCSIjh9Pi+vjeZc9A==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/gatsby-plugin-offline/-/gatsby-plugin-offline-3.1.2.tgz", + "integrity": "sha512-RYX+tXO0/UGnhDCIcyloUD2veTqLUhOliNF7nyzYMEQKRtbqoIcJkYnJD5rfLWCvM5zqJgcIlr+lpFodA+yp6g==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "idb-keyval": "^3.2.0", "lodash": "^4.17.15", @@ -7918,37 +8329,37 @@ } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-react-helmet": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.1.24.tgz", - "integrity": "sha512-kLR/RMDBVriJptsJufoL1UBVHgq2fZIMXen7nru2ugGn0m8xwpArFoOz6meYlpiDB3Z41eYR/+Nr8GizQnYcxg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.2.1.tgz", + "integrity": "sha512-5oarZdVvp3k3keG26eVFagVHLYw7wCGs/MXRYQg8MEyJewU3X4Uc0eo7qu4TM5EIuZ2ekaL14r86RB6RM5TORA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-plugin-sharp": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.13.tgz", - "integrity": "sha512-ogRe5CxBIBZ0R76t7F3F1ji00BO7qnTO4vZkREaSxDBwgY6SOGKT8uie497Ej6usfarc9XQ/jMnXBu5EkrT4tA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.5.3.tgz", + "integrity": "sha512-/qx0QJNXsmHudEGlRm6oqkq+X228hGBJ6KjCJpJK5bUwWdhcZRJNar337g/2BXPchaxk1emJTUK9y+qSvVpPvw==", "requires": { "@babel/runtime": "^7.8.7", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -7960,7 +8371,7 @@ "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", - "sharp": "^0.23.4", + "sharp": "^0.25.1", "svgo": "1.3.2", "uuid": "^3.4.0" }, @@ -7976,12 +8387,12 @@ } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -7996,9 +8407,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -8006,8 +8417,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -8021,13 +8432,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8036,7 +8465,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -8061,9 +8490,9 @@ } }, "gatsby-transformer-sharp": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.3.19.tgz", - "integrity": "sha512-V3OoG9R0k+dUcJiHoI3miHrmW2kcTj8FD4GT3XZHXmpoJNIUJ/2a78+O0m6Px/3F8EzafGo35id4fFhLePZdsw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.4.3.tgz", + "integrity": "sha512-sBEgyx9q/I9phIuOq87BqDjtdpvsLKQPDXHzDmX/OcdwbfjS7HtmjhJcV2fCdTMEYKwK+s/iI1gamTtNe95/5w==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", @@ -8071,7 +8500,7 @@ "potrace": "^2.1.2", "probe-image-size": "^4.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gauge": { @@ -8381,9 +8810,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -8449,9 +8878,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "har-schema": { "version": "2.0.0", @@ -9828,15 +10257,23 @@ } }, "jimp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", - "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", - "requires": { - "@jimp/custom": "^0.6.8", - "@jimp/plugins": "^0.6.8", - "@jimp/types": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", + "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "jpeg-js": { @@ -10073,12 +10510,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -10357,11 +10794,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -10818,20 +11250,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, "moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -10902,7 +11332,8 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -10960,6 +11391,11 @@ "semver": "^5.4.1" } }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -11026,19 +11462,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -11143,9 +11569,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -11804,9 +12246,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -12602,11 +13044,11 @@ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" }, "potrace": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", - "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.5.tgz", + "integrity": "sha512-huAWS0flSZttRm+WA5IGSFxHLXgVd9JCGU8+heDD3fAvFmW1Wf1Y7qq3Un2hH2xBNMwDY7vP1PYA0VQUh7CC+Q==", "requires": { - "jimp": "^0.6.4" + "jimp": "^0.9.6" } }, "prebuild-install": { @@ -12700,9 +13142,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -12748,9 +13190,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -13446,9 +13888,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -13775,9 +14217,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -13816,12 +14258,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -14059,25 +14501,25 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", "requires": { "color": "^3.1.2", "detect-libc": "^1.0.3", - "nan": "^2.14.0", + "node-addon-api": "^2.0.0", "npmlog": "^4.1.2", "prebuild-install": "^5.3.3", - "semver": "^6.3.0", + "semver": "^7.1.3", "simple-get": "^3.1.0", - "tar": "^5.0.5", + "tar": "^6.0.1", "tunnel-agent": "^0.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" } } }, @@ -14114,9 +14556,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -14164,9 +14606,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -14552,9 +14994,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -14855,22 +15297,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -15116,18 +15578,23 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", "requires": { "chownr": "^1.1.3", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", + "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -15136,12 +15603,12 @@ } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" } @@ -15190,9 +15657,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -15400,9 +15867,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -15476,9 +15943,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.0.tgz", + "integrity": "sha512-kVx7CDAsdBSWVf404Mw7oI9i09w5/mTT/Ruk+RWa64PLYKvsAucLLFHvQtnvjeADM4ZizxrvG5SHnF4Te4T2Cg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -16014,11 +16481,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -16058,14 +16525,14 @@ } }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -16077,7 +16544,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -16857,9 +17324,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/default/package.json b/starters/default/package.json index ae37fb7940281..81e2abca4de23 100644 --- a/starters/default/package.json +++ b/starters/default/package.json @@ -5,14 +5,14 @@ "version": "0.1.0", "author": "Kyle Mathews ", "dependencies": { - "gatsby": "^2.19.45", - "gatsby-image": "^2.2.44", - "gatsby-plugin-manifest": "^2.2.48", - "gatsby-plugin-offline": "^3.0.41", - "gatsby-plugin-react-helmet": "^3.1.24", - "gatsby-plugin-sharp": "^2.4.13", - "gatsby-source-filesystem": "^2.1.56", - "gatsby-transformer-sharp": "^2.3.19", + "gatsby": "^2.20.12", + "gatsby-image": "^2.3.1", + "gatsby-plugin-manifest": "^2.3.3", + "gatsby-plugin-offline": "^3.1.2", + "gatsby-plugin-react-helmet": "^3.2.1", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-source-filesystem": "^2.2.2", + "gatsby-transformer-sharp": "^2.4.3", "prop-types": "^15.7.2", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/starters/gatsby-starter-blog-theme-core/package-lock.json b/starters/gatsby-starter-blog-theme-core/package-lock.json index 49bae2d4593ff..1cb6f23820791 100644 --- a/starters/gatsby-starter-blog-theme-core/package-lock.json +++ b/starters/gatsby-starter-blog-theme-core/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -968,28 +1017,37 @@ } }, "@jimp/bmp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", - "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", - "core-js": "^2.5.7" + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", - "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^2.5.7", + "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -1004,6 +1062,11 @@ "ieee754": "^1.1.4" } }, + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -1012,273 +1075,545 @@ } }, "@jimp/custom": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", - "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { - "@jimp/core": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/gif": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", - "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "omggif": "^1.0.9" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/jpeg": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", - "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "jpeg-js": "^0.3.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blit": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", - "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blur": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", - "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-color": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", - "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "tinycolor2": "^1.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-contain": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", - "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-cover": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", - "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-crop": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", - "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-displace": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", - "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-dither": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", - "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-flip": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", - "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-gaussian": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", - "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-invert": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", - "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-mask": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", - "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-normalize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", - "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-print": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", - "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "load-bmfont": "^1.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-resize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", - "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-rotate": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", - "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-scale": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", - "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugins": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", - "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", - "requires": { - "@jimp/plugin-blit": "^0.6.8", - "@jimp/plugin-blur": "^0.6.8", - "@jimp/plugin-color": "^0.6.8", - "@jimp/plugin-contain": "^0.6.8", - "@jimp/plugin-cover": "^0.6.8", - "@jimp/plugin-crop": "^0.6.8", - "@jimp/plugin-displace": "^0.6.8", - "@jimp/plugin-dither": "^0.6.8", - "@jimp/plugin-flip": "^0.6.8", - "@jimp/plugin-gaussian": "^0.6.8", - "@jimp/plugin-invert": "^0.6.8", - "@jimp/plugin-mask": "^0.6.8", - "@jimp/plugin-normalize": "^0.6.8", - "@jimp/plugin-print": "^0.6.8", - "@jimp/plugin-resize": "^0.6.8", - "@jimp/plugin-rotate": "^0.6.8", - "@jimp/plugin-scale": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/png": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", - "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "pngjs": "^3.3.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/tiff": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", - "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", "utif": "^2.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/types": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", - "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", - "requires": { - "@jimp/bmp": "^0.6.8", - "@jimp/gif": "^0.6.8", - "@jimp/jpeg": "^0.6.8", - "@jimp/png": "^0.6.8", - "@jimp/tiff": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/utils": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", - "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@mdx-js/mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.7.tgz", - "integrity": "sha512-db1E3P0HCgSUX768Y/jIcr5h41VR5AsvaOmPTydltNM4R8Uh863IqDvnkpa7l829bY/tp6wrMBWM2NH0oLuxHw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.8.tgz", + "integrity": "sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA==", "requires": { "@babel/core": "7.8.4", "@babel/plugin-syntax-jsx": "7.8.3", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.5.7", - "babel-plugin-apply-mdx-type-prop": "^1.5.7", - "babel-plugin-extract-import-names": "^1.5.7", + "@mdx-js/util": "^1.5.8", + "babel-plugin-apply-mdx-type-prop": "^1.5.8", + "babel-plugin-extract-import-names": "^1.5.8", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.1", + "hast-util-raw": "5.0.2", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "7.0.0", - "remark-mdx": "^1.5.7", + "remark-mdx": "^1.5.8", "remark-parse": "7.0.2", "remark-squeeze-paragraphs": "3.0.4", "style-to-object": "0.3.0", @@ -1325,9 +1660,9 @@ "integrity": "sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw==" }, "@mdx-js/util": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.7.tgz", - "integrity": "sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.8.tgz", + "integrity": "sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ==" }, "@mikaelkristiansson/domready": { "version": "1.0.10", @@ -1474,9 +1809,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1581,9 +1916,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1601,27 +1936,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1662,42 +1997,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1724,160 +2059,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2277,17 +2611,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "aws-sign2": { @@ -2371,16 +2705,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2425,12 +2783,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.7.tgz", - "integrity": "sha512-SUDwTmMmxzaAZ1YfAPnL2UI3q/JEs+fekx/QTZYEgK+cVGMwS/PrCeK9UDlTHOYJr9b4mieR+iLhm43jrav2WA==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz", + "integrity": "sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA==", "requires": { "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.5.7" + "@mdx-js/util": "^1.5.8" } }, "babel-plugin-dynamic-import-node": { @@ -2442,9 +2800,9 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.7.tgz", - "integrity": "sha512-kZX4g9ehTyxjdbq2rb8wW307+jNu5z3KllYs8cnbapSwclT9wBErJoqvKKZAkuiaufp0r+7WaIvjhKtJ7QlG3A==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz", + "integrity": "sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g==", "requires": { "@babel/helper-plugin-utils": "7.8.3" } @@ -2460,9 +2818,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", @@ -2470,9 +2828,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2486,7 +2844,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -3160,13 +3518,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3239,9 +3598,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3437,9 +3796,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "caseless": { "version": "0.12.0", @@ -3618,9 +3977,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -3841,9 +4200,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4605,17 +4964,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4659,9 +5039,9 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4682,9 +5062,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4977,9 +5357,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5313,9 +5693,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5486,9 +5866,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5669,9 +6049,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5818,6 +6198,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5827,9 +6215,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5984,9 +6372,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -6038,9 +6426,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -6125,9 +6513,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -6232,9 +6620,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -6260,11 +6648,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -6408,9 +6803,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6804,9 +7199,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -6828,9 +7223,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -6855,6 +7250,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -7000,9 +7406,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -7169,9 +7575,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -7218,7 +7624,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -7368,7 +7774,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -7390,11 +7796,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -7403,7 +7809,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -7430,7 +7836,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -7452,12 +7858,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -7527,17 +7934,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7669,9 +8069,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7684,18 +8084,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7734,13 +8134,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7761,13 +8161,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7801,12 +8201,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -7842,9 +8242,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -7861,8 +8261,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -8018,9 +8418,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -8028,42 +8428,42 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-mdx": { - "version": "1.0.83", - "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.0.83.tgz", - "integrity": "sha512-jt4BuBkvs1TpYMFFc2Rac7e+4OmeD1wtY/DHse3vtJh695/tmhuybQ6lAKFE/mw8i/d63u6L5uXpgCo7Qt1iyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.4.tgz", + "integrity": "sha512-id2/LALN7eseTGN05v1n16XCYggrl2UTzWOJOQME9rh25jNK+KT5ywaPY6vNYimeAW7wWdad3rl6hORpv4L6yw==", "requires": { "@babel/core": "^7.8.7", "@babel/generator": "^7.8.8", @@ -8080,9 +8480,9 @@ "escape-string-regexp": "^1.0.5", "eval": "^0.1.4", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gray-matter": "^4.0.2", - "json5": "^2.1.1", + "json5": "^2.1.2", "loader-utils": "^1.4.0", "lodash": "^4.17.15", "mdast-util-to-string": "^1.1.0", @@ -8146,29 +8546,29 @@ } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-sharp": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.13.tgz", - "integrity": "sha512-ogRe5CxBIBZ0R76t7F3F1ji00BO7qnTO4vZkREaSxDBwgY6SOGKT8uie497Ej6usfarc9XQ/jMnXBu5EkrT4tA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.5.3.tgz", + "integrity": "sha512-/qx0QJNXsmHudEGlRm6oqkq+X228hGBJ6KjCJpJK5bUwWdhcZRJNar337g/2BXPchaxk1emJTUK9y+qSvVpPvw==", "requires": { "@babel/runtime": "^7.8.7", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -8180,7 +8580,7 @@ "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", - "sharp": "^0.23.4", + "sharp": "^0.25.1", "svgo": "1.3.2", "uuid": "^3.4.0" }, @@ -8196,12 +8596,12 @@ } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -8216,9 +8616,9 @@ } }, "gatsby-remark-copy-linked-files": { - "version": "2.1.40", - "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.1.40.tgz", - "integrity": "sha512-htZTd5rD46rg4j6KykJJE/GnV+ONidanyDlZWBJyvmIM97Jmcgh6FLpwy68PCzjw32JBdow3Wu2H//vvGYdBYw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.2.1.tgz", + "integrity": "sha512-xTy52n0K+fF4aXCNYkpH1HdhYy47GwLG2tE5H+xIisyEQiCr5XA555yQdS0U4MRtDZEyfX4TB+XTwaNhOgTPgw==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", @@ -8276,14 +8676,14 @@ } }, "gatsby-remark-images": { - "version": "3.1.50", - "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.1.50.tgz", - "integrity": "sha512-lY3hTNB6KUGlmKUKoc2D3U+9FJrlPjwqvKVDXbGGj71xKkXtBt4ns1AqmdTiX+v8m2OpgzEcwlAxA/4wHF+dTg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.2.1.tgz", + "integrity": "sha512-3zzLRjfTiXG4u8kFK17tZYpu3FNIirfdaOt7ZtNyfaowLcB+Ok67KCweZlHlvr/+Zvj+gvXAHWycMnMQqlK0iw==", "requires": { "@babel/runtime": "^7.8.7", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "is-relative-url": "^3.0.0", "lodash": "^4.17.15", "mdast-util-definitions": "^1.2.5", @@ -8346,9 +8746,9 @@ } }, "gatsby-remark-smartypants": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.1.23.tgz", - "integrity": "sha512-Sjehajgd2TZvtMqux/7QXC8xC1DSzzBOPlYwM1J3neJhYDlOkqqF0l9HYZ6yjJ3f9rfD68flt9TzMqWVETWzSg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.2.1.tgz", + "integrity": "sha512-ivKkyy4Q17uRJ7D4Xu8lg0b5QF4BHz3MiwVguJlB1wGS2nbDI1L6BNoMZ7ftx5KLVYNL3XbkvMGcsqw7Qg6wZQ==", "requires": { "@babel/runtime": "^7.8.7", "retext": "^5.0.0", @@ -8367,9 +8767,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -8377,8 +8777,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -8392,13 +8792,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8407,7 +8825,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -8432,26 +8850,26 @@ } }, "gatsby-theme-blog-core": { - "version": "1.2.29", - "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.2.29.tgz", - "integrity": "sha512-cwq8eFQPjsLwWL3HZfdCESh3lV8MDG2h9XMgWRpubaLlwGh17B1bdJgtT6jMgRRFUcDp+9in+vxxjiVB/PUvGA==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.3.12.tgz", + "integrity": "sha512-W3iqU97Ej9gfLqiagkRLNDxLjL847fQf4aZxZyC2fmo3W3R7AY1SwA1iV9nREi/qsay+duQGjD1gpK+q5CVo2Q==", "requires": { "@mdx-js/mdx": "^1.5.7", - "gatsby-core-utils": "^1.0.34", - "gatsby-plugin-mdx": "^1.0.83", - "gatsby-plugin-sharp": "^2.4.13", - "gatsby-remark-copy-linked-files": "^2.1.40", - "gatsby-remark-images": "^3.1.50", - "gatsby-remark-smartypants": "^2.1.23", - "gatsby-source-filesystem": "^2.1.56", - "gatsby-transformer-sharp": "^2.3.19", + "gatsby-core-utils": "^1.1.1", + "gatsby-plugin-mdx": "^1.1.4", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-remark-copy-linked-files": "^2.2.1", + "gatsby-remark-images": "^3.2.1", + "gatsby-remark-smartypants": "^2.2.1", + "gatsby-source-filesystem": "^2.2.2", + "gatsby-transformer-sharp": "^2.4.3", "remark-slug": "^5.1.2" } }, "gatsby-transformer-sharp": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.3.19.tgz", - "integrity": "sha512-V3OoG9R0k+dUcJiHoI3miHrmW2kcTj8FD4GT3XZHXmpoJNIUJ/2a78+O0m6Px/3F8EzafGo35id4fFhLePZdsw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.4.3.tgz", + "integrity": "sha512-sBEgyx9q/I9phIuOq87BqDjtdpvsLKQPDXHzDmX/OcdwbfjS7HtmjhJcV2fCdTMEYKwK+s/iI1gamTtNe95/5w==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", @@ -8459,7 +8877,7 @@ "potrace": "^2.1.2", "probe-image-size": "^4.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gauge": { @@ -8779,9 +9197,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -8858,9 +9276,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "har-schema": { "version": "2.0.0", @@ -9056,17 +9474,17 @@ "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" }, "hast-util-raw": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.1.tgz", - "integrity": "sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", + "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", "requires": { "hast-util-from-parse5": "^5.0.0", "hast-util-to-parse5": "^5.0.0", - "html-void-elements": "^1.0.1", + "html-void-elements": "^1.0.0", "parse5": "^5.0.0", "unist-util-position": "^3.0.0", "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", + "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, @@ -10379,15 +10797,23 @@ } }, "jimp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", - "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", - "requires": { - "@jimp/custom": "^0.6.8", - "@jimp/plugins": "^0.6.8", - "@jimp/types": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", + "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "jpeg-js": { @@ -10624,12 +11050,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -10954,11 +11380,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -11532,20 +11953,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, "moment": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", @@ -11616,7 +12035,8 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -11687,6 +12107,11 @@ "semver": "^5.4.1" } }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -11753,19 +12178,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -11870,9 +12285,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -12597,9 +13028,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -13395,11 +13826,11 @@ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" }, "potrace": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", - "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.5.tgz", + "integrity": "sha512-huAWS0flSZttRm+WA5IGSFxHLXgVd9JCGU8+heDD3fAvFmW1Wf1Y7qq3Un2hH2xBNMwDY7vP1PYA0VQUh7CC+Q==", "requires": { - "jimp": "^0.6.4" + "jimp": "^0.9.6" } }, "prebuild-install": { @@ -13487,9 +13918,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -13543,9 +13974,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -14216,9 +14647,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -14375,15 +14806,15 @@ } }, "remark-mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.7.tgz", - "integrity": "sha512-f13ot+zaByDXYuOC4FWTpQCGP/rNbaxdhs2mLlW7ZBipm3JYR2ASFSL7RC3R7ytzm3n8v6hhcFxDKU+CwC2f4g==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.8.tgz", + "integrity": "sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ==", "requires": { "@babel/core": "7.8.4", "@babel/helper-plugin-utils": "7.8.3", "@babel/plugin-proposal-object-rest-spread": "7.8.3", "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.5.7", + "@mdx-js/util": "^1.5.8", "is-alphabetical": "1.0.4", "remark-parse": "7.0.2", "unified": "8.4.2" @@ -14411,6 +14842,15 @@ "source-map": "^0.5.0" } }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -14848,9 +15288,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -14889,12 +15329,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -15160,25 +15600,25 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", "requires": { "color": "^3.1.2", "detect-libc": "^1.0.3", - "nan": "^2.14.0", + "node-addon-api": "^2.0.0", "npmlog": "^4.1.2", "prebuild-install": "^5.3.3", - "semver": "^6.3.0", + "semver": "^7.1.3", "simple-get": "^3.1.0", - "tar": "^5.0.5", + "tar": "^6.0.1", "tunnel-agent": "^0.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" } } }, @@ -15215,9 +15655,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -15265,9 +15705,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -15666,9 +16106,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -16007,22 +16447,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -16275,18 +16735,23 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", "requires": { "chownr": "^1.1.3", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", + "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16295,24 +16760,35 @@ } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" }, "dependencies": { "bl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz", - "integrity": "sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -16371,9 +16847,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -16610,9 +17086,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -16686,9 +17162,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.0.tgz", + "integrity": "sha512-kVx7CDAsdBSWVf404Mw7oI9i09w5/mTT/Ruk+RWa64PLYKvsAucLLFHvQtnvjeADM4ZizxrvG5SHnF4Te4T2Cg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -17395,9 +17871,9 @@ } }, "vfile": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.3.tgz", - "integrity": "sha512-lREgT5sF05TQk68LO6APy0In+TkFGnFEgKChK2+PHIaTrFQ9oHCKXznZ7VILwgYVBcl0gv4lGATFZBLhi2kVQg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -17419,9 +17895,9 @@ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -17441,11 +17917,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -17490,14 +17966,14 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -17509,7 +17985,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -18143,9 +18619,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/gatsby-starter-blog-theme-core/package.json b/starters/gatsby-starter-blog-theme-core/package.json index 8a842cfb00fa8..6b54fdb2ede9d 100644 --- a/starters/gatsby-starter-blog-theme-core/package.json +++ b/starters/gatsby-starter-blog-theme-core/package.json @@ -9,8 +9,8 @@ "clean": "gatsby clean" }, "dependencies": { - "gatsby": "^2.19.45", - "gatsby-theme-blog-core": "^1.2.29", + "gatsby": "^2.20.12", + "gatsby-theme-blog-core": "^1.3.12", "@mdx-js/react": "^1.5.7", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/starters/gatsby-starter-blog-theme/package-lock.json b/starters/gatsby-starter-blog-theme/package-lock.json index 2e1ab43fcf188..dc0c1d6acb972 100644 --- a/starters/gatsby-starter-blog-theme/package-lock.json +++ b/starters/gatsby-starter-blog-theme/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1076,28 +1125,37 @@ } }, "@jimp/bmp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", - "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", - "core-js": "^2.5.7" + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", - "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^2.5.7", + "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -1112,6 +1170,11 @@ "ieee754": "^1.1.4" } }, + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -1120,273 +1183,545 @@ } }, "@jimp/custom": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", - "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { - "@jimp/core": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/gif": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", - "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "omggif": "^1.0.9" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/jpeg": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", - "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "jpeg-js": "^0.3.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blit": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", - "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blur": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", - "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-color": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", - "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "tinycolor2": "^1.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-contain": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", - "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-cover": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", - "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-crop": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", - "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-displace": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", - "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-dither": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", - "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-flip": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", - "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-gaussian": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", - "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-invert": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", - "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-mask": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", - "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-normalize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", - "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-print": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", - "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "load-bmfont": "^1.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-resize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", - "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-rotate": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", - "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-scale": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", - "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugins": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", - "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", - "requires": { - "@jimp/plugin-blit": "^0.6.8", - "@jimp/plugin-blur": "^0.6.8", - "@jimp/plugin-color": "^0.6.8", - "@jimp/plugin-contain": "^0.6.8", - "@jimp/plugin-cover": "^0.6.8", - "@jimp/plugin-crop": "^0.6.8", - "@jimp/plugin-displace": "^0.6.8", - "@jimp/plugin-dither": "^0.6.8", - "@jimp/plugin-flip": "^0.6.8", - "@jimp/plugin-gaussian": "^0.6.8", - "@jimp/plugin-invert": "^0.6.8", - "@jimp/plugin-mask": "^0.6.8", - "@jimp/plugin-normalize": "^0.6.8", - "@jimp/plugin-print": "^0.6.8", - "@jimp/plugin-resize": "^0.6.8", - "@jimp/plugin-rotate": "^0.6.8", - "@jimp/plugin-scale": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/png": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", - "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "pngjs": "^3.3.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/tiff": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", - "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", "utif": "^2.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/types": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", - "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", - "requires": { - "@jimp/bmp": "^0.6.8", - "@jimp/gif": "^0.6.8", - "@jimp/jpeg": "^0.6.8", - "@jimp/png": "^0.6.8", - "@jimp/tiff": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/utils": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", - "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@mdx-js/mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.7.tgz", - "integrity": "sha512-db1E3P0HCgSUX768Y/jIcr5h41VR5AsvaOmPTydltNM4R8Uh863IqDvnkpa7l829bY/tp6wrMBWM2NH0oLuxHw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.8.tgz", + "integrity": "sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA==", "requires": { "@babel/core": "7.8.4", "@babel/plugin-syntax-jsx": "7.8.3", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.5.7", - "babel-plugin-apply-mdx-type-prop": "^1.5.7", - "babel-plugin-extract-import-names": "^1.5.7", + "@mdx-js/util": "^1.5.8", + "babel-plugin-apply-mdx-type-prop": "^1.5.8", + "babel-plugin-extract-import-names": "^1.5.8", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.1", + "hast-util-raw": "5.0.2", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "7.0.0", - "remark-mdx": "^1.5.7", + "remark-mdx": "^1.5.8", "remark-parse": "7.0.2", "remark-squeeze-paragraphs": "3.0.4", "style-to-object": "0.3.0", @@ -1428,14 +1763,14 @@ } }, "@mdx-js/react": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.7.tgz", - "integrity": "sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.8.tgz", + "integrity": "sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg==" }, "@mdx-js/util": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.7.tgz", - "integrity": "sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.8.tgz", + "integrity": "sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ==" }, "@mikaelkristiansson/domready": { "version": "1.0.10", @@ -1582,9 +1917,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1712,9 +2047,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1732,27 +2067,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1793,42 +2128,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1855,160 +2190,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2408,17 +2742,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "aws-sign2": { @@ -2502,16 +2836,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2556,12 +2914,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.7.tgz", - "integrity": "sha512-SUDwTmMmxzaAZ1YfAPnL2UI3q/JEs+fekx/QTZYEgK+cVGMwS/PrCeK9UDlTHOYJr9b4mieR+iLhm43jrav2WA==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz", + "integrity": "sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA==", "requires": { "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.5.7" + "@mdx-js/util": "^1.5.8" } }, "babel-plugin-dynamic-import-node": { @@ -2573,9 +2931,9 @@ } }, "babel-plugin-emotion": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", - "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@emotion/hash": "0.8.0", @@ -2590,9 +2948,9 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.7.tgz", - "integrity": "sha512-kZX4g9ehTyxjdbq2rb8wW307+jNu5z3KllYs8cnbapSwclT9wBErJoqvKKZAkuiaufp0r+7WaIvjhKtJ7QlG3A==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz", + "integrity": "sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g==", "requires": { "@babel/helper-plugin-utils": "7.8.3" } @@ -2608,9 +2966,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-syntax-jsx": { "version": "6.18.0", @@ -2623,9 +2981,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2639,7 +2997,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -3313,13 +3671,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3392,9 +3751,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3590,9 +3949,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "caseless": { "version": "0.12.0", @@ -3771,9 +4130,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -3994,9 +4353,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4782,17 +5141,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4836,9 +5216,9 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4859,9 +5239,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -5154,9 +5534,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5490,9 +5870,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5663,9 +6043,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5846,9 +6226,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5995,6 +6375,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -6004,9 +6392,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -6161,9 +6549,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -6215,9 +6603,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -6302,9 +6690,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -6409,9 +6797,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -6437,11 +6825,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -6585,9 +6980,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6981,9 +7376,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -7005,9 +7400,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -7032,6 +7427,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -7182,9 +7588,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -7351,9 +7757,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -7400,7 +7806,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -7550,7 +7956,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -7572,11 +7978,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -7585,7 +7991,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -7612,7 +8018,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -7634,12 +8040,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -7709,17 +8116,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7851,9 +8251,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7866,18 +8266,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7916,13 +8316,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7943,13 +8343,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7983,12 +8383,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -8024,9 +8424,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8043,8 +8443,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -8200,9 +8600,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -8210,17 +8610,17 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-image": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.2.44.tgz", - "integrity": "sha512-lKvBVc9lIYF1vrQ9b40Tmd5oOGTz69UXFT/gVtg5Ly5vVmDAU/4RdYbafQi6/KpCZRkAdO4ogtj0HB2YFjqfrQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.3.1.tgz", + "integrity": "sha512-VCJIb2Sp7Dcql+seZ14pqP2yL8oUlLin+HNEb5u8hcn3txkZhzIW3zwPQ3UwfPvi9Em3gBsEClCR6TQSw96J8g==", "requires": { "@babel/runtime": "^7.8.7", "object-fit-images": "^3.2.4", @@ -8228,43 +8628,43 @@ } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-emotion": { - "version": "4.1.25", - "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.1.25.tgz", - "integrity": "sha512-VP+s3mEfvaTjKUOVsDRgy/HPfDJQHeZD/Z/WBKgQetLgmvrGVnxm9NEMCJWyJm9LxQ791bfwoP6XNwOYscU8sA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.2.1.tgz", + "integrity": "sha512-ygXxkpnWJdDOAgb1XA9TbVCRLkaAYTFLTsqVQXMBhnrknb5iPNO+MP0fZ5LRqWgBALyJ629nxs0efUpnT/RSWw==", "requires": { "@babel/runtime": "^7.8.7", "@emotion/babel-preset-css-prop": "^10.0.27" } }, "gatsby-plugin-feed": { - "version": "2.3.29", - "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.3.29.tgz", - "integrity": "sha512-fbgmUdjcTj3pzDJa/y2MhSRAAYf6S5YVEN/CB+fqvaHyLq6gzRqLTEIYYnwtXhQk/14Zq6bntsRxH/2dA0J9bg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.4.1.tgz", + "integrity": "sha512-4+vdto148cIKPJT7bI9i//opwUu6ZqO5l1WNGAGubByWPLIA47VadcC5GzMHpWVtTMZugnmfotZI8t/3iCNP3w==", "requires": { "@babel/runtime": "^7.8.7", "@hapi/joi": "^15.1.1", @@ -8274,9 +8674,9 @@ } }, "gatsby-plugin-mdx": { - "version": "1.0.83", - "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.0.83.tgz", - "integrity": "sha512-jt4BuBkvs1TpYMFFc2Rac7e+4OmeD1wtY/DHse3vtJh695/tmhuybQ6lAKFE/mw8i/d63u6L5uXpgCo7Qt1iyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.4.tgz", + "integrity": "sha512-id2/LALN7eseTGN05v1n16XCYggrl2UTzWOJOQME9rh25jNK+KT5ywaPY6vNYimeAW7wWdad3rl6hORpv4L6yw==", "requires": { "@babel/core": "^7.8.7", "@babel/generator": "^7.8.8", @@ -8293,9 +8693,9 @@ "escape-string-regexp": "^1.0.5", "eval": "^0.1.4", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gray-matter": "^4.0.2", - "json5": "^2.1.1", + "json5": "^2.1.2", "loader-utils": "^1.4.0", "lodash": "^4.17.15", "mdast-util-to-string": "^1.1.0", @@ -8359,37 +8759,37 @@ } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-react-helmet": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.1.24.tgz", - "integrity": "sha512-kLR/RMDBVriJptsJufoL1UBVHgq2fZIMXen7nru2ugGn0m8xwpArFoOz6meYlpiDB3Z41eYR/+Nr8GizQnYcxg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.2.1.tgz", + "integrity": "sha512-5oarZdVvp3k3keG26eVFagVHLYw7wCGs/MXRYQg8MEyJewU3X4Uc0eo7qu4TM5EIuZ2ekaL14r86RB6RM5TORA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-plugin-sharp": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.13.tgz", - "integrity": "sha512-ogRe5CxBIBZ0R76t7F3F1ji00BO7qnTO4vZkREaSxDBwgY6SOGKT8uie497Ej6usfarc9XQ/jMnXBu5EkrT4tA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.5.3.tgz", + "integrity": "sha512-/qx0QJNXsmHudEGlRm6oqkq+X228hGBJ6KjCJpJK5bUwWdhcZRJNar337g/2BXPchaxk1emJTUK9y+qSvVpPvw==", "requires": { "@babel/runtime": "^7.8.7", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -8401,7 +8801,7 @@ "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", - "sharp": "^0.23.4", + "sharp": "^0.25.1", "svgo": "1.3.2", "uuid": "^3.4.0" }, @@ -8422,20 +8822,20 @@ "integrity": "sha512-AlQC+uC9lvrP3LlGsLe0f0azp7B5c49qWl4b3FDj8xbravBoqFmJT7XrNTpYYbxnCnx/K1v0QtwP8qindw0S2g==" }, "gatsby-plugin-twitter": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/gatsby-plugin-twitter/-/gatsby-plugin-twitter-2.1.21.tgz", - "integrity": "sha512-yg4JP6xX19v8PessCHAK3sP0V+xTz3Qlbg1wA1UZfRPIsldH20/FZ3NX4cCQKWDcnjsldVXRNYKLzdo5Xe1mfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-twitter/-/gatsby-plugin-twitter-2.2.1.tgz", + "integrity": "sha512-y2HvIt4LuINIX5uGFlLdnqbWoteg+Qt/OV/ub2aS412KJ76ofaTwrll+wzYOUw9n3tXWEP9KwKYZsOf7YU+QQA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -8450,9 +8850,9 @@ } }, "gatsby-remark-copy-linked-files": { - "version": "2.1.40", - "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.1.40.tgz", - "integrity": "sha512-htZTd5rD46rg4j6KykJJE/GnV+ONidanyDlZWBJyvmIM97Jmcgh6FLpwy68PCzjw32JBdow3Wu2H//vvGYdBYw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.2.1.tgz", + "integrity": "sha512-xTy52n0K+fF4aXCNYkpH1HdhYy47GwLG2tE5H+xIisyEQiCr5XA555yQdS0U4MRtDZEyfX4TB+XTwaNhOgTPgw==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", @@ -8510,14 +8910,14 @@ } }, "gatsby-remark-images": { - "version": "3.1.50", - "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.1.50.tgz", - "integrity": "sha512-lY3hTNB6KUGlmKUKoc2D3U+9FJrlPjwqvKVDXbGGj71xKkXtBt4ns1AqmdTiX+v8m2OpgzEcwlAxA/4wHF+dTg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.2.1.tgz", + "integrity": "sha512-3zzLRjfTiXG4u8kFK17tZYpu3FNIirfdaOt7ZtNyfaowLcB+Ok67KCweZlHlvr/+Zvj+gvXAHWycMnMQqlK0iw==", "requires": { "@babel/runtime": "^7.8.7", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "is-relative-url": "^3.0.0", "lodash": "^4.17.15", "mdast-util-definitions": "^1.2.5", @@ -8580,9 +8980,9 @@ } }, "gatsby-remark-smartypants": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.1.23.tgz", - "integrity": "sha512-Sjehajgd2TZvtMqux/7QXC8xC1DSzzBOPlYwM1J3neJhYDlOkqqF0l9HYZ6yjJ3f9rfD68flt9TzMqWVETWzSg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.2.1.tgz", + "integrity": "sha512-ivKkyy4Q17uRJ7D4Xu8lg0b5QF4BHz3MiwVguJlB1wGS2nbDI1L6BNoMZ7ftx5KLVYNL3XbkvMGcsqw7Qg6wZQ==", "requires": { "@babel/runtime": "^7.8.7", "retext": "^5.0.0", @@ -8601,9 +9001,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -8611,8 +9011,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -8626,13 +9026,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8641,7 +9059,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -8666,52 +9084,52 @@ } }, "gatsby-theme-blog": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/gatsby-theme-blog/-/gatsby-theme-blog-1.3.30.tgz", - "integrity": "sha512-92Wc6J2gcuPJ7KVhVkGEbazr4YMB9N+WRmUTED3WoFAe6TuZardOSie4gxP0L+7w5qsUJ6uAPIpGMIST6p0RDQ==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-blog/-/gatsby-theme-blog-1.4.12.tgz", + "integrity": "sha512-s/gJ0jE4YcUQvGBwZDb++Prgpf/QuH8PMpa1OR+R18Y869/pSWCHKSuThjm9jVWCzCNJVYPQ8ffNMXocM7XHEw==", "requires": { "@emotion/core": "^10.0.28", "@mdx-js/react": "^1.5.7", "@theme-ui/prism": "^0.2.50", "@theme-ui/typography": "^0.2.46", "deepmerge": "^4.2.2", - "gatsby-image": "^2.2.44", - "gatsby-plugin-emotion": "^4.1.25", - "gatsby-plugin-feed": "^2.3.29", - "gatsby-plugin-react-helmet": "^3.1.24", - "gatsby-plugin-theme-ui": "^0.2.43", - "gatsby-plugin-twitter": "^2.1.21", - "gatsby-theme-blog-core": "^1.2.29", + "gatsby-image": "^2.3.1", + "gatsby-plugin-emotion": "^4.2.1", + "gatsby-plugin-feed": "^2.4.1", + "gatsby-plugin-react-helmet": "^3.2.1", + "gatsby-plugin-theme-ui": "^0.2.53", + "gatsby-plugin-twitter": "^2.2.1", + "gatsby-theme-blog-core": "^1.3.12", "mdx-utils": "0.2.0", "react-helmet": "^5.2.1", "react-switch": "^5.0.1", - "theme-ui": "^0.2.49", + "theme-ui": "^0.2.52", "typeface-merriweather": "0.0.72", "typeface-montserrat": "0.0.75", "typography-theme-wordpress-2016": "^0.16.19" } }, "gatsby-theme-blog-core": { - "version": "1.2.29", - "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.2.29.tgz", - "integrity": "sha512-cwq8eFQPjsLwWL3HZfdCESh3lV8MDG2h9XMgWRpubaLlwGh17B1bdJgtT6jMgRRFUcDp+9in+vxxjiVB/PUvGA==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.3.12.tgz", + "integrity": "sha512-W3iqU97Ej9gfLqiagkRLNDxLjL847fQf4aZxZyC2fmo3W3R7AY1SwA1iV9nREi/qsay+duQGjD1gpK+q5CVo2Q==", "requires": { "@mdx-js/mdx": "^1.5.7", - "gatsby-core-utils": "^1.0.34", - "gatsby-plugin-mdx": "^1.0.83", - "gatsby-plugin-sharp": "^2.4.13", - "gatsby-remark-copy-linked-files": "^2.1.40", - "gatsby-remark-images": "^3.1.50", - "gatsby-remark-smartypants": "^2.1.23", - "gatsby-source-filesystem": "^2.1.56", - "gatsby-transformer-sharp": "^2.3.19", + "gatsby-core-utils": "^1.1.1", + "gatsby-plugin-mdx": "^1.1.4", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-remark-copy-linked-files": "^2.2.1", + "gatsby-remark-images": "^3.2.1", + "gatsby-remark-smartypants": "^2.2.1", + "gatsby-source-filesystem": "^2.2.2", + "gatsby-transformer-sharp": "^2.4.3", "remark-slug": "^5.1.2" } }, "gatsby-transformer-sharp": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.3.19.tgz", - "integrity": "sha512-V3OoG9R0k+dUcJiHoI3miHrmW2kcTj8FD4GT3XZHXmpoJNIUJ/2a78+O0m6Px/3F8EzafGo35id4fFhLePZdsw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.4.3.tgz", + "integrity": "sha512-sBEgyx9q/I9phIuOq87BqDjtdpvsLKQPDXHzDmX/OcdwbfjS7HtmjhJcV2fCdTMEYKwK+s/iI1gamTtNe95/5w==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", @@ -8719,7 +9137,7 @@ "potrace": "^2.1.2", "probe-image-size": "^4.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gauge": { @@ -9039,9 +9457,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -9123,9 +9541,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "har-schema": { "version": "2.0.0", @@ -9321,17 +9739,17 @@ "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" }, "hast-util-raw": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.1.tgz", - "integrity": "sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", + "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", "requires": { "hast-util-from-parse5": "^5.0.0", "hast-util-to-parse5": "^5.0.0", - "html-void-elements": "^1.0.1", + "html-void-elements": "^1.0.0", "parse5": "^5.0.0", "unist-util-position": "^3.0.0", "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", + "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, @@ -10644,15 +11062,23 @@ } }, "jimp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", - "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", - "requires": { - "@jimp/custom": "^0.6.8", - "@jimp/plugins": "^0.6.8", - "@jimp/types": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", + "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "jpeg-js": { @@ -10889,12 +11315,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -11224,11 +11650,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -11807,20 +12228,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, "modularscale": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/modularscale/-/modularscale-2.0.1.tgz", @@ -11899,7 +12318,8 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -11970,6 +12390,11 @@ "semver": "^5.4.1" } }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -12036,19 +12461,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -12153,9 +12568,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -12890,9 +13321,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -13688,11 +14119,11 @@ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" }, "potrace": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", - "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.5.tgz", + "integrity": "sha512-huAWS0flSZttRm+WA5IGSFxHLXgVd9JCGU8+heDD3fAvFmW1Wf1Y7qq3Un2hH2xBNMwDY7vP1PYA0VQUh7CC+Q==", "requires": { - "jimp": "^0.6.4" + "jimp": "^0.9.6" } }, "prebuild-install": { @@ -13785,9 +14216,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -13841,9 +14272,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -14546,9 +14977,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -14705,15 +15136,15 @@ } }, "remark-mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.7.tgz", - "integrity": "sha512-f13ot+zaByDXYuOC4FWTpQCGP/rNbaxdhs2mLlW7ZBipm3JYR2ASFSL7RC3R7ytzm3n8v6hhcFxDKU+CwC2f4g==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.8.tgz", + "integrity": "sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ==", "requires": { "@babel/core": "7.8.4", "@babel/helper-plugin-utils": "7.8.3", "@babel/plugin-proposal-object-rest-spread": "7.8.3", "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.5.7", + "@mdx-js/util": "^1.5.8", "is-alphabetical": "1.0.4", "remark-parse": "7.0.2", "unified": "8.4.2" @@ -14741,6 +15172,15 @@ "source-map": "^0.5.0" } }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -15202,9 +15642,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -15243,12 +15683,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -15514,25 +15954,25 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", "requires": { "color": "^3.1.2", "detect-libc": "^1.0.3", - "nan": "^2.14.0", + "node-addon-api": "^2.0.0", "npmlog": "^4.1.2", "prebuild-install": "^5.3.3", - "semver": "^6.3.0", + "semver": "^7.1.3", "simple-get": "^3.1.0", - "tar": "^5.0.5", + "tar": "^6.0.1", "tunnel-agent": "^0.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" } } }, @@ -15569,9 +16009,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -15619,9 +16059,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -16020,9 +16460,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -16361,22 +16801,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -16629,18 +17089,23 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", "requires": { "chownr": "^1.1.3", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", + "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16649,24 +17114,35 @@ } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" }, "dependencies": { "bl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz", - "integrity": "sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -16725,9 +17201,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -16974,9 +17450,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -17074,9 +17550,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.0.tgz", + "integrity": "sha512-kVx7CDAsdBSWVf404Mw7oI9i09w5/mTT/Ruk+RWa64PLYKvsAucLLFHvQtnvjeADM4ZizxrvG5SHnF4Te4T2Cg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -17783,9 +18259,9 @@ } }, "vfile": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.3.tgz", - "integrity": "sha512-lREgT5sF05TQk68LO6APy0In+TkFGnFEgKChK2+PHIaTrFQ9oHCKXznZ7VILwgYVBcl0gv4lGATFZBLhi2kVQg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -17807,9 +18283,9 @@ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -17829,11 +18305,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -17878,14 +18354,14 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -17897,7 +18373,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -18536,9 +19012,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/gatsby-starter-blog-theme/package.json b/starters/gatsby-starter-blog-theme/package.json index b3a1af9a57e90..07c66fc3e08fe 100644 --- a/starters/gatsby-starter-blog-theme/package.json +++ b/starters/gatsby-starter-blog-theme/package.json @@ -9,8 +9,8 @@ "clean": "gatsby clean" }, "dependencies": { - "gatsby": "^2.19.45", - "gatsby-theme-blog": "^1.3.30", + "gatsby": "^2.20.12", + "gatsby-theme-blog": "^1.4.12", "react": "^16.12.0", "react-dom": "^16.12.0" } diff --git a/starters/gatsby-starter-notes-theme/package-lock.json b/starters/gatsby-starter-notes-theme/package-lock.json index 8828263ff5233..5cf3aa2e98b94 100644 --- a/starters/gatsby-starter-notes-theme/package-lock.json +++ b/starters/gatsby-starter-notes-theme/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1111,6 +1160,19 @@ "base64-js": "^1.0.2", "ieee754": "^1.1.4" } + }, + "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=", + "requires": { + "minimist": "0.0.8" + } } } }, @@ -1366,22 +1428,22 @@ } }, "@mdx-js/mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.7.tgz", - "integrity": "sha512-db1E3P0HCgSUX768Y/jIcr5h41VR5AsvaOmPTydltNM4R8Uh863IqDvnkpa7l829bY/tp6wrMBWM2NH0oLuxHw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.8.tgz", + "integrity": "sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA==", "requires": { "@babel/core": "7.8.4", "@babel/plugin-syntax-jsx": "7.8.3", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.5.7", - "babel-plugin-apply-mdx-type-prop": "^1.5.7", - "babel-plugin-extract-import-names": "^1.5.7", + "@mdx-js/util": "^1.5.8", + "babel-plugin-apply-mdx-type-prop": "^1.5.8", + "babel-plugin-extract-import-names": "^1.5.8", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.1", + "hast-util-raw": "5.0.2", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "7.0.0", - "remark-mdx": "^1.5.7", + "remark-mdx": "^1.5.8", "remark-parse": "7.0.2", "remark-squeeze-paragraphs": "3.0.4", "style-to-object": "0.3.0", @@ -1423,14 +1485,14 @@ } }, "@mdx-js/react": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.7.tgz", - "integrity": "sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.8.tgz", + "integrity": "sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg==" }, "@mdx-js/util": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.7.tgz", - "integrity": "sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.8.tgz", + "integrity": "sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ==" }, "@mikaelkristiansson/domready": { "version": "1.0.10", @@ -1577,9 +1639,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1716,9 +1778,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1736,27 +1798,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1797,42 +1859,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1859,160 +1921,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2365,17 +2426,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "axios": { @@ -2449,16 +2510,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2503,12 +2588,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.7.tgz", - "integrity": "sha512-SUDwTmMmxzaAZ1YfAPnL2UI3q/JEs+fekx/QTZYEgK+cVGMwS/PrCeK9UDlTHOYJr9b4mieR+iLhm43jrav2WA==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz", + "integrity": "sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA==", "requires": { "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.5.7" + "@mdx-js/util": "^1.5.8" } }, "babel-plugin-dynamic-import-node": { @@ -2520,9 +2605,9 @@ } }, "babel-plugin-emotion": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", - "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@emotion/hash": "0.8.0", @@ -2537,9 +2622,9 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.7.tgz", - "integrity": "sha512-kZX4g9ehTyxjdbq2rb8wW307+jNu5z3KllYs8cnbapSwclT9wBErJoqvKKZAkuiaufp0r+7WaIvjhKtJ7QlG3A==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz", + "integrity": "sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g==", "requires": { "@babel/helper-plugin-utils": "7.8.3" } @@ -2555,9 +2640,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-syntax-jsx": { "version": "6.18.0", @@ -2570,9 +2655,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2586,7 +2671,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -3023,13 +3108,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3097,9 +3183,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3279,9 +3365,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "ccount": { "version": "1.0.5", @@ -3444,9 +3530,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -3667,9 +3753,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4423,17 +4509,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4459,9 +4566,9 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4655,9 +4762,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -4976,9 +5083,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5055,9 +5162,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5238,9 +5345,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5387,6 +5494,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5396,9 +5511,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5553,9 +5668,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -5607,9 +5722,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -5694,9 +5809,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -5801,9 +5916,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -5829,11 +5944,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -5917,9 +6039,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6271,9 +6393,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -6287,9 +6409,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -6314,6 +6436,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -6441,9 +6574,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -6582,9 +6715,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -6631,7 +6764,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -6781,7 +6914,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -6803,11 +6936,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -6816,7 +6949,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -6843,7 +6976,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -6865,12 +6998,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -6940,17 +7074,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7082,9 +7209,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7097,18 +7224,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7147,13 +7274,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7174,13 +7301,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7214,12 +7341,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -7255,9 +7382,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -7274,8 +7401,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -7431,9 +7558,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -7441,33 +7568,33 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" @@ -7483,18 +7610,18 @@ } }, "gatsby-plugin-emotion": { - "version": "4.1.25", - "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.1.25.tgz", - "integrity": "sha512-VP+s3mEfvaTjKUOVsDRgy/HPfDJQHeZD/Z/WBKgQetLgmvrGVnxm9NEMCJWyJm9LxQ791bfwoP6XNwOYscU8sA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.2.1.tgz", + "integrity": "sha512-ygXxkpnWJdDOAgb1XA9TbVCRLkaAYTFLTsqVQXMBhnrknb5iPNO+MP0fZ5LRqWgBALyJ629nxs0efUpnT/RSWw==", "requires": { "@babel/runtime": "^7.8.7", "@emotion/babel-preset-css-prop": "^10.0.27" } }, "gatsby-plugin-mdx": { - "version": "1.0.83", - "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.0.83.tgz", - "integrity": "sha512-jt4BuBkvs1TpYMFFc2Rac7e+4OmeD1wtY/DHse3vtJh695/tmhuybQ6lAKFE/mw8i/d63u6L5uXpgCo7Qt1iyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.4.tgz", + "integrity": "sha512-id2/LALN7eseTGN05v1n16XCYggrl2UTzWOJOQME9rh25jNK+KT5ywaPY6vNYimeAW7wWdad3rl6hORpv4L6yw==", "requires": { "@babel/core": "^7.8.7", "@babel/generator": "^7.8.8", @@ -7511,9 +7638,9 @@ "escape-string-regexp": "^1.0.5", "eval": "^0.1.4", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gray-matter": "^4.0.2", - "json5": "^2.1.1", + "json5": "^2.1.2", "loader-utils": "^1.4.0", "lodash": "^4.17.15", "mdast-util-to-string": "^1.1.0", @@ -7608,14 +7735,14 @@ } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" @@ -7635,12 +7762,12 @@ "integrity": "sha512-AlQC+uC9lvrP3LlGsLe0f0azp7B5c49qWl4b3FDj8xbravBoqFmJT7XrNTpYYbxnCnx/K1v0QtwP8qindw0S2g==" }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -7655,9 +7782,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -7665,8 +7792,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -7680,13 +7807,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -7695,7 +7840,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -7720,9 +7865,9 @@ } }, "gatsby-theme-notes": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/gatsby-theme-notes/-/gatsby-theme-notes-1.1.27.tgz", - "integrity": "sha512-u/OMVH/4k6Ie3M50TfWIEgle04r+QqQokXbFKslINrVbHzJQiekLMORytlMkxCXBQYMVSPsXtWNxtWPPpCb1og==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-notes/-/gatsby-theme-notes-1.2.12.tgz", + "integrity": "sha512-DniSbx3xus+D/FvfI4oI1UGrO/whughoXdbTi2+P5/DX7A2BSSBJOTtf/GHaZyhKDmpjfT9t91zMAJ5cvxV4yw==", "requires": { "@emotion/core": "^10.0.28", "@mdx-js/mdx": "^1.5.7", @@ -7730,18 +7875,18 @@ "@theme-ui/prism": "^0.2.50", "@theme-ui/typography": "^0.2.46", "deepmerge": "^4.2.2", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gatsby-plugin-compile-es6-packages": "^2.1.0", - "gatsby-plugin-emotion": "^4.1.25", - "gatsby-plugin-mdx": "^1.0.83", + "gatsby-plugin-emotion": "^4.2.1", + "gatsby-plugin-mdx": "^1.1.4", "gatsby-plugin-meta-redirect": "^1.1.1", "gatsby-plugin-og-image": "0.0.1", "gatsby-plugin-redirects": "^1.0.0", - "gatsby-plugin-theme-ui": "^0.2.43", - "gatsby-source-filesystem": "^2.1.56", + "gatsby-plugin-theme-ui": "^0.2.53", + "gatsby-source-filesystem": "^2.2.2", "is-present": "^1.0.0", "react-feather": "^1.1.6", - "theme-ui": "^0.2.49", + "theme-ui": "^0.2.52", "typeface-merriweather": "0.0.72", "typeface-montserrat": "0.0.75", "typography-theme-wordpress-2016": "^0.16.19" @@ -7998,9 +8143,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -8082,9 +8227,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "has": { "version": "1.0.3", @@ -8261,17 +8406,17 @@ "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" }, "hast-util-raw": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.1.tgz", - "integrity": "sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", + "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", "requires": { "hast-util-from-parse5": "^5.0.0", "hast-util-to-parse5": "^5.0.0", - "html-void-elements": "^1.0.1", + "html-void-elements": "^1.0.0", "parse5": "^5.0.0", "unist-util-position": "^3.0.0", "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", + "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, @@ -9677,12 +9822,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -9971,11 +10116,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -10401,18 +10541,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, "modularscale": { @@ -10603,19 +10736,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -10695,9 +10818,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -11368,9 +11507,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -12188,9 +12327,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -12893,9 +13032,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -13057,15 +13196,15 @@ } }, "remark-mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.7.tgz", - "integrity": "sha512-f13ot+zaByDXYuOC4FWTpQCGP/rNbaxdhs2mLlW7ZBipm3JYR2ASFSL7RC3R7ytzm3n8v6hhcFxDKU+CwC2f4g==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.8.tgz", + "integrity": "sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ==", "requires": { "@babel/core": "7.8.4", "@babel/helper-plugin-utils": "7.8.3", "@babel/plugin-proposal-object-rest-spread": "7.8.3", "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.5.7", + "@mdx-js/util": "^1.5.8", "is-alphabetical": "1.0.4", "remark-parse": "7.0.2", "unified": "8.4.2" @@ -13093,6 +13232,15 @@ "source-map": "^0.5.0" } }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -13388,9 +13536,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -13429,12 +13577,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -13701,9 +13849,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-swizzle": { "version": "0.2.2", @@ -13721,9 +13869,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -14104,9 +14252,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -14367,22 +14515,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -14616,9 +14784,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -14838,9 +15006,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -15579,9 +15747,9 @@ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, "vfile": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.3.tgz", - "integrity": "sha512-lREgT5sF05TQk68LO6APy0In+TkFGnFEgKChK2+PHIaTrFQ9oHCKXznZ7VILwgYVBcl0gv4lGATFZBLhi2kVQg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -15603,9 +15771,9 @@ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -15625,11 +15793,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -15674,14 +15842,14 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -15693,7 +15861,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -16314,9 +16482,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/gatsby-starter-notes-theme/package.json b/starters/gatsby-starter-notes-theme/package.json index 5e0ec72e03432..c9570d861c384 100644 --- a/starters/gatsby-starter-notes-theme/package.json +++ b/starters/gatsby-starter-notes-theme/package.json @@ -9,8 +9,8 @@ "clean": "gatsby clean" }, "dependencies": { - "gatsby": "^2.19.45", - "gatsby-theme-notes": "^1.1.27", + "gatsby": "^2.20.12", + "gatsby-theme-notes": "^1.2.12", "react": "^16.12.0", "react-dom": "^16.12.0" } diff --git a/starters/gatsby-starter-theme-workspace/example/package.json b/starters/gatsby-starter-theme-workspace/example/package.json index 90af1ca6f31ee..ebd0e5791c2d8 100644 --- a/starters/gatsby-starter-theme-workspace/example/package.json +++ b/starters/gatsby-starter-theme-workspace/example/package.json @@ -9,7 +9,7 @@ "build": "gatsby build" }, "dependencies": { - "gatsby": "^2.19.45", + "gatsby": "^2.20.12", "gatsby-theme-minimal": "^1.0.0", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/starters/gatsby-starter-theme/package-lock.json b/starters/gatsby-starter-theme/package-lock.json index b2f6451681c8b..37f09fb9dc168 100644 --- a/starters/gatsby-starter-theme/package-lock.json +++ b/starters/gatsby-starter-theme/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1076,28 +1125,37 @@ } }, "@jimp/bmp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", - "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", - "core-js": "^2.5.7" + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", - "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { - "@jimp/utils": "^0.6.8", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", - "core-js": "^2.5.7", + "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" @@ -1112,6 +1170,11 @@ "ieee754": "^1.1.4" } }, + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -1120,273 +1183,545 @@ } }, "@jimp/custom": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", - "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { - "@jimp/core": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/gif": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", - "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "omggif": "^1.0.9" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/jpeg": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", - "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "jpeg-js": "^0.3.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blit": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", - "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-blur": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", - "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-color": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", - "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "tinycolor2": "^1.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-contain": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", - "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-cover": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", - "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-crop": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", - "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-displace": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", - "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-dither": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", - "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-flip": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", - "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-gaussian": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", - "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-invert": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", - "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-mask": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", - "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-normalize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", - "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-print": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", - "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "load-bmfont": "^1.4.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-resize": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", - "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-rotate": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", - "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugin-scale": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", - "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/plugins": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", - "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", - "requires": { - "@jimp/plugin-blit": "^0.6.8", - "@jimp/plugin-blur": "^0.6.8", - "@jimp/plugin-color": "^0.6.8", - "@jimp/plugin-contain": "^0.6.8", - "@jimp/plugin-cover": "^0.6.8", - "@jimp/plugin-crop": "^0.6.8", - "@jimp/plugin-displace": "^0.6.8", - "@jimp/plugin-dither": "^0.6.8", - "@jimp/plugin-flip": "^0.6.8", - "@jimp/plugin-gaussian": "^0.6.8", - "@jimp/plugin-invert": "^0.6.8", - "@jimp/plugin-mask": "^0.6.8", - "@jimp/plugin-normalize": "^0.6.8", - "@jimp/plugin-print": "^0.6.8", - "@jimp/plugin-resize": "^0.6.8", - "@jimp/plugin-rotate": "^0.6.8", - "@jimp/plugin-scale": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/png": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", - "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { - "@jimp/utils": "^0.6.8", - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1", "pngjs": "^3.3.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/tiff": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", - "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { - "core-js": "^2.5.7", + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", "utif": "^2.0.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/types": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", - "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", - "requires": { - "@jimp/bmp": "^0.6.8", - "@jimp/gif": "^0.6.8", - "@jimp/jpeg": "^0.6.8", - "@jimp/png": "^0.6.8", - "@jimp/tiff": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", + "core-js": "^3.4.1", "timm": "^1.6.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@jimp/utils": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", - "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { - "core-js": "^2.5.7" + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "@mdx-js/mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.7.tgz", - "integrity": "sha512-db1E3P0HCgSUX768Y/jIcr5h41VR5AsvaOmPTydltNM4R8Uh863IqDvnkpa7l829bY/tp6wrMBWM2NH0oLuxHw==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.5.8.tgz", + "integrity": "sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA==", "requires": { "@babel/core": "7.8.4", "@babel/plugin-syntax-jsx": "7.8.3", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.5.7", - "babel-plugin-apply-mdx-type-prop": "^1.5.7", - "babel-plugin-extract-import-names": "^1.5.7", + "@mdx-js/util": "^1.5.8", + "babel-plugin-apply-mdx-type-prop": "^1.5.8", + "babel-plugin-extract-import-names": "^1.5.8", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.1", + "hast-util-raw": "5.0.2", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "7.0.0", - "remark-mdx": "^1.5.7", + "remark-mdx": "^1.5.8", "remark-parse": "7.0.2", "remark-squeeze-paragraphs": "3.0.4", "style-to-object": "0.3.0", @@ -1428,14 +1763,14 @@ } }, "@mdx-js/react": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.7.tgz", - "integrity": "sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.5.8.tgz", + "integrity": "sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg==" }, "@mdx-js/util": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.7.tgz", - "integrity": "sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.5.8.tgz", + "integrity": "sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ==" }, "@mikaelkristiansson/domready": { "version": "1.0.10", @@ -1582,9 +1917,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1721,9 +2056,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1741,27 +2076,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1802,42 +2137,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1864,160 +2199,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2417,17 +2751,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "aws-sign2": { @@ -2511,16 +2845,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2565,12 +2923,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.7.tgz", - "integrity": "sha512-SUDwTmMmxzaAZ1YfAPnL2UI3q/JEs+fekx/QTZYEgK+cVGMwS/PrCeK9UDlTHOYJr9b4mieR+iLhm43jrav2WA==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz", + "integrity": "sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA==", "requires": { "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.5.7" + "@mdx-js/util": "^1.5.8" } }, "babel-plugin-dynamic-import-node": { @@ -2582,9 +2940,9 @@ } }, "babel-plugin-emotion": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", - "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@emotion/hash": "0.8.0", @@ -2599,9 +2957,9 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.7.tgz", - "integrity": "sha512-kZX4g9ehTyxjdbq2rb8wW307+jNu5z3KllYs8cnbapSwclT9wBErJoqvKKZAkuiaufp0r+7WaIvjhKtJ7QlG3A==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz", + "integrity": "sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g==", "requires": { "@babel/helper-plugin-utils": "7.8.3" } @@ -2617,9 +2975,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-syntax-jsx": { "version": "6.18.0", @@ -2632,9 +2990,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2648,7 +3006,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -3322,13 +3680,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -3401,9 +3760,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -3599,9 +3958,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "caseless": { "version": "0.12.0", @@ -3780,9 +4139,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -4003,9 +4362,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -4791,17 +5150,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -4845,9 +5225,9 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -4868,9 +5248,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -5163,9 +5543,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -5499,9 +5879,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -5672,9 +6052,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -5855,9 +6235,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -6004,6 +6384,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -6013,9 +6401,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -6170,9 +6558,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -6224,9 +6612,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -6311,9 +6699,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -6418,9 +6806,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -6446,11 +6834,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -6594,9 +6989,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6990,9 +7385,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -7014,9 +7409,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -7041,6 +7436,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-type": { @@ -7191,9 +7597,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -7360,9 +7766,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -7409,7 +7815,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -7559,7 +7965,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -7581,11 +7987,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -7594,7 +8000,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -7621,7 +8027,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -7643,12 +8049,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -7718,17 +8125,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -7860,9 +8260,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -7875,18 +8275,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -7925,13 +8325,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -7952,13 +8352,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -7992,12 +8392,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -8033,9 +8433,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8052,8 +8452,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -8209,9 +8609,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -8219,17 +8619,17 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-image": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.2.44.tgz", - "integrity": "sha512-lKvBVc9lIYF1vrQ9b40Tmd5oOGTz69UXFT/gVtg5Ly5vVmDAU/4RdYbafQi6/KpCZRkAdO4ogtj0HB2YFjqfrQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.3.1.tgz", + "integrity": "sha512-VCJIb2Sp7Dcql+seZ14pqP2yL8oUlLin+HNEb5u8hcn3txkZhzIW3zwPQ3UwfPvi9Em3gBsEClCR6TQSw96J8g==", "requires": { "@babel/runtime": "^7.8.7", "object-fit-images": "^3.2.4", @@ -8237,25 +8637,25 @@ } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" @@ -8271,18 +8671,18 @@ } }, "gatsby-plugin-emotion": { - "version": "4.1.25", - "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.1.25.tgz", - "integrity": "sha512-VP+s3mEfvaTjKUOVsDRgy/HPfDJQHeZD/Z/WBKgQetLgmvrGVnxm9NEMCJWyJm9LxQ791bfwoP6XNwOYscU8sA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-emotion/-/gatsby-plugin-emotion-4.2.1.tgz", + "integrity": "sha512-ygXxkpnWJdDOAgb1XA9TbVCRLkaAYTFLTsqVQXMBhnrknb5iPNO+MP0fZ5LRqWgBALyJ629nxs0efUpnT/RSWw==", "requires": { "@babel/runtime": "^7.8.7", "@emotion/babel-preset-css-prop": "^10.0.27" } }, "gatsby-plugin-feed": { - "version": "2.3.29", - "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.3.29.tgz", - "integrity": "sha512-fbgmUdjcTj3pzDJa/y2MhSRAAYf6S5YVEN/CB+fqvaHyLq6gzRqLTEIYYnwtXhQk/14Zq6bntsRxH/2dA0J9bg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-feed/-/gatsby-plugin-feed-2.4.1.tgz", + "integrity": "sha512-4+vdto148cIKPJT7bI9i//opwUu6ZqO5l1WNGAGubByWPLIA47VadcC5GzMHpWVtTMZugnmfotZI8t/3iCNP3w==", "requires": { "@babel/runtime": "^7.8.7", "@hapi/joi": "^15.1.1", @@ -8292,9 +8692,9 @@ } }, "gatsby-plugin-mdx": { - "version": "1.0.83", - "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.0.83.tgz", - "integrity": "sha512-jt4BuBkvs1TpYMFFc2Rac7e+4OmeD1wtY/DHse3vtJh695/tmhuybQ6lAKFE/mw8i/d63u6L5uXpgCo7Qt1iyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.4.tgz", + "integrity": "sha512-id2/LALN7eseTGN05v1n16XCYggrl2UTzWOJOQME9rh25jNK+KT5ywaPY6vNYimeAW7wWdad3rl6hORpv4L6yw==", "requires": { "@babel/core": "^7.8.7", "@babel/generator": "^7.8.8", @@ -8311,9 +8711,9 @@ "escape-string-regexp": "^1.0.5", "eval": "^0.1.4", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gray-matter": "^4.0.2", - "json5": "^2.1.1", + "json5": "^2.1.2", "loader-utils": "^1.4.0", "lodash": "^4.17.15", "mdast-util-to-string": "^1.1.0", @@ -8338,93 +8738,415 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "^2.1.1" + "ms": "^2.1.1" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.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": { + "minimist": "^1.2.0" + } + } + } + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + } + } + }, + "gatsby-plugin-meta-redirect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-meta-redirect/-/gatsby-plugin-meta-redirect-1.1.1.tgz", + "integrity": "sha512-Oc4qgU3SlDUM9qoxIMKO+re2bdMs3/a2KXrfL65gb8XMLsHylBbveWtXZRhgjd2QDL/49RX4S9SEykuadRju2w==", + "requires": { + "fs-extra": "^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==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "gatsby-plugin-og-image": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-og-image/-/gatsby-plugin-og-image-0.0.1.tgz", + "integrity": "sha512-oKsFDfL2PkUVLWY3h6gWEi/idCVB4pvozeT3vf3MHrRCQIqMEgXJgtkJxTNgczNlZKvvjNSx1PcS5feExyKi/Q==", + "requires": { + "@sindresorhus/slugify": "^0.9.0", + "jimp": "^0.6.0", + "mkdirp": "^0.5.1", + "rev-hash": "^2.0.0" + }, + "dependencies": { + "@jimp/bmp": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.6.8.tgz", + "integrity": "sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w==", + "requires": { + "@jimp/utils": "^0.6.8", + "bmp-js": "^0.1.0", + "core-js": "^2.5.7" + } + }, + "@jimp/core": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.6.8.tgz", + "integrity": "sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA==", + "requires": { + "@jimp/utils": "^0.6.8", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "core-js": "^2.5.7", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "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" + } + } + } + }, + "@jimp/custom": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.6.8.tgz", + "integrity": "sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng==", + "requires": { + "@jimp/core": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/gif": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.6.8.tgz", + "integrity": "sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.6.8.tgz", + "integrity": "sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7", + "jpeg-js": "^0.3.4" + } + }, + "@jimp/plugin-blit": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz", + "integrity": "sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-blur": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz", + "integrity": "sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-color": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.6.8.tgz", + "integrity": "sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz", + "integrity": "sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-cover": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz", + "integrity": "sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-crop": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz", + "integrity": "sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-displace": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz", + "integrity": "sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-dither": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz", + "integrity": "sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-flip": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz", + "integrity": "sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz", + "integrity": "sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-invert": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz", + "integrity": "sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-mask": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz", + "integrity": "sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "@jimp/plugin-normalize": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz", + "integrity": "sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@jimp/plugin-print": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.6.8.tgz", + "integrity": "sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.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": { - "minimist": "^1.2.0" - } - } + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7", + "load-bmfont": "^1.4.0" } }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "@jimp/plugin-resize": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz", + "integrity": "sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA==", "requires": { - "unist-util-visit-parents": "^2.0.0" + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" } - } - } - }, - "gatsby-plugin-meta-redirect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/gatsby-plugin-meta-redirect/-/gatsby-plugin-meta-redirect-1.1.1.tgz", - "integrity": "sha512-Oc4qgU3SlDUM9qoxIMKO+re2bdMs3/a2KXrfL65gb8XMLsHylBbveWtXZRhgjd2QDL/49RX4S9SEykuadRju2w==", - "requires": { - "fs-extra": "^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==", + }, + "@jimp/plugin-rotate": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz", + "integrity": "sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugin-scale": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz", + "integrity": "sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7" + } + }, + "@jimp/plugins": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.6.8.tgz", + "integrity": "sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ==", + "requires": { + "@jimp/plugin-blit": "^0.6.8", + "@jimp/plugin-blur": "^0.6.8", + "@jimp/plugin-color": "^0.6.8", + "@jimp/plugin-contain": "^0.6.8", + "@jimp/plugin-cover": "^0.6.8", + "@jimp/plugin-crop": "^0.6.8", + "@jimp/plugin-displace": "^0.6.8", + "@jimp/plugin-dither": "^0.6.8", + "@jimp/plugin-flip": "^0.6.8", + "@jimp/plugin-gaussian": "^0.6.8", + "@jimp/plugin-invert": "^0.6.8", + "@jimp/plugin-mask": "^0.6.8", + "@jimp/plugin-normalize": "^0.6.8", + "@jimp/plugin-print": "^0.6.8", + "@jimp/plugin-resize": "^0.6.8", + "@jimp/plugin-rotate": "^0.6.8", + "@jimp/plugin-scale": "^0.6.8", + "core-js": "^2.5.7", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.6.8.tgz", + "integrity": "sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew==", + "requires": { + "@jimp/utils": "^0.6.8", + "core-js": "^2.5.7", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.6.8.tgz", + "integrity": "sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg==", + "requires": { + "core-js": "^2.5.7", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.6.8.tgz", + "integrity": "sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A==", + "requires": { + "@jimp/bmp": "^0.6.8", + "@jimp/gif": "^0.6.8", + "@jimp/jpeg": "^0.6.8", + "@jimp/png": "^0.6.8", + "@jimp/tiff": "^0.6.8", + "core-js": "^2.5.7", + "timm": "^1.6.1" } + }, + "@jimp/utils": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.6.8.tgz", + "integrity": "sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw==", + "requires": { + "core-js": "^2.5.7" + } + }, + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "jimp": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", + "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", + "requires": { + "@jimp/custom": "^0.6.8", + "@jimp/plugins": "^0.6.8", + "@jimp/types": "^0.6.8", + "core-js": "^2.5.7", + "regenerator-runtime": "^0.13.3" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, - "gatsby-plugin-og-image": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/gatsby-plugin-og-image/-/gatsby-plugin-og-image-0.0.1.tgz", - "integrity": "sha512-oKsFDfL2PkUVLWY3h6gWEi/idCVB4pvozeT3vf3MHrRCQIqMEgXJgtkJxTNgczNlZKvvjNSx1PcS5feExyKi/Q==", - "requires": { - "@sindresorhus/slugify": "^0.9.0", - "jimp": "^0.6.0", - "mkdirp": "^0.5.1", - "rev-hash": "^2.0.0" - } - }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-react-helmet": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.1.24.tgz", - "integrity": "sha512-kLR/RMDBVriJptsJufoL1UBVHgq2fZIMXen7nru2ugGn0m8xwpArFoOz6meYlpiDB3Z41eYR/+Nr8GizQnYcxg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.2.1.tgz", + "integrity": "sha512-5oarZdVvp3k3keG26eVFagVHLYw7wCGs/MXRYQg8MEyJewU3X4Uc0eo7qu4TM5EIuZ2ekaL14r86RB6RM5TORA==", "requires": { "@babel/runtime": "^7.8.7" } @@ -8438,15 +9160,15 @@ } }, "gatsby-plugin-sharp": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.4.13.tgz", - "integrity": "sha512-ogRe5CxBIBZ0R76t7F3F1ji00BO7qnTO4vZkREaSxDBwgY6SOGKT8uie497Ej6usfarc9XQ/jMnXBu5EkrT4tA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.5.3.tgz", + "integrity": "sha512-/qx0QJNXsmHudEGlRm6oqkq+X228hGBJ6KjCJpJK5bUwWdhcZRJNar337g/2BXPchaxk1emJTUK9y+qSvVpPvw==", "requires": { "@babel/runtime": "^7.8.7", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -8458,7 +9180,7 @@ "probe-image-size": "^4.1.1", "progress": "^2.0.3", "semver": "^5.7.1", - "sharp": "^0.23.4", + "sharp": "^0.25.1", "svgo": "1.3.2", "uuid": "^3.4.0" }, @@ -8479,20 +9201,20 @@ "integrity": "sha512-AlQC+uC9lvrP3LlGsLe0f0azp7B5c49qWl4b3FDj8xbravBoqFmJT7XrNTpYYbxnCnx/K1v0QtwP8qindw0S2g==" }, "gatsby-plugin-twitter": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/gatsby-plugin-twitter/-/gatsby-plugin-twitter-2.1.21.tgz", - "integrity": "sha512-yg4JP6xX19v8PessCHAK3sP0V+xTz3Qlbg1wA1UZfRPIsldH20/FZ3NX4cCQKWDcnjsldVXRNYKLzdo5Xe1mfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-twitter/-/gatsby-plugin-twitter-2.2.1.tgz", + "integrity": "sha512-y2HvIt4LuINIX5uGFlLdnqbWoteg+Qt/OV/ub2aS412KJ76ofaTwrll+wzYOUw9n3tXWEP9KwKYZsOf7YU+QQA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -8507,9 +9229,9 @@ } }, "gatsby-remark-copy-linked-files": { - "version": "2.1.40", - "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.1.40.tgz", - "integrity": "sha512-htZTd5rD46rg4j6KykJJE/GnV+ONidanyDlZWBJyvmIM97Jmcgh6FLpwy68PCzjw32JBdow3Wu2H//vvGYdBYw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-2.2.1.tgz", + "integrity": "sha512-xTy52n0K+fF4aXCNYkpH1HdhYy47GwLG2tE5H+xIisyEQiCr5XA555yQdS0U4MRtDZEyfX4TB+XTwaNhOgTPgw==", "requires": { "@babel/runtime": "^7.8.7", "cheerio": "^1.0.0-rc.3", @@ -8567,14 +9289,14 @@ } }, "gatsby-remark-images": { - "version": "3.1.50", - "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.1.50.tgz", - "integrity": "sha512-lY3hTNB6KUGlmKUKoc2D3U+9FJrlPjwqvKVDXbGGj71xKkXtBt4ns1AqmdTiX+v8m2OpgzEcwlAxA/4wHF+dTg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-images/-/gatsby-remark-images-3.2.1.tgz", + "integrity": "sha512-3zzLRjfTiXG4u8kFK17tZYpu3FNIirfdaOt7ZtNyfaowLcB+Ok67KCweZlHlvr/+Zvj+gvXAHWycMnMQqlK0iw==", "requires": { "@babel/runtime": "^7.8.7", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.3", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "is-relative-url": "^3.0.0", "lodash": "^4.17.15", "mdast-util-definitions": "^1.2.5", @@ -8637,9 +9359,9 @@ } }, "gatsby-remark-smartypants": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.1.23.tgz", - "integrity": "sha512-Sjehajgd2TZvtMqux/7QXC8xC1DSzzBOPlYwM1J3neJhYDlOkqqF0l9HYZ6yjJ3f9rfD68flt9TzMqWVETWzSg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-remark-smartypants/-/gatsby-remark-smartypants-2.2.1.tgz", + "integrity": "sha512-ivKkyy4Q17uRJ7D4Xu8lg0b5QF4BHz3MiwVguJlB1wGS2nbDI1L6BNoMZ7ftx5KLVYNL3XbkvMGcsqw7Qg6wZQ==", "requires": { "@babel/runtime": "^7.8.7", "retext": "^5.0.0", @@ -8658,9 +9380,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.1.56", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.1.56.tgz", - "integrity": "sha512-+5I/RVqefaMErclztgJ1BZBT+NKquQ7UlARecwZWowcVuTMlsFv+s9U5CZaSCm6HFr+ycVnTH7L+GcTBwiE+9g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.2.2.tgz", + "integrity": "sha512-uHHCiTp8/q9JF0Yr14Q5aJZ07jUJSV6HJSnrSVnEIF4PfRQkVJG5FHQULmxJUXWQhIoy17EGuzqVjxMsFY69QA==", "requires": { "@babel/runtime": "^7.8.7", "better-queue": "^3.8.10", @@ -8668,8 +9390,8 @@ "chokidar": "3.3.1", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "got": "^8.3.2", + "gatsby-core-utils": "^1.1.1", + "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.4", "pretty-bytes": "^5.3.0", @@ -8683,13 +9405,31 @@ "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } } } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -8698,7 +9438,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -8723,52 +9463,52 @@ } }, "gatsby-theme-blog": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/gatsby-theme-blog/-/gatsby-theme-blog-1.3.30.tgz", - "integrity": "sha512-92Wc6J2gcuPJ7KVhVkGEbazr4YMB9N+WRmUTED3WoFAe6TuZardOSie4gxP0L+7w5qsUJ6uAPIpGMIST6p0RDQ==", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-blog/-/gatsby-theme-blog-1.4.12.tgz", + "integrity": "sha512-s/gJ0jE4YcUQvGBwZDb++Prgpf/QuH8PMpa1OR+R18Y869/pSWCHKSuThjm9jVWCzCNJVYPQ8ffNMXocM7XHEw==", "requires": { "@emotion/core": "^10.0.28", "@mdx-js/react": "^1.5.7", "@theme-ui/prism": "^0.2.50", "@theme-ui/typography": "^0.2.46", "deepmerge": "^4.2.2", - "gatsby-image": "^2.2.44", - "gatsby-plugin-emotion": "^4.1.25", - "gatsby-plugin-feed": "^2.3.29", - "gatsby-plugin-react-helmet": "^3.1.24", - "gatsby-plugin-theme-ui": "^0.2.43", - "gatsby-plugin-twitter": "^2.1.21", - "gatsby-theme-blog-core": "^1.2.29", + "gatsby-image": "^2.3.1", + "gatsby-plugin-emotion": "^4.2.1", + "gatsby-plugin-feed": "^2.4.1", + "gatsby-plugin-react-helmet": "^3.2.1", + "gatsby-plugin-theme-ui": "^0.2.53", + "gatsby-plugin-twitter": "^2.2.1", + "gatsby-theme-blog-core": "^1.3.12", "mdx-utils": "0.2.0", "react-helmet": "^5.2.1", "react-switch": "^5.0.1", - "theme-ui": "^0.2.49", + "theme-ui": "^0.2.52", "typeface-merriweather": "0.0.72", "typeface-montserrat": "0.0.75", "typography-theme-wordpress-2016": "^0.16.19" } }, "gatsby-theme-blog-core": { - "version": "1.2.29", - "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.2.29.tgz", - "integrity": "sha512-cwq8eFQPjsLwWL3HZfdCESh3lV8MDG2h9XMgWRpubaLlwGh17B1bdJgtT6jMgRRFUcDp+9in+vxxjiVB/PUvGA==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-blog-core/-/gatsby-theme-blog-core-1.3.12.tgz", + "integrity": "sha512-W3iqU97Ej9gfLqiagkRLNDxLjL847fQf4aZxZyC2fmo3W3R7AY1SwA1iV9nREi/qsay+duQGjD1gpK+q5CVo2Q==", "requires": { "@mdx-js/mdx": "^1.5.7", - "gatsby-core-utils": "^1.0.34", - "gatsby-plugin-mdx": "^1.0.83", - "gatsby-plugin-sharp": "^2.4.13", - "gatsby-remark-copy-linked-files": "^2.1.40", - "gatsby-remark-images": "^3.1.50", - "gatsby-remark-smartypants": "^2.1.23", - "gatsby-source-filesystem": "^2.1.56", - "gatsby-transformer-sharp": "^2.3.19", + "gatsby-core-utils": "^1.1.1", + "gatsby-plugin-mdx": "^1.1.4", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-remark-copy-linked-files": "^2.2.1", + "gatsby-remark-images": "^3.2.1", + "gatsby-remark-smartypants": "^2.2.1", + "gatsby-source-filesystem": "^2.2.2", + "gatsby-transformer-sharp": "^2.4.3", "remark-slug": "^5.1.2" } }, "gatsby-theme-notes": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/gatsby-theme-notes/-/gatsby-theme-notes-1.1.27.tgz", - "integrity": "sha512-u/OMVH/4k6Ie3M50TfWIEgle04r+QqQokXbFKslINrVbHzJQiekLMORytlMkxCXBQYMVSPsXtWNxtWPPpCb1og==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/gatsby-theme-notes/-/gatsby-theme-notes-1.2.12.tgz", + "integrity": "sha512-DniSbx3xus+D/FvfI4oI1UGrO/whughoXdbTi2+P5/DX7A2BSSBJOTtf/GHaZyhKDmpjfT9t91zMAJ5cvxV4yw==", "requires": { "@emotion/core": "^10.0.28", "@mdx-js/mdx": "^1.5.7", @@ -8776,27 +9516,27 @@ "@theme-ui/prism": "^0.2.50", "@theme-ui/typography": "^0.2.46", "deepmerge": "^4.2.2", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "gatsby-plugin-compile-es6-packages": "^2.1.0", - "gatsby-plugin-emotion": "^4.1.25", - "gatsby-plugin-mdx": "^1.0.83", + "gatsby-plugin-emotion": "^4.2.1", + "gatsby-plugin-mdx": "^1.1.4", "gatsby-plugin-meta-redirect": "^1.1.1", "gatsby-plugin-og-image": "0.0.1", "gatsby-plugin-redirects": "^1.0.0", - "gatsby-plugin-theme-ui": "^0.2.43", - "gatsby-source-filesystem": "^2.1.56", + "gatsby-plugin-theme-ui": "^0.2.53", + "gatsby-source-filesystem": "^2.2.2", "is-present": "^1.0.0", "react-feather": "^1.1.6", - "theme-ui": "^0.2.49", + "theme-ui": "^0.2.52", "typeface-merriweather": "0.0.72", "typeface-montserrat": "0.0.75", "typography-theme-wordpress-2016": "^0.16.19" } }, "gatsby-transformer-sharp": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.3.19.tgz", - "integrity": "sha512-V3OoG9R0k+dUcJiHoI3miHrmW2kcTj8FD4GT3XZHXmpoJNIUJ/2a78+O0m6Px/3F8EzafGo35id4fFhLePZdsw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.4.3.tgz", + "integrity": "sha512-sBEgyx9q/I9phIuOq87BqDjtdpvsLKQPDXHzDmX/OcdwbfjS7HtmjhJcV2fCdTMEYKwK+s/iI1gamTtNe95/5w==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", @@ -8804,7 +9544,7 @@ "potrace": "^2.1.2", "probe-image-size": "^4.1.1", "semver": "^5.7.1", - "sharp": "^0.23.4" + "sharp": "^0.25.1" } }, "gauge": { @@ -9124,9 +9864,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -9208,9 +9948,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "har-schema": { "version": "2.0.0", @@ -9406,17 +10146,17 @@ "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" }, "hast-util-raw": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.1.tgz", - "integrity": "sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", + "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", "requires": { "hast-util-from-parse5": "^5.0.0", "hast-util-to-parse5": "^5.0.0", - "html-void-elements": "^1.0.1", + "html-void-elements": "^1.0.0", "parse5": "^5.0.0", "unist-util-position": "^3.0.0", "web-namespaces": "^1.0.0", - "xtend": "^4.0.1", + "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, @@ -10756,15 +11496,23 @@ } }, "jimp": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.6.8.tgz", - "integrity": "sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q==", - "requires": { - "@jimp/custom": "^0.6.8", - "@jimp/plugins": "^0.6.8", - "@jimp/types": "^0.6.8", - "core-js": "^2.5.7", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", + "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" + } } }, "jpeg-js": { @@ -11001,12 +11749,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -11341,11 +12089,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -11924,20 +12667,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==" + }, "modularscale": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/modularscale/-/modularscale-2.0.1.tgz", @@ -12016,7 +12757,8 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -12087,6 +12829,11 @@ "semver": "^5.4.1" } }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -12153,19 +12900,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -12270,9 +13007,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -13007,9 +13760,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -13805,11 +14558,11 @@ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==" }, "potrace": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.2.tgz", - "integrity": "sha512-dNcUBapRgPkiv3j+70+rSlf0whtJJqEszC04g9a/Ll3p6kA7QVRV1Vsi3jg22voJr2jA9x9fjPbz5MdD+ngbUg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.5.tgz", + "integrity": "sha512-huAWS0flSZttRm+WA5IGSFxHLXgVd9JCGU8+heDD3fAvFmW1Wf1Y7qq3Un2hH2xBNMwDY7vP1PYA0VQUh7CC+Q==", "requires": { - "jimp": "^0.6.4" + "jimp": "^0.9.6" } }, "prebuild-install": { @@ -13902,9 +14655,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -13958,9 +14711,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -14668,9 +15421,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -14832,15 +15585,15 @@ } }, "remark-mdx": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.7.tgz", - "integrity": "sha512-f13ot+zaByDXYuOC4FWTpQCGP/rNbaxdhs2mLlW7ZBipm3JYR2ASFSL7RC3R7ytzm3n8v6hhcFxDKU+CwC2f4g==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.5.8.tgz", + "integrity": "sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ==", "requires": { "@babel/core": "7.8.4", "@babel/helper-plugin-utils": "7.8.3", "@babel/plugin-proposal-object-rest-spread": "7.8.3", "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.5.7", + "@mdx-js/util": "^1.5.8", "is-alphabetical": "1.0.4", "remark-parse": "7.0.2", "unified": "8.4.2" @@ -14868,6 +15621,15 @@ "source-map": "^0.5.0" } }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -15334,9 +16096,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -15375,12 +16137,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -15646,25 +16408,25 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "sharp": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.23.4.tgz", - "integrity": "sha512-fJMagt6cT0UDy9XCsgyLi0eiwWWhQRxbwGmqQT6sY8Av4s0SVsT/deg8fobBQCTDU5iXRgz0rAeXoE2LBZ8g+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.2.tgz", + "integrity": "sha512-l1GN0kFNtJr3U9i9pt7a+vo2Ij0xv4tTKDIPx8W6G9WELhPwrMyZZJKAAQNBSI785XB4uZfS5Wpz8C9jWV4AFQ==", "requires": { "color": "^3.1.2", "detect-libc": "^1.0.3", - "nan": "^2.14.0", + "node-addon-api": "^2.0.0", "npmlog": "^4.1.2", "prebuild-install": "^5.3.3", - "semver": "^6.3.0", + "semver": "^7.1.3", "simple-get": "^3.1.0", - "tar": "^5.0.5", + "tar": "^6.0.1", "tunnel-agent": "^0.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==" } } }, @@ -15701,9 +16463,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -15751,9 +16513,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -16152,9 +16914,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -16493,22 +17255,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -16761,18 +17543,23 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", "requires": { "chownr": "^1.1.3", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", + "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16781,24 +17568,35 @@ } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" }, "dependencies": { "bl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz", - "integrity": "sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "buffer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", + "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -16857,9 +17655,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -17106,9 +17904,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -17206,9 +18004,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.0.tgz", + "integrity": "sha512-kVx7CDAsdBSWVf404Mw7oI9i09w5/mTT/Ruk+RWa64PLYKvsAucLLFHvQtnvjeADM4ZizxrvG5SHnF4Te4T2Cg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -17915,9 +18713,9 @@ } }, "vfile": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.3.tgz", - "integrity": "sha512-lREgT5sF05TQk68LO6APy0In+TkFGnFEgKChK2+PHIaTrFQ9oHCKXznZ7VILwgYVBcl0gv4lGATFZBLhi2kVQg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", + "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -17939,9 +18737,9 @@ "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==" }, "vfile-message": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", - "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -17961,11 +18759,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -18010,14 +18808,14 @@ "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -18029,7 +18827,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -18668,9 +19466,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/gatsby-starter-theme/package.json b/starters/gatsby-starter-theme/package.json index da099a9901b35..551358a213f25 100644 --- a/starters/gatsby-starter-theme/package.json +++ b/starters/gatsby-starter-theme/package.json @@ -9,9 +9,9 @@ "clean": "gatsby clean" }, "dependencies": { - "gatsby": "^2.19.45", - "gatsby-theme-blog": "^1.3.30", - "gatsby-theme-notes": "^1.1.27", + "gatsby": "^2.20.12", + "gatsby-theme-blog": "^1.4.12", + "gatsby-theme-notes": "^1.2.12", "react": "^16.12.0", "react-dom": "^16.12.0" } diff --git a/starters/hello-world/package-lock.json b/starters/hello-world/package-lock.json index 18615d015f0e5..1876d14157a55 100644 --- a/starters/hello-world/package-lock.json +++ b/starters/hello-world/package-lock.json @@ -13,31 +13,32 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz", - "integrity": "sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -55,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", - "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", + "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -83,22 +84,22 @@ } }, "@babel/helper-builder-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", - "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" } }, - "@babel/helper-call-delegate": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz", - "integrity": "sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz", + "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.7" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.0" } }, "@babel/helper-compilation-targets": { @@ -198,16 +199,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz", - "integrity": "sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, @@ -272,6 +273,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -284,29 +290,29 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", - "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.8.3", @@ -354,10 +360,19 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" @@ -373,9 +388,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" @@ -430,6 +445,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -498,9 +521,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz", - "integrity": "sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", + "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", @@ -555,9 +578,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz", - "integrity": "sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -588,43 +611,43 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -654,11 +677,10 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.8.tgz", - "integrity": "sha512-hC4Ld/Ulpf1psQciWWwdnUspQoQco2bMzSrwU6TmzRlvoYQe4rQFy9vnCZDTlVeCQj0JPfL+1RX0V8hCJvkgBA==", + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", + "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", "requires": { - "@babel/helper-call-delegate": "^7.8.7", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -680,28 +702,39 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", - "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", - "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", - "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-jsx": "^7.8.3" @@ -724,9 +757,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "requires": { "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -795,11 +828,11 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", - "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -807,14 +840,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -823,20 +858,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -850,38 +885,52 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/preset-react": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", - "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", "requires": { "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/plugin-transform-react-jsx-self": "^7.8.3", - "@babel/plugin-transform-react-jsx-source": "^7.8.3" + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz", - "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz", + "integrity": "sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==", "requires": { "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" @@ -898,16 +947,16 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", + "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -924,11 +973,11 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", + "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1112,9 +1161,9 @@ } }, "react-error-overlay": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", - "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "strip-ansi": { "version": "5.2.0", @@ -1219,9 +1268,9 @@ } }, "@types/node": { - "version": "13.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz", - "integrity": "sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1239,27 +1288,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/reach__router": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.0.tgz", - "integrity": "sha512-0aL79bFPJzJOJOOMZm2301ErQVaveBdpW88uuavXymUlcYIAOCmI1ujJ2XLH6Mzn76O94eQCHIl1FDzNNKJCYA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.4.tgz", + "integrity": "sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==", "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/rimraf": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.3.tgz", - "integrity": "sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz", + "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==", "requires": { "@types/glob": "*", "@types/node": "*" @@ -1277,42 +1326,42 @@ "optional": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz", - "integrity": "sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", + "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", "requires": { - "@typescript-eslint/experimental-utils": "2.24.0", - "eslint-utils": "^1.4.3", + "@typescript-eslint/experimental-utils": "2.26.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz", - "integrity": "sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", + "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.24.0", - "eslint-scope": "^5.0.0" + "@typescript-eslint/typescript-estree": "2.26.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz", - "integrity": "sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", + "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.24.0", - "@typescript-eslint/typescript-estree": "2.24.0", + "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/typescript-estree": "2.26.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz", - "integrity": "sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", + "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", "requires": { "debug": "^4.1.1", "eslint-visitor-keys": "^1.1.0", @@ -1339,160 +1388,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -1835,17 +1883,17 @@ "optional": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz", + "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==", "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", + "browserslist": "^4.11.0", + "caniuse-lite": "^1.0.30001036", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss": "^7.0.27", + "postcss-value-parser": "^4.0.3" } }, "axios": { @@ -1919,16 +1967,40 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -1991,9 +2063,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.7.26.tgz", - "integrity": "sha512-W54KrgluCcMCLq9lCtZBYzmG3Q4X0zN+mE4RNigbZhrXA6oj54Jz2tKrSW3eW3Sw3TeGsT4oGSQd8JIWyKIhqw==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.8.1.tgz", + "integrity": "sha512-c/JNri17WypqZNnMsX2PweMe8e5hsJcYNO/VnUBX9iUIvmKBjd143RaUQq0xYa6bpQF0kzpTFVR0sOp+cQlBOQ==" }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", @@ -2001,9 +2073,9 @@ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, "babel-preset-gatsby": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.2.36.tgz", - "integrity": "sha512-vmqN6ht4B28dHlK7Qsau3JseHwTEkLjf2QkUcUKlYCuVk7skZkbN2B6O8QeJQTQ30V/6uUKiNMU/U0nc0RYMNQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.3.1.tgz", + "integrity": "sha512-oT/GA1b3xi9xssdwWep874zxD8RZSBg2iL7QHy+emcgkJbYBQJC4NItw561tZGIQqVBJJx8sRaw3V94d1vupOQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", @@ -2017,7 +2089,7 @@ "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.0.34" + "gatsby-core-utils": "^1.1.1" } }, "babel-runtime": { @@ -2444,13 +2516,14 @@ } }, "browserslist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz", - "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001030", - "electron-to-chromium": "^1.3.363", - "node-releases": "^1.1.50" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { @@ -2513,9 +2586,9 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -2681,9 +2754,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==" }, "chalk": { "version": "2.4.2", @@ -2757,9 +2830,9 @@ "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -2980,9 +3053,9 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clipboardy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz", - "integrity": "sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "requires": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -3693,17 +3766,38 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz", + "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -3724,9 +3818,9 @@ "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.1.tgz", + "integrity": "sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==" }, "debug": { "version": "3.2.6", @@ -3915,9 +4009,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -4228,9 +4322,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -4299,9 +4393,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.376.tgz", - "integrity": "sha512-cv/PYVz5szeMz192ngilmezyPNFkUjuynuL2vNdiqIrio440nfTDdc0JJU0TS2KHLSVCs9gBbt4CFqM+HcBnjw==" + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==" }, "elliptic": { "version": "6.5.2", @@ -4482,9 +4576,9 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -4631,6 +4725,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4640,9 +4742,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "requires": { "is-glob": "^4.0.1" } @@ -4797,9 +4899,9 @@ } }, "eslint-config-react-app": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", - "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "requires": { "confusing-browser-globals": "^1.0.9" } @@ -4851,9 +4953,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -4938,9 +5040,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", + "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -5045,9 +5147,9 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -5073,11 +5175,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", - "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", + "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", + "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==" + } } }, "esrecurse": { @@ -5153,9 +5262,9 @@ }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5497,9 +5606,9 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" }, "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { "reusify": "^1.0.4" } @@ -5513,9 +5622,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "2.0.0", @@ -5540,6 +5649,17 @@ "requires": { "loader-utils": "^1.0.2", "schema-utils": "^0.4.5" + }, + "dependencies": { + "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": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-uri-to-path": { @@ -5657,9 +5777,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -5798,9 +5918,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "optional": true, "requires": { "bindings": "^1.5.0", @@ -5847,7 +5967,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "optional": true }, @@ -5997,7 +6117,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "optional": true }, @@ -6019,11 +6139,11 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -6032,7 +6152,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "optional": true, "requires": { @@ -6059,7 +6179,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "optional": true, "requires": { @@ -6081,12 +6201,13 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -6156,17 +6277,10 @@ "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", + "version": "2.3.7", "bundled": true, "optional": true, "requires": { @@ -6298,9 +6412,9 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gatsby": { - "version": "2.19.45", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.19.45.tgz", - "integrity": "sha512-MyhgdrmKWBzYVKZTv21sQza1VNAA3NHWIXVqKtgfKGRvZ6wjiiZLElX9vYbQFXfIpoUrncDr3CDVuhEOqd7qnw==", + "version": "2.20.12", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.20.12.tgz", + "integrity": "sha512-HoyjJA432ZUKOgkzsOSEdSbo3Vhi3lhr5uw8JnebO4S9Cqc6J2kw9HNASwtYFGzZVClGrsYwXVaLcOnSKtZmxA==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/core": "^7.8.7", @@ -6313,18 +6427,18 @@ "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", "@pmmmwh/react-refresh-webpack-plugin": "^0.2.0", "@reach/router": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^2.24.0", + "@typescript-eslint/parser": "^2.24.0", "address": "1.1.2", "autoprefixer": "^9.7.4", - "axios": "^0.19.0", + "axios": "^0.19.2", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.6", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.0", - "babel-plugin-remove-graphql-queries": "^2.7.26", - "babel-preset-gatsby": "^0.2.36", + "babel-plugin-remove-graphql-queries": "^2.8.1", + "babel-preset-gatsby": "^0.3.1", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -6363,13 +6477,13 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.10.11", - "gatsby-core-utils": "^1.0.34", - "gatsby-graphiql-explorer": "^0.2.36", - "gatsby-link": "^2.2.31", - "gatsby-plugin-page-creator": "^2.1.46", - "gatsby-react-router-scroll": "^2.1.24", - "gatsby-telemetry": "^1.1.56", + "gatsby-cli": "^2.11.5", + "gatsby-core-utils": "^1.1.1", + "gatsby-graphiql-explorer": "^0.3.1", + "gatsby-link": "^2.3.2", + "gatsby-plugin-page-creator": "^2.2.1", + "gatsby-react-router-scroll": "^2.2.1", + "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -6390,13 +6504,13 @@ "md5-file": "^3.2.3", "micromatch": "^3.1.10", "mime": "^2.4.4", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.8.2", "mitt": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.24.0", "name-all-modules-plugin": "^1.0.1", "normalize-path": "^2.1.1", - "null-loader": "^0.1.1", + "null-loader": "^3.0.0", "opentracing": "^0.14.4", "optimize-css-assets-webpack-plugin": "^5.0.3", "p-defer": "^3.0.0", @@ -6430,12 +6544,12 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.41.6", + "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.2", - "webpack-stats-plugin": "^0.3.0", + "webpack-stats-plugin": "^0.3.1", "xstate": "^4.8.0", "yaml-loader": "^0.5.0" }, @@ -6471,9 +6585,9 @@ } }, "gatsby-cli": { - "version": "2.10.11", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.10.11.tgz", - "integrity": "sha512-tEM/Z/aVFuud5vDMMvx0bIA6Ud8/KVGSRLKMALm45nJ48tsSlZKZMUAcglbDt2wagljrGQ13KpH9Nb9LeRjTKw==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.11.5.tgz", + "integrity": "sha512-yAvyplWx19dU5gYdWJETEMywbNTtL9HntlR65cHhznKiwrr6Jyao+TsE50CmgZ/8Vv2JMF3UZFd3vFRXb+aK7w==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -6490,8 +6604,8 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", - "gatsby-telemetry": "^1.1.56", + "gatsby-core-utils": "^1.1.1", + "gatsby-telemetry": "^1.2.3", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.0.1", @@ -6647,9 +6761,9 @@ } }, "gatsby-core-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.0.34.tgz", - "integrity": "sha512-CVuUQTVY+0X7vAqFnDeRT0ZkN0tUXvk6GLvUqfmoOzBvX9HphiR0VTi1tEYrsc5DSaz7Oyhr0vdp8j/e96rH1w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.1.1.tgz", + "integrity": "sha512-EboPcBx37YQVUKN9JH753S54nDxjRmOefbR0i08KTmaVgQ1lZnDXJr8JfrImmMqupZlOkPQX1mWlXfp+r1jGhA==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -6657,59 +6771,59 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.2.36.tgz", - "integrity": "sha512-g5sMsQkPf2wkr6XMmzmB4at9q7Y0vV0+Vzurn/HPij6s4uLZ4Etm1h09P6fn56C2j3rSryfCTbok+xROjew9UQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.3.1.tgz", + "integrity": "sha512-HTW0ST3zQGxOORCpmRKhy4lO48SwA9QHBfVBTm8zUWh5jgJOtDZa+O0CLxEieQhdb54lRt/PuZlozJCYFLEkYA==", "requires": { "@babel/runtime": "^7.8.7" } }, "gatsby-link": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.2.31.tgz", - "integrity": "sha512-LNEEPW02Kt+pURc7XXpnK93yjISbrAS5EIYSUoAnd7CUDlPGYnrvIQMvu1i/5/V6jV3zlprFoB3b2SimOIYKLw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.3.2.tgz", + "integrity": "sha512-A4aC6EEux/zumpgWnMlqcLhDq80uwzuCVrYfPVBxs/fFifVzzrMIvsPFhqw5w3l5DHC3XkxP4Y3TZq+EhypJhA==", "requires": { "@babel/runtime": "^7.8.7", - "@types/reach__router": "^1.3.0", + "@types/reach__router": "^1.3.3", "prop-types": "^15.7.2" } }, "gatsby-page-utils": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.0.45.tgz", - "integrity": "sha512-StAEEFuHmtOwrNxD8g3ZmH3SLM+o3kU35AfVNEL8J74Woh5r6W2eg+7EPBae2TXIkrznWQUFuViBlPTuLBk06g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.1.1.tgz", + "integrity": "sha512-g4ETSZM7wlMycHPKwQ7QqxkqnwbXCgwg2Sqh2DyCsd5qwtPm6RrQht3cnbsKAeuo7gWsbqzv088YGa3krrIREw==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "chokidar": "3.3.1", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-page-creator": { - "version": "2.1.46", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.1.46.tgz", - "integrity": "sha512-Yx8y2DYl/7wq+CR011/gVbfIXAC424hjZN/BNZVY22WQPZ3vsBScqa9B0awpJZ3OCzLKqWcK5iRHPxzQHUwE6g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.2.1.tgz", + "integrity": "sha512-RRlk7FUScyEj1S6PlGpdj/lrJmps+rl7sQNauOBCIGt3Sod5alin0l8aQJa/ldpI6DIPbp4PWIpqkPsWxED/LA==", "requires": { "@babel/runtime": "^7.8.7", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.0.45", + "gatsby-page-utils": "^0.1.1", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-react-router-scroll": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.1.24.tgz", - "integrity": "sha512-Gv+oqGwDOaP2VHCRU2wP/GJP8o+XsFa5vEB1imlskfqpM8OG/Oy526z00WyTT/Pdks9mGg+bGyGgJzovQHIugA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.2.1.tgz", + "integrity": "sha512-mkaG6NNIbWPNiU8Wj3aawUQa7AqI42Skrnh0VCLUCSDvUgCjOJOZfxM0FVPA/masNiVsCprq3a6xz7fmW93jgQ==", "requires": { "@babel/runtime": "^7.8.7", - "scroll-behavior": "^0.9.10", + "scroll-behavior": "^0.9.12", "warning": "^3.0.0" }, "dependencies": { @@ -6724,9 +6838,9 @@ } }, "gatsby-telemetry": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.1.56.tgz", - "integrity": "sha512-WMYO4uSmu/nfwt2sTUExA2pXRVJ+7AQuvB1LDPPYKeMkQee5eO23TYRS3pxWqIPtxmmFTruXwNEsMklwlxn2eA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.2.3.tgz", + "integrity": "sha512-butEEIfuGAWZ9cVISrS6XVXMFPweFTDNO2Z5jj+mA1GkHlriahF4BtbVX3b4miQbQW16g2TfzNw/ztwIUfy0RQ==", "requires": { "@babel/code-frame": "^7.8.3", "@babel/runtime": "^7.8.7", @@ -6735,7 +6849,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.0.34", + "gatsby-core-utils": "^1.1.1", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -6995,9 +7109,9 @@ } }, "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.2.tgz", + "integrity": "sha512-mtv1ejPyyR2mJUUZNhljggU+B/Xl8tJJWf+h145hB+1Y48acSghFalhNtXfPBcYl2tJzpb+lGxfj3O7OjaiMgw==", "requires": { "graphql-import": "^0.7.1", "graphql-request": "^1.5.0", @@ -7063,9 +7177,9 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "has": { "version": "1.0.3", @@ -8435,12 +8549,12 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -8651,11 +8765,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -8964,18 +9073,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "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=" - } + "minimist": "^1.2.5" } }, "moment": { @@ -9145,19 +9247,9 @@ "integrity": "sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ==" }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "noms": { "version": "0.0.0", @@ -9237,9 +9329,25 @@ } }, "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.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" + } + } + } }, "num2fraction": { "version": "1.2.2", @@ -9792,9 +9900,9 @@ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "3.0.0", @@ -10595,9 +10703,9 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.4" @@ -11271,9 +11379,9 @@ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.3.tgz", - "integrity": "sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { "@babel/runtime": "^7.8.4", "private": "^0.1.8" @@ -11553,9 +11661,9 @@ } }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -11594,12 +11702,12 @@ } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "scroll-behavior": { @@ -11838,9 +11946,9 @@ "integrity": "sha1-G78t+w63HlbEzH+1Z/vRNRtlAV4=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-swizzle": { "version": "0.2.2", @@ -11858,9 +11966,9 @@ } }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "1.0.0", @@ -12228,9 +12336,9 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -12458,22 +12566,42 @@ "side-channel": "^1.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz", + "integrity": "sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz", + "integrity": "sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -12674,9 +12802,9 @@ "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" }, "terser": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", - "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -12847,9 +12975,9 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" }, "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tslib": { "version": "1.11.1", @@ -13405,11 +13533,11 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, @@ -13449,14 +13577,14 @@ } }, "webpack": { - "version": "4.41.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.6.tgz", - "integrity": "sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -13468,7 +13596,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -14021,9 +14149,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/starters/hello-world/package.json b/starters/hello-world/package.json index 6e0747a079855..5d782df06e674 100644 --- a/starters/hello-world/package.json +++ b/starters/hello-world/package.json @@ -14,7 +14,7 @@ "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" }, "dependencies": { - "gatsby": "^2.19.45", + "gatsby": "^2.20.12", "react": "^16.12.0", "react-dom": "^16.12.0" }, diff --git a/www/reduxcacheOm4fA5/redux.rest.state b/www/reduxcacheOm4fA5/redux.rest.state new file mode 100644 index 0000000000000000000000000000000000000000..826d736f9769db236660523c830bc6aa61395408 GIT binary patch literal 4888003 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

    KwtEKCFsLs5~6@6oC0(Vg^7=C6f1uu%7 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

    ZnR#80>zrTeXdYv7rw=t)j^lp&|%c_YH7U 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�c7Xh6&0L^+&(8pnNoF zxFzet6QgpJU%D`L_SfJvctFgXPrs&4vXca-!wp?+4`93j$|Q__rJKjTwS}>*fDOzV zbXpW(cNq`bcePBGFlIM&rYLam6<{fnbNzLucXB8S;{K}%)cWIspJ`Vj1_!2yq4hKr zrzp*QkYaOk`qs$hR2_j=p9++}okW_9#Sg)plv9K_2bSZ+mG(`HXb-SdL z2NIILHcUOa0JeuykA3BMp*)<;QO-RVrErx&L0VkN=uBevHQoR8Gjq~;)8%u~onmE6 z6roU`_uHqJk>=sk>r3N0*_3bLdz(CjFa*-irJw$fuc7;uN@n51dc?uY;x;2(>B}lz z^RyYErKyzXE3&h2vd@^>S)@?$d7NUyb6 zGfo@|jT%A$4h$@~v;f9hKc`)l50=EoP(o|p&e5xc&V)NYo~*#ao^*PQDIB;YhcjI` z9iLpMqMp0|7Ci$m$h`wy1*iKM9Z+zy+pST6R;=nP6Qh2M&8dZ zj5-J#T7WyKQn4^^lco$_lrkO*I?O0nS@fymR#nRdm|}YsG-zoc4t!GCCClB2;g~Gj z)d~93P|pO}DK!Q&Dc}8+DF3@c1KChGjN)*1|RdpYjk<~O@W^lvQ}M`i5}mlGhD;Q&t87uQJdb5uZn{pb7Z^Xt>H{;~U69kxUJ0-goCr)?>C zjT2cr$hLXXr?4jFVHsEAb%NGhykAr!okF_jx;8omWjG9^F!mR_7JPN@AWUpt0qDqZ zi{a}U)WhKlO^fG;bzRUQ{>Qob4vz*229N3Z-TwXh&-d!_`}fQ5K$B#nKd9ex6EK0T zpePJz!LD(PnMDA!hpx#gj|Wby_zU=!*#zWY@+*@ATo`i||GPc#`E#xvs73aG)IvDt z2`Z8IoHft`2+6%BDBPDnz4EWWOsRR&Aw2x{_F8MUL2!@yZw?;&7JH`yP`F!AX&@j= z5Bw$F2D(grX_f(M(|@x*%AUcey3tUN)Pu~j)3G&S#JvP1(?fQXT>t!L6S$1!om_*R z5r$286>b{38=WQh!(whPkB{EZJ!a=GW9aS)m@Ixf_zDpWU-#UsrRi;;d&|-t)9C=_ry!gd zMSp9=C3~=ULV)r_ir(yxkAd=;mw{oulDQi=^%A65!iVKVYtX0N7f7ukvkM6 z2KHyTxzglcEN|?SK}1q5^QgRapt^k12i|Cy%G_x~;>6cscn^DeLZ3+u?!!cfd>I6j zbgopQE(K{a$4o)>e|I(v+Cg)({?E#>DLaF=RWAI6j-hHeJQ(+#jbe@@U+xveBkcB1 z7GW$#X5>0v1=Mr_dy;Tk83Ty!?7_53KV5|VMa|zbPPmSiPB3H%0Ha%B?6t;;a_8dD zk?*&}DO5P(JQt$t&qaeWzEqP0wvGJWRhg#V`JeN)2#NC?Nx*5zkY~Nqu&+Fc2Z7GQ z^)~hAi$I&~QQri5Cz(Y%rlZyP@c_6jOncOtNB!roFZ-vL6}vi!*MP@H>WDW*#oDTUgqj zFX`5!9?K0yLvkZ;Tf3d&tz^)fJg^%fUUpC6gNf|NVg#my9>ZZPKZCw-font{_Xl=E&5)=%Wf%L#16q3!mh}{3Vx$)VK z8I^>;FZ2W-PC=@?KxZ}L+RUUQsNw6&kDtE|ucN&Qx8vK#mOa<9M5VsOl<7Dl;JBnz zkUX(0i=aYoq+b#iRtIY6w=CR3M+!K|XOU*ZxnI}+j>T7@Cu6mvqalFZ7n zF;k9Gzf8HnA`I}+a{9VyeBYIAfTc!-eps=LsBAr^QjW?Dr=-}{L}+}?%FG{tkv`ih z6Slv^p7WO9a}={INO;bc1mOSg#Pjpd+-{EVh8nISmO8wh5#_X>CAXUitw z(SdG=tz1Ur{o6l6WHJx$1afSLmsE*VOccd*(VeFW^c3+!$_YaAq#a%``C?0IvJs; z<}50UX3o`%JB#{edP9I;8GELSdnFQAW-D{qwKyvtUiswitXmf#6Ah8iF7ifHGXeBy z%+12kWAX00rOV6u^+&aTpJhL`76FIp(g-bFOf+a9Dgk>SxB3RkS1oT!IEMW(&>y}o z!7V0MvZBH)qe~KBqo<_a5V8}b$|J(> z*O!W0&+{RsG>Kz-mM|t7rx&azc4^X3g_^fZ(JrOS#5}`B#%N%&cGpdZ^4xD#Qvl** z9Kn*U90z++86_Ow)oBKDYLi~Es>6(q2{}aX2<)7zT+z+a%k|4I1Uz}X&9Ks*RGVOy zm-hwduidU_tRSi-j$krzMJ_&(u}CsF!`-NEsd#h2r1J+na(538SRA`-qFghGwltB5 z-0Wd#y7matA%LHO+SQBCH1R;l?y>+UIJ=%agUr}ma#?m>fG6)3e=-_2&93UcTE1Me!6uNA6yymfUMA=Wp3*aJEGGAMj7eHk2vb3hinsO2-v5FzW z3X@E!OiZmYo?BZa9gz-;{p<6lHdYrO@3?jIJS|Z+gKu!B~I!}35mBsAwzcs-nvnwDgRu(QmD@Be)2P$x~vh{f%r6GRFhQSIEA0*p~2 zWe_wv9iXqz^$!LbhhKX(h7x|K&49f|rk>JBa=pO{k_L0Uyg^1-1GNV(TB8FkVtI;S zqejLWpC;IDx!LWaQ}hVCNo-*U|2^n29(JOA^$kQ5#a zs(ONNL|+2BsFRWLpkhK`WvMxEN%fjt z>7GDg$y2H#5M^T_ES#83m+Gs>lHFE@WE+?Va{y5aQa3<-yH$=H|E?Rx4#Xh?mqZeo z%(EnTIY>!pYe`hp*(rkb>Ox!V^n1^Lp6*kslH_DqKys>7td5c&tEa;d3cjk+38dG} z|ITjscNe4>bhm-S!Ozf*x%T_snLn?dB&FeAVP5s{RWY%oGG&CgPfnMZ&a9u$1CYR^ zChX3ZANs8PK&A{;8Q~Te(0Il|U;qv<&QUuqlWcbg5QtH~vGptZ&{E3M!X zH1XVb(iElIX10ciY+&=yC6Slmt8(9B`^&G*je)P@C~0|zz7o3Ipr<45m-HL8OYVE=k2@D-aR~PWMFc3Ib|BGJlb+wc$bJ>ifuNC)Opt~O}!d> zZ@T%+i;K~T-lzD)(P^e7p=scKUiH*Ue!VJ=w_LwU$(O)Hdt#7hP10h{MCNpNyc)jl zUmx#(AKpVdkn^XR0xjDHG{55V44E#r-fTU6`&jLZQ7z=8x18eiZdPwH-? zR98NN7ZfxbZZa%l)0rBuAf50nyAgnj2`>($8<>)nT11`kC92NZyQ$e<_q*kC>v$2x z9DaCHK(CCFE2#_zX!>e^r+VIRW#sBLGF?@P^V+=~b5F5JyKUvq*W_q$3qb^(W(=CT zIcp}Jkv;IWUuqCJ<-^vzLHJ(G9CKu)0#^I&p}K11aGe(PutJZcCTp?p&-Ksk?oZdL z&1;H4ul#y@z4l*BPOO()rq@Q-$?(JNE1$&`dUtR1S=De2v?cvxgEKs9piU2|?;;Fq z4*2#dthy1t&#D?IDCsU?qAYh@*u9$S%1q3hObc+&3CG`-)8YxHG{ylmQb>>-K>=Nvk{2 z;LHCgw3GyNHgY*AfIG>*G~{NZ8+Fyfnrq+$kh%V+d?5zNrdoa(G1JwY5~iU7S1pXK zCNQa_Ct|S;mA-%E+#HCFWkSKytT{4A__`neb$AnpoBgqV-hSiaP(J>AriG#pCizSS zlQJRZKoEa2DyFO&xnh3DZsF4v2@+SZCyAoZBRFLuixN>GV=_Qmg~YSNR&>AVFGC55 z?S-Z^sS1}uwBpuy>xv5fv70QgNPa6@+p~U*15J5SYDMyL%k&D4UI^N}coc5V0=X+Z z#U35BBmq0EEkXdgYdT#*y~;W^2GcqJbz=^~%Nn#K3LuGv(CNlcR4P&*ohV~_^m9#u zMdducIG**mNW8QSTp8WM z|7l-spX+aR{dTjpzq)#Qdj9>mDnFdRo@>_C148t}$l8`feM_j{^d z@1a1e>hXT}*70qVg>U;UanJ9AMp&omMrEacvWVv5*5zay;SbN1b!k>ZEw6ZHRdyz^ zibtFH*G8a{>%49o+-_jmDXyfr@DPcWzFM`L{`ezhs zhY;A@e7pTO`S3r*kgx0xiXu?31Wo!RUKdGz#=&CfgD4F%xeZu;#llD$B8jtWmWhR9 zXd=5TrU%L}y$L^D$>bwq>dSUy(oCBRG@t)*_fs;^ ze0Xmv$%SrfQmIV(!%5KB@Ze&ru3sqn!`4*n%_kHierYU`qWZ-7kb7fly88h2X_^mP z6U=CADDDoE2&c7TByEs{SruGuk^RJmu~5+6pb!6f-W`7S;d94^a$8&|mG(c%3y_P* z{dnBTOiD)O=4T+T?jw3M4S9m}cGbd)3A!TPab4itFCG@vER#gF%EM@rSYEZT9^tHx zs-ouDn2qXH5NKeSM%hFVW!md8p+vWA#fSBN`TBDIhq2P81xf&(uC1x`I5HaZH92mj zUIE9G(=4eAC2kB72=p@Gp-Wcjzc$x)Rccz)$pm?7yD8m{Tq=N&dLg_^BwE+4?bOE{ zNXG`U>860hqe7*NgJ4+)Sc|Hoi^%emUfx$f-kpq>b}(@h5m-i=agGIQw!LT@u?^B` z%#Jf~!6gw#rh$vzX4;~>GMIw5FtM98f_*}@8#0jYZKzuV7o{3;84^HYZs&A_UK8BY zwX4gtUdzk;{BD``u&(y|?OVdo#05LzalPCjwU*x>J)jF^Ne`6|hDK>G!|2RjGX&5) zEtT!?RZ;o)2gP4Q1?*Wvil=X5<4EM^j%3a1tqy(G1zSbEBUD2oC}|iuN)&@ceymPs zOv&b9#UHJj>1%tD@DL>0^T06U`Dxc^TajiLU!r1MV&zDZLtrdpiqM}-K*=O=M{Ve; zo^WP>sDwKrI4Ob{!M#)9T}l2Tag4Xc&{egC$5Co(7=@g}d*6F?1n}2kZ=7RqYPUm| zra*o3eOte-Utj2u{-+G?I@aej0n$wi^<Pos}uGm3n4K4mlj|QZu8av?dcL5C|YqI5rNMm1Q!SE_9&_{RaJ3J&$`t!Xw}) z09j2or@A^5@bGZ|j_-HkuBdgR2caQ_JGz2)jQkmSMhLz6E>*48l^FVqO$#glAOX7| zp@xzw$kzGaghUWuCE3H2PY~WmH>4iK8H=L<$`at4;I$QqcE_Yr68(;gT2L&AYYH{I zadCPXU>gE!QA>*;X8EA$ECjuAW63+((ghR!>UfW@QKwS~O<(qbl z&qwL0jrFLf;}25c$cizM2h0?R2BQW1B$Yjr7m%arVElRK1nyap)E3fL%KGz=E2@&W zhjovB4#-|w_E9r;{;IgUq-7AwqF^k5yp&360y3K%RFxk?({E<-5Vm2Sw5;BN|JK$!LA!xior&zou5IV3ZD3{nE zGng3zXjClewQ_hV+W*plgoH=xTcLkS!AZs@=j_fVJ{TIL?eMOrEycNoYG_)nAXq42 zu>lpdb3@(?@6MFA2FZfIfN==-L_2sr<`PwWMpFg3lfpnFG`VzZ-OY-f(83<})|)=rKs3FnbCgm}NFxQB&sx$(EifTS@J_ye=i zP3BKo>C^nFx$Ro})!8k$RYTH67~3AI;V=S-TN!t_C8mnC#fzW1)PPn%ls=&D8B_)x zVyx3Z*D@C3EdX(h_C-XVv?~j532~EGjE8Ev1QL=a-5|LocFGN->74YMS|gu8@J8hD zyjCmhOK|ifxmL&vEO6NbkHlt#SES=}oao~l-t@dR=@3kX9~PcvN;qZCb#Z7iLm_Dk z1N@9-eeRkVTcn{n?%u%#*r19GD>f-HWX=WV^DXXr>O_7b`e<(jX-j_GCmA1CP7iSk(wqd8(F z8y+&)4|kR>5%45w_`v^^%FxY$RIDqmzT@4Vwl01ljR{n|RF(^L0ech0BG&_;i^&go zQP>`-H-6f>_Wxp>BAFv*`d~l8LgZER1j@9ii^hY-xl3Uw`hR_?81`MfCX(za6>>Ys zoPZXI+^|{C6`%t}g{e)15h-F==*&fFazM5ZrZ!+YvV+Eg1Q-bjlcar*SS5&eg{gSv zq6BP79OAm@QD~%z*QZM{;0f*lodzh)c6LE)(PFdizkKQ@+f#?JXbMv3B?ayc_**el z5`MHG1uTx8UQ^CHWHj;vy6VhDsib9E1WplfobF4g8)H!nx*={+A6yyHdFG;wYQIH= z@a7?5f%I{}C}gK?ngD?rsijl{naPJMFSY9^5O4}j0K zHU=e&6#3vdJF*l=E&#^DJp0yXu+|5LlF|05#G9cZ1+W%jOR9?dw-sRb`S~VaUfsFJ)vhoTgxGa8p&Fp&1*YJroKjKnr4qgKtan$El?xJ zN$*TZqljDq^=8r^ zeOhj5JZ0)e8dyBCARX6l8JpLzqz4OlW6TiD(c`NfQs4e=R!GERvC!#`C75TbiADW*iOgXz zd!DF=&e2=f1~R7WEB+ZFBSaLP&jAZaFr*z9p-XId(5SbrjcrcOIQ9!EnHbabc*l7L zNM__V1J7u;SsAcSyK@YtWx1+C(pJL|QN^w|#b&$4k6J(OqBUSz^bv3_E(H&enFV8H zj1UgEfpiHu5h?wa^=Y_55+76%as$bs!SBBVH)HNJm0h&rrTf*ltdFX}>%{)0o0>jB z7z%~tX5=UX7KSvB>|-&dc`xOf0ZT~tadWT9TrdLE$6?2`AfCx@X_5{{!Q%)~w zd^y}3P<^sv->@w8+T=0Xw9v^f-xC$0g*p|oM3YI6wTiBM%WlcdVR)eK5Y@1rG%%pa zbCed)EPyCym_L1+XqFPNYP@+NYSqw4!#2puUOfV75zm75)^rOZ5Pgl{*Leo8C6I?; zqGK@O?>nr3@7}$6b=n%x5R+uWj{;64j;KulfoWq#B#I0TF}$~~4jPW}fXhf-5ajWZ zOj;VA(tHCDg!zR|p<(q@HZyZ{vKl|ygZI_Bi~KWunGd2UwV}J+fBX9W6&6QMz#+|=dn$OBjJV8F%a6g0s828cBkz1d!~oe{}F%a+R2DR z{H=mOC*6b?*@eGCo-M1U=o90r#>JATrmI+KdId@4+a4)XO3~K+{JjDNSaMD`Q6eJ9Mk|JfnE&9TMCc)_J7bzj zQ@uU zo~rdg^V2{3gLi*Qt4D-2myNIps0e_CHT?9(q?0A^7C7&@YtplvrazedWHa!GIm37Y zWYCiC^%0~9JM8Q=zX!Lb-7H#_f@UN%#w~Xb#(70jIvKR|gMxcf_rAX#t*UDND*fx1 z@3iExc^Ok{fZ6FgkGcY3w_!RJ<|Msg9sqd0X=R_=#Og-{AxF?Fw zNX384elaPoiT#kRiq;pFF&u1;(+7NCI#QF6&${=C9_+91uV#)U`o5w1S`k*C<$H!* zfL`^ME@c)C0)6dE!DP7rY=>_C4gP}$%qe$ykUTqH#Z--p}_vpap|? z@E#c)%gve){Y{Uc%Q1mm)Z&fp7;tehZ^$|Z&SC}x&BmDo1hb?rTz@g$^vDcuPN^oC z*X(e6)>SJ;my#C{GvpDHU_nSSaSI3?V~RGp3{AwPBcYG^iB8h`wr4mukIGUGC`_rh z%kMpvk-(O;bR@7yivkGr+n!NkUD7QX=5nY-cq3-v(FmOO1Wa#X_JdNi#au9!o;zbY z>I8tArWT`QwC(NH!v{JMu+Y5)X(T%%S44Ax0vIyG#9XV}&R>_DNr=&$BdfoGZi-G9oeG~K6!i1-c#IywaeOPI5Q1$0Gm^c88^!R$-zo?^9r#BgXIz;XdZ zP{+oBn}}r)aAe8@4gsNHoN~k=<5?;EqX{z+kG3gwd`a?NNWLVatF+N4LwF3ggCWx+ zg(NAUWJj8vwM%S0KqS(A>9oUf5-&3hWmjZcuaiSd8yB3=_L4I@1&k>pXtMz0UBbOP z?2xHCxSRvg2>lj^se(_^PLN)|G;+YfI%`P^(dZV7Dy6+P0*CZe8#WSr!cG22i&~IQ z2>+}l39va^8${QJ86Y{{I1V8h=+<=;a{iv{NmCb!>1PJvP3?!VD;ccW-*OTHh~fPQ zq}CB(r>4!QJ=p-}GvZ!-B=3Ms3=(H=k-%?RnbH#AF(QR<5F}+2DTS|{Aok( z6o1i^?uy!3C;FYfUWIXXN2C|$mxf5}4+G;GNew_i=P}AzAFk0jXRL=R!BnG|*~V~0 zUpYy}yMcERWFmW>5r-XHpS~ZV1inM`v%%*cSZ+)mzsAC0SR?TV!mYY_7=Y%1*!J>) zymD&NI$3?(n2)xyc((@OPncR^hdt~#Ol_~9b54usr~ktCVzu;*za$|3N6O4PZ1s-zqI@` z6(lsjS**GlP&$DyA*iV}wyM*t9q6mn9@Y&>+0ZFJI7VCnQK zC6R=bV~FJ=dFkZM8L0%;q&kDvUhL|Rcb-v4Yj5hR*IUxonDMTa&CA)-l7>#?ut97D z{1}cPetC2muruaw;Q7+`3=xP`Le>>B0S$mF_JG4$z+gw0;hKh&p@Q%{s6UKtgtQF+ z0Q#zcz>|K}ifFW7YP2av4om4c9I%B~rLJc8x>xMz9?9eg@Gb*t11{hKpVkU9z z4>5>P4$0|ThLT6d#F{0G4DD^)mf{b5SPUAvsG#NtbbSHbJ8dP@D_OvfsC;Z5fJ(uqCC2ami;a$81dEXvi9{REYl`+J)pucOpJh-hs@AK|o0lo;Jmf zrp0WrT5O}taY8KVud!7p#KlOfrLRTEo7bc=>`p;Cq>B*5 z;245Zql->lj0xh7ktC-fqz4Ee(ku@_Mt-Yf5bns7$_)ft$5~7(+7Z7R_$1*0a2Z(- z#)P$Rur_ybbBEDGz>Lldr>@0#BRnf}p-72BQxd2pA(j)vs-@ZkJ*lm;Kd3CXF9*xr z-;$?5yb3ve#WL6c_;4^I?^xXvzWVOnzuegXKO}H)eXV4_&eyytDQhJ6HT~OrwqMya zuB}CCWD`Tnlw@HfVE3WYZ2$>yglqbN%K4w-IrLAU%M8+v*q%57Ph>Y6FAr0#}$1ezrKM5aQFFpis6M&xoGUxx-bI5QZ% zWUq04x1^@RpXfD~0Fy)InG(0Jx0i80G2b(Yu(H6;y+>Kl)z|nl0v|gSS^ojj1%+V! ztW~nV5(nx;5004z_!^kFv3TudZBU0uc(lMqIc-l!E#}&CKzPO4;l?L%F0ptAG%x{B zr;BiobLu@&+OiwAMNbA0RXjkz6i$lyjF`O`_7F3^AVV{0^LFZ5^uA-dAZxLnCIEI5 zm1Xp3u`#Mc!NKKEU5k)mg+Yiv?gZ)YsfO0RxAK;;4t+p50P5^i*LZ_qldFiv*)COy zg7Bn#geIqGMzVUGqjE#G29?29tY!w*b{Arf0JFU)Xk$7Cmsr_ffu?kHIi+fWm?P~? zkTEALMCT~9v8BEmA)y-pkvzhp)J)OTg`0Ip2Z`LNX;Hh92uHc4wRVDyw)eKAQ~D|e z2q+x-8ne8v^FYBSLqiD#0y8Lx?fQ;obVrUqC9ODnHt#&XpSvsK(&Qik^o3cjz$(@g$F{Q7*Bs z295pYz8>?*ofQ=f=veesIEsuB=}bTz(XktndWlMz3b8XP#jmW+^3xe z$%>?K(NBij?TW~s&z_W z23#N@Xgq9lHBjZCqCtfa7rq98q{EI`EhjBSz=AoIuoTJa`a9yGY^Fys8ZKao9=4+C zq^0^a;s{fpsYt={C3-=Ol|XAnK0S@I`y{hwE#Kw^cg7r_rwJUtqj<^pZb)X9NaG>oOce+A5Y0(Jf>aLXo;Hye-nhodurc zUev5wyX)nmoGiyN+YsHp?lm<*E?fD#o=+c#Q2p2*5JO71-nab;;GoXmWn3vxcBLLxvd7H2ekvrPDS|#alPD z8V`prz0s#NBhZkQAXiUBRN{CWHC8v}L0a9H{@>Rwj)efC=TmTu~T>{-?NCBu0X6(7J(J z!iay{$`Bz5TbK^!BSSbq*+c=zStL6QD9vg&v~XHMw|pGa@r9YbkKIi2*NKeeQP8S@ zkRH9Vf)OQ#2~t7W9r*tG0q+t%Idf5L5XZmcBH_3r9-&HXbX;dbTg2x;YV7oU=Aw+b z0em#Y)Yc~y2wS@g62?`*1&)6F9+|rjdN)cXI4dtS6NnT*-6((&#yC@ld0ikaE+6hD zkPkje^4`6fnkO$urqcr%bSRZuJvUg-mLOaXxo#M#AM}IHSgyFDc*#MV=o2r)fe;)f zVX2QGY*c0u-)#wr#^OrQ(ZQmOktonQus*0!tI8}Fi$u{0)N}&5mY5ulE7-@WQ>gWI zF>3yanqYM!M0rtwRw9(TWyG}*V~jI( z)k2?g6DBq@)RkH_LQ=HVyT#2qV?hidtX*PnPGCSPn8c=>r3Wa{Mq9p^BbF@q!*Kg) zJej;!D>tcJ^Ex7aO%wWi3jh#ZkcyRX55zcN4jTUtOlQ%2IAcNju@-$>>>|pr1IcGW zL78L)&#`-whi=-Ja%_iJH&m3v^^Vh0aG~gFJ|zzqwEBV9?sR;T9ND%_GFmJ~Q}6^D zU%za|<+`_7kl{;4^oZ8*)pPVO2}YAAL`; zVnZDw36@N6RXhhdfLTgvAJ)D`6&obngs(}wmNHY!RmQq0rA}S#nu0;HPs!u6{WN7! zq!2m29fKINm;(fVKV!A(%2apY6cbQDsDq`2sCWJzCAT&R`-*)uqf&ns?NTahXu8Oy zn#+y>N$xiB9B@{eZgE5C|WCkqJXJBd)dohZceNSGD{3UA8jGx>PUBv@5 z#LBWvvc^%My=3L+r*vm@DI&8=o6Dw0HZ&u?1u%sMq+Qbuz$^EWh__l6 z)pECKiD1cI6E$F1Lth1fQx!tRW`&2S0p8Lb7)L?7qBEByyh6n)QQ?X}6}!YwqQunP z5>fX%hRzB3owZBq`Vj-*pJqt_MW`i+F~fAsLjh`Gt`%bQU~DM38VzDV7^EPf!YH-b z5lr`@Jd;FrZvTcNt3D}>@a}1A(fkpBm@G4pT>&!$9k2t*tH2JBHMX6xuhZ80$gBjq zD{~Wt8TBDlQKBTs3IH=kM%@&My8X54n9y*#cqXql$|t&JFy@d55Hs8%W?)jnpVS)B zFYN&uCp#h^v&yYS8ZM0-!5yed#E#RjMomL`bjCqn(SOD^Bd6`_dT>Jkj9Mf#s>;-K z89Lxu*+@nYyi2lnnmn-+oQXuYMw=k1K09j*td7z(taY!{y$RT|putrUdFa zW!qybUeQDYF==TZ+J>YY=mYD=NhFa}>e9nplH0dd4z;~zzO9}=Ffml(%X#HzC z+K`frV%^6=8*`}|Sv(e`6k>=H(9n>~-g0<6EJdH0>%sLcaecyb_P9D}DV%H7fj3~% z3&{k86No9$=MZELbOky&aVbKKAg6LBc}CnV>0{(jBI&3Eph*@P0)k~}rTUla!5EOI zn65Y5!T7bWeCpY~2AJu1L~0tY4xGjnJE@6FxzXr>ByobkOy0ga3DOkn&?A(TX|yj% z$WXST+Nd$%WB%_O_D=dQv1Xc+gl!|HNw%!eSPWUf)nE!#7~s2a@70VbMzAhd<7K>k zxP$)#!2&#F$-<`G^qDmk6gz=Z4$P9Ay_a7NO98jj^zblTm`TwHFKexs^@Wp$bga;! zr|yk$C)AMv@zEZWH2}vA-;*7ODN~Rs35X2ar0P91eCpLijx#l&puBEvL{1S^BqAx{ zQiz!0(O{I4)X0!cvNss@ck*JCkP{lRgBy+V-I;kM_z2deQ>EcN73k;0oe`PlDv?`5 zf_$oAGR_7}4EadyyyZ#vv{uapacXCA`MB6D*1a(9WkiKQRS!(AsF(f#s?2N)99;VA zqevVA%Cs-~=rW`N;q!)Nv8hPswIjtx%Zb6aa9&IYM0hh5=MH0nSKkjg9oa4I80>Co ze?1#J4y~;q?FTrNXMF@n17*#Lj>eXLTr7vHwU}xshqDw;ePFj-==_O9r zax%flkAXD~X8SH_@LLk3Sks#-yd^pJ_Y6N1$2Hf+oK`X_u%^qw1BJRbS1A8;)}zjW z*>7kjfM{H2i*5;o6GgbWCDD`O;=77hJ$-*h&dou=QAWDZS&gg3>qAz7umh1e7Nupf z{Sf6gk;_g`gjdCUPiH!^S4rr$!7&Vo(xYhuBiAbGP{^cbLhZRrg7p{RcsMhH@)_|B}*Q`bV$Q`v_nSB8e5BwP@~BGh>OfG9L2kfQHX*8%~=I3m63mWe)? zG?u;4Rh91jOyuEW=r_e$`)Ta;J2tOJm&JR7idLOts@jm8>VK+>h|-em6MN zL>hb7W-xdO7|x*^HId5dqp5=*DM|YPlOA1$8PG%@F-t1q!e|^&X+R#LvW#pSP-IGP zNn}y7%n!>=|9xn5RRu7z1|rFXqVf%^^VZ(8711x$7^g%X4+a|vOR9pS%Mh%@+AtXc z5d(>1!O@|i6wsMr1$b}h+k|hNLPv9g<7g2ZNL%osxNaQxO2_(Wf74pQ#N{yTOM zvoL7x{c(u-x373(p$x$)s?6vE;>fIE7?5WLx`(w_6h`o!15T=q)(b6KQ0}lP)O-4R z#N5faGw&J80va}9kP3e!#udd&wr4U?^YrzYNkr5ft-**uc4fbHsyJyRz%Vu>Azio} zM3Dq>ns^^gz`4Tcs- zFv&>a+)%enXCTmqPluaCU6lP>&swmg%Ni~lDgZ@!gXeRT$6cQ!=<1uR^s46u5t8^`6FavaN8;5L;_PTTN9Z`P+ziO+V73 zP^tt!NRXy_pJ?aZE&gV=`FMT5Utg7Q7&+m%t~7mx77_h=n;6kVG618nfJ-F*xqG$0 z9~D@zOrKAtBM9Zm~qxaQC8&BAd}aczy8nfHpd=hpBIR z00e&92QA} zx{nMp|AppqCii!yj@5Tl>(633a^k1&yIte(F!~_m+hgidQ_mIKjTh-^u?aGb#4$5x znd?zPk^6V^^;H@DMEfuBc=Ee-tto3G{D5^swKbLKB3*H4Zl9b3r5fm`uORPa!juh8hU6fi=1m5@QMiBU*Z2+1wUw=e4Oj;O z3si3vBXL`ju?YQr0F#7a&R&)nymMt0v{t(LpyQqY+h%>mewEu?qr7 z_K|)Ex)`jRsFe=V4N&~?bzn}Ma+C;DA{FDMo??vUA@j5keY|ODR1&HQq4EI)7)eDT zS-(UJfOFrIdRExK?7Me=v^$XcqC+0^W>uTjRdoxf27}RYRdPW$+4+mxqAe+tXMjA| z;IUPPjx1o{Cw`m2F#|<;P1uxdb`SuZa*F?suR@Z?eK7#9zlNJ&rdXoy5Ch~UEI~se zNN!)E*OtM0QI5$fs(JLa`G1)5L^*HIazM_B&>R(@5FmNpB$T5kK4vYyudfQ&Y##<{ z`5cEtGAr&4x$>@0l4nUrZEMKR-7BfseHy@V0^BF!4#@7o>Bxe`RH8Ds$lEvwWC5a9 zvC(9p>nlw*Qg#Uj2tI*l69OZD5bTrGVq$4Tu1;SKRF>E(5ep<8dsBNn;Mh2{nrs}p zxP`>LQ};%OIDVk9!%%?C*m+ol3J^0t-<~IG83| zA03uO>Y>&uE23&|**C_%U4qV8(Yfh_m_h64(Shi)DI`NTF)Z=c$wzed@p&t9nYYB4 zkuOGG=^hLjI>3)yI=b@`NFzzT<$~2bOUkPW8MyzxewZU2Um6L`d*gLdGQxsN>EZ!R zNy;2(l@93;mPvfNV+&$E;{}5>-NoD!$c4BoYUzsPZ~l*TB53A}1t}e&wHpW#?hSh6 zmP7}FxTv^mYV1+M^zcH1|I0*7kqJs`fU?>w7E@ZyYddEye?@g}Z_1SMGKNQ(fLW4F zPPcV{K3Iq0!H7X*Vg=Qb7;ujQ{3)J81|IxPmOY3+0+XgBn2OdWSwKnRCI3Ryef#^M zDz5ruD{`s9yrp7`-Z&^FQWq(V2QAVKK8Qj`wYQB$zIUdX*wLN7vld zFv0-Dh>^px`)k#rxhT6b=qNxUB5`klHK1`iDlaLjI;??$0a2pEY&fZc)D0S@PdNWg{G6H9er z{2ARo>$w7V6r7{8sVOE4hTBBhQXzxf8+=4zllosd96KZE4z5TaO@=C9TiF^40|@Mj z_AdbEic}J~X~B~hod;KRC>(J>Oe(@ zgVD+rQMY$+Z78Ju<=2^UKf`6ETVVM4>S}OT!uN6X3L>?*V}* zECdVYk1j)(GvqU61}21X@Qh(5j#5(2V4ocDV0w|L-qADF?yWC@NO z3!Sk~_{22Agg|IW^8xgc8pl)D0(!(*g&P^n1nC3gW88oSlk9v0yme21qc-V(WnXmm z!J5V%#G+;`0CPM|1MMC)@Fu}D+{678fcoNw^y;z5F1D$pGYnx?A}O(f7R@S2MzeW5 z5I@c@u$Ic?#KlM_AV-knrg|CuZW9_?(e_9O25_X60|?*Aiy=KpdE&@0L7)hmj@^^o zpnn2-M#&< zwMoU($t$BNneJ<79KQjcqJ)S@5aRcN)E+X0X(f+_d&|lg5IC7gUuysX&!8fvMTq}X z0!q>ctz1|+@lt-6ZO8N1+|a0N=8LClTJ)xi5+j_{(MSR$EMPZT99Q6=@CU9Cu>_)E zTC`;Ch0auOTAEPyE#+8}s=~oGy_EhC=_kZOIWrvq?O6Y&rAfi2d;-HBWr8Py^@x5~ znb7!|>C(8^VoT{DfC<5harv5_RkOn+wl@kKPvR-)IQNCrhkmIN!Qv%c0~*6Xh5I|| z*x>l{*0iPo6BQ_pf;vnpOVvJ73`N?B$wW|_q3ZM2#E`kAU=Y!5#Q}m%my*>oHhYbNY5G>*%q?6eAM`NSK4!$crS{k00V>S~3BKwAeXsMe?U8 zt{`C;utnLV{Y45teR>|uxTe(AImqYiks<@qxAAVM2-WiHQ@zb(mWyD7*G*# z7VIfx(mzXhAtJ!*6%DSU$3d4w%Eh?)@)5Ud6$X_Q`6Jj zb?rSfwx*awN@i{rN$n%h9&P{wfWwD& zNSCI#iLg0S3(j8jnt}r+v>-VEUpYpQDH_e86Z@dWB66exw*z5m;AUEUc`<+$ZuW*m z4{EWo%<1Kadd1iwvjm6~>BezTwq=P>l22R9@Q5$Bma-8P7%0vhoj$k<)qz!}^yx&* zRWymJkV+>lWf}=V8q7j^32|y@1SAq^Bt++kE>WUw4M`I4`hfZRDsFLnv5+nI#H|Ov;wh*FZpJb=f#tK8#e1e#im!WZyqMu-{7uZ2f-r1bF4;~P zXD>^U5qX;kXPP5J6wmoON)mf~$UQZUOv78ZFV>6PF^H0~in|7<&T; zPy~TW9yAF>G}t5LPxOInPTEzl=xK$Fv8PKyZa5^tkz)nZ)CNYE+_7Hk`NJp3Ze`B6BK-pKRVJfuWc7mDs1-T>J^AP~8D zXU7lH*sw{i5e}?R4Ifickld}b$69WO(#9WwCTw|_WNDCpLr$59r-66+pJSS0Fb@k@ zi>NYbx|ldgQs&o}qnQwKMyyHF6vFOE9!FylmGER~k3o-~GnT_wBIywqoQB~55oC}W zeL^#%4T#_|5JI=~PZD~l%~bjc%s{u=?`n_oYx;<2&m(-8YSxhCNV+1!e8^6udV|9|Ye{TV z6EuJ@Z*6vECuTydiXbxANzo+dm3KaC$r2^R5Dc6?Te^lEGmsbaZV6DM6uhw(I33c2 zYSb_oBT*aJ=EGuLs(;y;4dt)}>9a=aGe8jWo=y&Zei>5nX-EeE2oGTIlEew}McNyQ z3UvEModQ#xup7`=l2A}1KwK>2tPo|m4e#lT zfZhyEf%Qyr205<>@H#nz>NT9oZ(08XY5qi}koZKnG!FHk(K3aTTu5l5xCz7I`-Jb# z+dnb>ikwqNv4i|G(nk0n?|=#hS_$C!P>9zuj_dobLALr}swYs#K0}z}p?qN06s8>c z>Bt%sqD{RS2Tjr#J=$&n$syXa7p31nfH(m@@IOogdsf{8o}=CYaX>Mdan$w=PT46y zhy9=lA_n{p6w^`!q#TWw1^@*&xAqcE(6;uXR&PHq7Ig(TikT!Libp^IK$m!7@&dKv z5gVlSQh5jeoVM0A5E-L6`7-T74TRYrh9u2$?0TYWX8A* z2}=ZyFx?32c4GbYJ2pfg0cEC#F1FEO0nxr1gki)V#XgX(xGrdNOxqG60omBVFA2>b zThP9r%;W%(HYCuAke@g$rB(2j@nCK7j%PI>HzZ&Pv(x!YGUQ;;gdJF#QYLfB4=y&O zx$Gl3(J??mf)%O1R6N}ovLjgzYNHd8WkPu41Ut!UK6x>mc3%e@I94ZO4bwS<93672 z>7>EHr|%(=6L*HIh5v8U2WraIb*KVJjqPEZqF5=+Mn>(&o0_!U0ZsgX*ItJ_tTzlq z4_8Y+Te4nY2s*!UfFSGu`4AqRvzd-L1bVae%3D^x{s0OBC36=*Vz{HuZ&{hFCvu=6W*U>@Z43?Ambf`2$}wY}upAkFhf}Rr#Y=2Y`C8_HNkf}HWFBqy zv7WH{ak&VL-J@yArG@6bsza&U`|FWPNL?D)C`4=FJ>s~mXPnS>Hed;K8GtBHUyp#c zIfSquF-+_U@IN~HQY}XJGqNK-atJPvt=Y6+1yB_n=OOnC?2R?wn(k%k$ z2EBp>kJ&@!Y(d`aHGmk7!ndstj>8}$BE06$DB&CoMI4r@JX{@8l(FmIzJDg)GbkHV zRgj+Z0h7WF0jMDYa7}_Xlngzj=p}_c+7(vJQziXP!GNe(z;JbH!m>5pcVHp-rgim9s7h_wA*dU_WpAZ5>2#2Xv zObjHICv+QrC^$IwhD1d= z4cSm45mP^$y0Tf;7(ASq_5JiY15|eyFg4@@`foCbL!JJnm1(FRI#1${akEU`b-p1N zjm1rVB{*jv&o)J#pBE7PYnDJw<*ywd!$DjVDJ9@>Ln;n&C4ge27HD(0CbH5j(MQUh zxhU6$p2KoLNF!Qs>@9IX$U4oBSexBk&R&$+(#-jCViyUG$X5aZj6{aIc^K0Tkg--@ z|I_y)$2eN}w0=+L)|g;Ue$ar-p+2D@9Z_1bph=PXgsJIS?W`Mnv*o`_XLT}S^+ZCH z#Ds4!LKZ*)(`t^y4@Xqxze^8AeF;8Hdo=YdfG>dyLPaDLlXFC<8y%DXF5xWVrbNVO z1F;)AF~{<~Di z(7hGgfOJ!?%#b`?<_S`x5(naMq`e>dF6GU5sNgO{?DYyEQBoxf(*kg~(Ao55I`mzR zg4#&@c@r4gdjzqg48K-5q#NGvHzcB>~OaqxYaN-a8wfWq*EB{4+lW{#SmuQJnmu}f?c zmESW>UhkNmhoNa_ee4gU4|uAj&Q2_)==_d7|3TnVCIyg&z_HN6JunmoFR=)^XxbHm zGGCMuj>7uKUeEX_fG(3X@L%Zb@kp<&Py$zNiZSWDpVsgG$@}J~@Bi%IdH1Ju8-e@@ zc3c@or#A<2BC;Al9Pp92dVBevy!bz~R{wY3{pmG5L-5<6!aIxJ_2EJ0oL5DQKTIZO zvOyAW+&bcq&O+pi5YXcM$&(@~0E$kKj-I?MPsP}Ge|GWiPeD6OFd@`Q&=dkefRbQ| zLxY1#w*{NT-+cEEr*5MhzQ0&sY%Yq66@OOzxxRRRF}v7aJo2+o7h`@h;O9^Lbi_|K z{Jwwja?$I2tH|s@%{^rlb~WXD1-tHZD!!-h`1QN! zhbPSVR=g+A^M&ub*NN}+zvZ8{yWdZo)3K*KhWGabdKaGVinkiL`tNe9OHVJXTJkBW z&3%0REj-or#geD2T=ie&R-N#>F`rq4Cx3mtS@@Kz&0X(Tx%GStS6TAUvHdlleSdLL z{(pavTWtduRh*7=Esga8ZAV@yI0GEVWA3dd;hAgp=r$dpWB$GORk^6+ahMzV`&jb~rBKvwO5!Q+ zto)WwzD`ByZzFF@Px4K<%$?KU@h;w?|9jzFtBb$pDN)Zxz8)jt)sN}QZTTQ~NE@EH zHzQa3jl7gi*EvOotJ`-PiBF(=L#Xr#vG$n}3_TPe1jUb)yEa0%f|p<2u<>mF9y^ z>F3sd3j5F|Qxfg(eaAPR#e}nn_M7z5Jv~l8%U5{{+p?Zq;*-7k?y2R!)uvvan5E9A zix0flaVuEMYaMPwxe#tRt7-oJ;`ZX#?DK_FS8wm1Q+r?0c6_x-vr;)y*5~@!_g0UV zrE*6;_DmzaXbqoEF@C$?pAqk@U*j7;^2B5BauePqQoWvrmZm&8nHhUZHrE;N6M{`yN!(%_#!K9&hcvG+-Qw`jf2NLS8r9>G=j2@(Te-mMp8aWxt#DS zccVi-Qy>?Wx>4VESI$e_#valViyoZ5P+Lav%&hMn<$%b<6$rqG6W%4-UhQW|b;{~P zPdQfy?^Bcf;F+tBc*RlW&OvWg>3D_he|_=&(RHPPh&Hie7VjzHN2RWI(P!4v&X&^Dw{qe^ zySks--%mjezN2!29cOKVuX#UOc1la%AZms7NwekwOE3C1%6{!UEyWH0xJLKxauoc8 zox|WR?cdlRq&6!vu%*2@7cfFT{|LrQ_s+_xKH#{SSL#t zN>J}F+LotSEm|j9DFHdj(#0vLMEBOZm=pWWN+Rh(J*`&Q$5Fbg?ruvhx`0CUFM=-n z^BhHZ8e+KO563-R_LzPD^Urj^6Qk#&4y{qO?Ai^@D*NR=?d#(jH)3!lcUG_6&%gaM ztFE)_xj(g4`^GL-IIx^sIn;P&Ac@F!t?Z9l^SB-Y79^GIkSFx z-^cZ#Jfn`4dmb~Zd7@1WNM9_*R(SWU-50%h??OIT+Gv01C7wd-Im<(7EixA@vft-u zf6VSZ7dhlQ>~9~_$*f=Tl9a{A>J60y>+xmBPnSQra+(gs55u4pz zuxeJydYeX3Jp1TDA4hMbNk89;1!ZNJl-Kwb3pAAH9^dsCor@!R-r*jzr!2Q<73+=4 zJvjul%RS09DJ%F)*&VCL^=`FJ^+=9$WJBXEzctJ0e-U`+x5%<+fBBBb&cXZf9Js%J zj+#fTq3+X0mEZmEQxLcuh4YMTG)r4W4)s)y@7MikDd#P*)2+QHY^kmd@|9XC`}_kutevlv z=-x_~bM<=SCtG~>Irmn7&S&S~E9#OiQr1va$!{9Ht3_J!COaEauJaD$D(xU|NI9tw z5wXiWr-%&tjTcU&`$oIf+waERWbp}Yhj{Wg$e{+6S1NtlTf4ntM8w?x?wxo_Ha9>U ztC2==m5A-N^-7lp8XT(8wHbQL-nTarPsn_b?g@3@Vs~PZ%6W$@V*OiaFGj6<7k|eS zv~v7Y?ICS?gYEZeKZ$j-yKN-K=^m5VU5wO)$VL`X_{3gE{1dreN!i_-(!hwd_b4jr z8?eVLqB0CrnL~v0@}m9bE&9lw?V5A!LC@|}-8kb+r3R^_$L`|a)KSqt$xuR8r)bHT zE3;1puBklH#?Z%2&)}l`zp@z;F{U6UVJsrz>1~X3C#RGReoFcX-wRp zfWp*}-l%k-eDnEHjvuz4eM@7U$^iM!Jd1eZT{>?20{h?NEVFh}$s4HWmHFMBcj?zv zwO`E%c;*CHGpo0^;XJgMwHdXccR%^sz7O$T)Ye*Cp5&Bs^YoOt$I(pRq0yhLpT#G{ zUc~rg>{-+;X25CbM*8&@ykmWRR>`7LzvUC&=U?#|(V@}BulVo%Gj+xI`!21rayB1D z*{mPv4x$~tziRvb)3@GnV`??m7UUPK!jjBKJuLOX%gW z_bAh_~5B21Z`(o@{rI5l4011_6s_8PTX$)Gn)! zf6ac*$+-~e+WG!1#3Z}^&p4B)*&2N3?^q$9x2Q%odSUKchOe`-*PEY&a~F@;oM3Be z&%7dBzt7#|zrOfO_89fkzAnn^LZfUk))}+CB4z^}_H$2A`x^h+gg8T6p6{~Ly7zoA zTP>?We#2?T2>dSsWgerVxNjp3d8>7d{L!z9G5R0*TzlW$-Kt;Y3FXp^@3C&y|8>@v5cKc!w+JkRlgXS%`v0eT&oNRu zBDX=Uc?ve-{^PkuY1>G3-e8`4XMF*!4)tS<9=p?rO!U5;g}0v#)3*K(otSqp=Sj!T zD`vn&L{?ioVhbUQJxd$POMQAzsmW&j>x+NA_nc@m7lEH664CZ*4()ppN8J@Iue&*g|k&(C*myg{CqMN;&j)DS-PZ}^)!*<7(>wB!4VK*ja-L}P|Y zV^x>;IZjaPice|HddqT=vV-06OzEA!^>g2hT1Ou!;-MdSdfe@?oqD2?lcJXzo{>dP z!FwN$YI1@|oS5A-!f@BSY35 zXmfPWBywwmLCZ0EWa{L7eRfg)KUuUwE8-Jt>#u9Gi}XZnMSEUkB6?O*g{QZVk#u9| zA~EhcdWWLZZ4N&~vvR$8%HGry--(o@PVvpe5xVc+Uf1VFB%_Hl)_Ix-IK+33Ho4M3 zOWu<^1w9aFa_xw(c!J7MZAacMD^D7fZC`p@JESdjFcb5C$nlN1tJzC2kF709 zqH6I2>xzv>^hqA^WZSgae$t^;BOV*=KIP9T_`EVlU41w|sIi5tpOE8^okG;t-bLJX zyp?>;qr238au4PazUSSw!?c{$_G;AjS@7;zy%Mo&DOI#Pu6l}0ioScaY*@RWqlZS@ zeq!a@qwk;dGo;>V?edJQ?)r8q9`kJ?=j+|^q^vKd>@c?aGtT<&Ir&`ur5bC-$?wr! zRwwvm_b=sXC1}%#54rZf_Su&vqFwTs)D`bN`a*e~pmvQ}(Z@N`d-d$q^_)jmb`Pbo&*k_K>Bz>Y+ZU*0n&QU2TM?@e_@wC{xugho19O@UU<1^VK~(C#!wG{W;2Y5m(>I zf7envi%e@d%!6*5@#$!tMK4Z2a9<;P(oOFPB|`Q128H{x^y^)zo#hlM*<5!2 z*VUO_F7edNb2h%HHF{`$sUgO{pL{HRhdKIjnmA8J{`%|{==ac5`_-18s z1V0fF<*aoqcdI{L|JaE{eEaZD_21r(?5gEOTR4ZTfB!A3H`(2+okhNmow4<$(zcdh z#P%Zs_^Qi(p0m=_Hj%1^SbFa{n|7{R{GDoyhS@{o;Iw6lq$&mMRrYYPr|cfC5jUgHBkGiE%swV}3$NH+JBm8r1` z#tgAoi_`vg_bl>K#CV!K@yJesOwHb%_;$1wtXeXU(er$gpZ)CQL-daX~X3?Bqv3hm!zw$qK^jG0o-6wTVMoS^^@eet= z{UvWFMHt1~$AXpc+A&%+hxkb()AMWcBD(t#rZ@_?EtGw6(rYx#=elVPId=3j1Di)Ry)v z$=ls(m@nMeK2p_w!(KSCn9Uqx&4GuqGA5q0Z!9%M%iBBDUg=UqS2K2>+Wh`-oFQ6e zN(S-d<8gqzbTFdlvpJ_My7%q2Qj|Zj`<=WL_%JK&zWrGdWsEq0h$L^7wF1;r)<^Ho zaNm!!&eW($w2Q(CWj#18fQTx@ctQ83yShU;7wJPCna_ZgVs`m_T5`(N7y<0AAF~@` z-qg;2W92Mo9@G4CQnaHp@;K{ldZ(VJ|F+)ulo&*#t+m!Xy93hfzt2f)pCi&LcCAGA ztSVwkSNyM8m$%PGGqotS|DvWlhTC^}Qrp`VqFsGp&siE#zD0}Uw2D8olVgUFzCu1m z^S7)R-}*24bflJj+DPp-cdR_pu5IkPD5ZEtcHiBzPNn!ia2Dz6{}A?|ZKqWgbY<2` z_-VL2@glN04vQkR#BG!2OCh={RY3bQ?c}F@=Ijd~}@uY0F z%;DUegwC^4Tk3I_F%C3_X4UNxFNs#pexBQYc1HVt+2s#8ev}{7d`bZ+OiM>A<2@el z3y7mXkFil!$nN&rDZ)2Z_Un;19G3SkBL}a7Pu#t;C`q)D_BlmtPOed7=riOk;75Kh z_3LHCdY0}p+Gna~q2;RtYou<>=c>EO{(0`im0R+$`biJr>(4l}*I%-RC%*x=i#Vk+ z!6;^Ty}aenev?B_`S!cj+Si(r!gxy7^7{6th~-MDc0pCDNy9uXi>Ir7%w&_+lyhI_ z{QT)jN8+k>rs6qS8J22x<&59a57|d9c9l`)%Oi&5H#qx;XF+H1{D)*>@fD=jI1kDX7H`=a2r6#7Tvh8XKoHf%WsB~v*6 z12#g;&~9!?pHE2{|GSI-?@5iUjVEP}!pV#4zK2GYc2ZN!imknfEIrtV!*BbIW9KO~ zM@-9gMe{;jJ-cobRgt^2#UnpT)6H*=zH9dU&bfaPlr(D!+Rb8z?(Y1|0#DWY%BTkp z^MzW%lan(djpQ zlr5fe%6VKd79S*%q?09ubc88XLsEc=?~qd8_zmY2PeiQAUXAC+8?;__9a6e>Ebo_nvJr#m3v79&w-kM=WBiwwmr`%!OaF}4 zIZw{oj@p~v^@8(K=4jt_pX$z(NR6j1reocrx9*cNZ`seCZ<9fAL;jRmsn>f?+Q-Wp zOFi?9tY$v1o*>$qQAeivPMp>OS!1^ED9F=&JFm;JUpU$H)A@eHTD+oZQm$FQ5nqoP zN^P#}uHWFn-8eyWX1qlfy|GTL!5Wmm5%q~#q>z zrXT(_%iK7u2v4*kd?URM?Hx~44ITBF`qzq%$irQE9;<{SQmK66HnWI%lLsqT$L!ju z%|5fbRHgl#(j@C-ZNG0no96EH&_sXpnHpNkYA`LE{m4U?U-Htj;g+VBdKM&L9y5}@ z)e%zq-|#o}>M7MeyAB~u_NI7q{tkS8yzOWmbfvL%;>v2Rh-jnbwsYd!aVm zKZnQ*;z|25B){@6*-5m5Pw6hX!wGy-b!4!EvRMOW3`E%}m&KT6Hz)XS+3C*vld`qr ze#@T`Kd60@EJsE8=}GIm$mRJMR1SsG-)!*hrY@SZ|8-tR$GlxNareY`ezAH%Bv=ZK z9dh%2vXrV;JMKwH^GZW)&*(QcR&qG=Y^{%6k|NnD)pjXjmjN!`b8(=f%x`&{cvdgq z;a8z@#!QEuH6=PAW$v=h+uUNO5ov5+gEnW@aP39;e`mFv?-cRt?)kU5=Md_ZW}Y?H zu$0xS_Z8)w)>}<)*|T+*W>!lt$M&HO5NR^l2?y5GE|0mce(LLYrDqU*OXxJqZ*zQ& z4LiK%&tt3UJy@^iJC(eTSvpc~-9sho0Y*B|GFHNMpODuiT?>T0A3!W(HtZs-Z7#>x zPs6NHJ*H6gnw6Mxg0VJHT($ex*URmmy=Lz%dS1#Js~)T*`}*42G<7ZUmz;e0CBGN5 zm9~_8Y7X<7)h2S;vGwJF?sw$%m|xLMd^%)7Mu{G63iZ;lr*&`i1}@6^K3}&oIop2j zEJV1Y4=i6iWo|Cb%a(u5#*e%#k~rYRn*3Xyk<}ZX_qS<0<&1cZvOFO7KhM33IH*>s zpNaW-(W_|on^Mi8y=qrQOkHe3f9xetw6uNfrhHlx(`qtecuv;;QHxqj8gYpIl^Y!( zT}F#Ka9%bO%(Yx6<{lf%*qfapJrCN4FV4}*zyCK=-8?;0%C@iXBYKVxUDP} z7i~8stde_|FPh%cz6RZWi<8Y}Y#P^7u1a%SsQ%Y}q%0?Y@_g0y%y?>6`u*@)Vr8~uvY zlD<8wHchEdv;_1#jL@_HERVW#rFzZ|ZQq^tjIJ z#yHiJV)u0g=Q8&^`7P#R4xyW9=eOy!OBMNwQ&H@;f516r`CNLBQI%nk7tyCx%XRNf z#8yA3y@NyR{+3mTXdwB;%uY|kIB)xHV#SkvAN_=~D&gepet*S;u|MYqp2%QbvX}0P z?cM2fr~{RVS|%YsIm?UU&0?EQuW(|`v2~?%KV56fEI%kCe6Q$HN1rGCR{JcvJJ;$k zyUq@1t#irx$KIpaNKF^J=D)l5rB@hj8Lb0uFH46Jty4!nLWe!1^fj{j*qP*|w9jc( zH)Q=95i_5s^!J~)Jd3xeu_GVZ+>xZ1Owvth!FSJkKmOIFB6h#Z z?cSArQ#n3HURQx~)b-t`bm_fKCvmc*pNT$i8*V!KFy3;sK#rZ1y0Q7r4jttQ2c(dcq=jMcE%A%v{$)e``xO$g z4@~GQzu3F2>&cdW07T(D#^CE{bCWIcg?%(;(bWPeqQMqcihkz&&cX-C8zpP|HC`dUWxI%?hVD= zXl-aMHOR$|687x}o_Wyf*7BZXaqnkcv}Lqjp}X6Cy1dKLn09kJ$4sj8&9r$!-hCGR z)^E1woVEJ-s9tJgHPMv1Z$g%ro`VnOL^t<*+9_twE{nyfYps-XC%N?-8&XSB3TP17 zUiftEH&E9DXQkUO1N|tC^S!ip(z>aBixJnD3Fe7swRqOvdgjx5Nm7)o^E|R{wPwLX#?(=d5bezQrwA@y~;*D>uRQCybKF6N$_3!5O=U=dT ze1pH`Df_gg&*_cJ$IY9@i28t^#c$;855Hl~v>rn2YwIe;FOI!O+Q-oMZ%}W}?EVx! z6|azHC+ z&8Kzv$bY!|aWP)?=l#p^;@y9}`ytQzc)8vbn`$wvwyVXmD(0K2e7r0dvv+^A``l=D zSr*IjrkJvq@XP;X_si$!=Sw!a2tWVN+dm&v>+xv5epzp-*}7h}WQUu@YW;p$Etb>j zeYsdwFTLktHF)>Wci*0jH<#;qu`C~pP59zJ+x^ZbJ}#EaY88HyynM+jktMtY0hn zLVccGfv1>k+m$azkBjvtTuySnWpUYG72CPrsOG)0NT2gql#_D0?T6)(FMZmsH-iPo zG#^jmrF0H|GG1}+^ZBBhPU8puqup!ut53zOSW6K9{Qc{d6r*Zhj;r+x*4Sg*(ZX*FCd2Ju+`c=v4|KUmC*74*qhFSnC)?V9c*A(j=iH%(t^ zvKS1D{%Snwp02Ad<|TZ$7`=pFCiFBIk7S1B`lWnagb#3x39~K7i_L0yxtzZHFLq~J zlY97GZ&+~{<(HSqyZ5^{nJvDIr_*9kJylb9aRs%EH;>%>7)B{xMythkK48gLS>Yz1 zs`+NSDth&vE(g`S|91D#*9+}@%%AhMlu7!$$mIZ{8qe2o-8Q`RAMPGDE@rc0vw0jt zHBxqm+PL+nYQ_N%*mL*0ZnRiWt1m@7=;SQJW5?xUzF8r-_@Wp1AM74GfMr*bX~JUL zx%XHum*F`bT3Edl^XIW!3BUa>cT0`uPt|$@hi$mmaywNFxpK0bKupzi{8X(L3(ivU z)%`t^dV`FC`+uBVfNRPnA#@q{JAA$|CA zSj0_s#^D!Q22UW&DWR1)w|@a{MvA}s2-=|@(}_VuBx$AkkI2`+E=zz^OPe8 z1!Oj!5Be2+>sFJk3>J&!V(QzaKdn~fp!ys>o5-Po96g7JHfXBuFJZ26Aw6xU8{RCC z&8xJjIU;_hSAQto;$yMgjLR7$Rq%>zKN0nxw$pL7*;JS7$9D+@Ob|cCy3biHHseUB ziOin#!o#C9{1-bmsdqBrgnN(GV7*zf)8uiBtZK@cTTnul$;^eC+B@)V= zSD#g4lk^DJDA=MbFRS&tf4U>g$$a^Ixmu^nVpdg~AeqW=YRO(^#e81~0AI zZlPREVQznyJYbDtzZ|bqvUwVF@v?K!hRekYnw|2kgqYWG^a=^6JPMj3*@aZMSoL|q z;q2YNzk8MCcGF?jX*C~lNXSF4KUp3=na`2;)1trDv`Np2m)xS*=AVkLyqkH}(`r_H z`LZpM7URvkL`b=<>Ed}-t>fJ%YGhE%$JG>hJuO$oFd7vdHi9wN6^p{5>?^L2h@B_+ zZ!-##gFkwA%vF2<*Z8IaJ0pglGdwoF{sL7 zwhU4txyr|CHuZ#)H}j=m7HD3$e^v8f@_c_?LBQes6MMv;bHPd^7wr7zWxTGYQP+1Q zJ<4GBvKI(&Qp^W4=;;Mv7@pa=pV?wlRl~TQGGqx?g#&`lI3tdWh5QtTr0Yq5gOVonK9>$pT7RE5rYAPee7pO%I}9ptKiQ zP*J7q+Z;%pNwMP3-UNy&(#;GOPt~RvPm5ZaCR$@%jfdkvejQ^k_#lfR2QsUQ!Qwd{ zN+O%N;mzXnO*qEn$Lm>vc#g(Fa`BL0`Dr|##AOnN>DeMz*UO@;g7EcP{&;sJug1;m zCsM8mh6T33s9Jp<7t!YL(DH<W}oo zXVPn$6{{H}6byNESx5Gu=BJxS&1USd@t)KVB4$!x;uhmn1C18Nbfg}{S`5dKuG`pa zlU21ry{b9FOC=0FMqrfCz#2x9h~g!Dw>xCce5vGIzxSg(Kihl#aQZNB>r?SmtjpDS zxmjbMh+#dL^zEwO;+H5Dd{VDHSv+u7xYj|2<2zMzE3hZus7SnRHy z{MfVI&KH`h=^>8B=;C3uenF8h*h|+oY?x_Q{8}>gQTP}A#decQEk83~JQX}Eup+>~yM#yPn_MZ!}!XI#-bNC)Ae z)QIziht+C;I z2!c4@e+4w|a=QXmx|~;=^h>}#`ecy?60-dM>gpBnN`AavtV`9x<#?Vt=mA^n&AA+e zVD))91-e=RimWPBaMh^LMB-Ed$dlg|lWp_+M20BtW^=q7{fO>;U^H(x!8n$elKb$o zCdD{%ubf36>291N# z!gVH!bW!45^srdAOL3j#?Roy?o~%y9Dlf1`n5?UJzx!#qQV4Fl?!Lfyvxe007`ce_ zTs%(X4!Fg1ft%!EC-(MiyJzFZ^Pi4CN1YwMk@A?t(CCGPs20e&%WZL44YsLsJ}if2 z1Y44$3;d{no2(Wu&=}jEr*dF}`ojl8m919%RST|mJQ4?VR1F6BpX2mpr{i_;64+xp z9!8fn+2U#&;WwpDcQ=ZDD5u<1k&64J~Cy@YQ$3*5R{ zJa+bw3Mh1De^ylSsmXVIDzF(!sV0KN(0H|f;d$)9)h1QAivrP7U1|lV)HZ`!aBybR z)Z1QT@#2wa;3SOg`&D{+(I!kx6*u*%n3rG1U&a%3dPhFZpfF5bP#erQfA^>DQ$&jN z7xOeW&|Sd?AdITXs%FSUW)8U1K9KfhA3rlCZ4A53rT|C)qO4Kmk_*_*#{tZH+zukzml)6MZGSVZdfTz;=9Qn454@Tom+)x0;D|kr zNQ~nm< zHLSK3Y?abOH6yYUzML@aaQUO3m1 zeOqKwJ&othXZB3u7yQ9Z^%>N7K8SCYEbW#sxR#5prfq_uK4ZdEh+1So^6@$l0oLJ3 zB)?$iz-*0;kdTPD2(J5}zxeD|5^Fq!?;>;wiS`Kt#js!Uk+3^|f%HbMA^oH9PMCnx zQ5*BH z73Lst1AOL6$3ZlgqtPTyC0R9ooa=Ug|EwmP%h@`$_I)tMz`Fl}7UNE$%<1}pA-Xiz z^oEF1H3!@cHWbBQE|6LOK8>hMw>}8?Z7|+BQmIV*Q6o8EqW|4aals}tP8z8rI1C^K z(26BjtT~vTy0^m^#r5^eGp?{9mUVrni50SWK^D(SwC=nPQzR$unGC842Oo|j(MEw3 z%5pl!?+Owmxx!Te=Kv89wM3g$Nbc?_hEMeBkL+DSwNb4SCXbZV0S1-@B65VBS&qMa ziTg_BHN+cS6{sq?dfjK`AgKEQ_rQQxBJ%XR3&16yaU6$4SC@pJ!kZ@_jyAo~P$?vN zZI9#?dgt-UA^R(d4&7WE1PR+bt(7O}5bin^`N0C+hu}L;1m{<6cX#O%KcVM&S+>%- zIE<4)r7D*}Qt5$)2Do3sWy1jZ`-X|^6M3$R$xB&mrvm&z`TLpVc({7(p&z#x=cu8M z@E~%$Sa^L%c)yoioEx5g9_ZtAx4TAM0iHxroG63(;J7`mx=UgODC3}~xLbEG>8aR$ zuHnxvvqS-~*%Bri&`@79-&_{CZF!MyBhx_MHd2>V|#!3C< z*G<1#(5hGrl+-jSmwhAdds-&oL)EcO-gXhlMXCHx1e~T0a@9e2Ic8d>|oOe1k2TSL#n>0D=^hvxab! z2Vs07Z%Uj~^zJ&<4NDRg;+9heW?#jZ1xZZ{vS;|cf-Vt*tc9|fkNV-8NW7O+ANf|r z`jM?ePg|h+?unQjfkPaeQVgV&eV3|b9Ei)uZF*BKNyMj`vtU>)VJ2ne+;GA3kK3+9 z_IpHICj7Q-wuYF*Gpek6g3oGXs159=1-LxEK)2WfM4p0olpcpqK?z~Ujpi?0D7q>U zSdW;Dz-E)nVgP*uHIvJgTum`0tX{p0zdTkdxkTENQ)4J;0hbje$vZ7))@S0mPp6Te zyUKblE5Af5v?k$%Oa{<(U*hS2ZK#&=Wxah(d`M2&=b6nEG=#o>LJk3ldtL@XvY$fI zACE`|1GlI%deZAAz#C+k3;tI-+az8axLq}kGGtAh4QRsTgU+6+r{1_ft`&H~ADEvZ zJcRN{j?{Y?5>H2`h{YmkI#fTYM&|8Awl_YTyr#RF;d{Vg=zlPWR;1hCVn^YZ;CV#O z>_8#~rp$U>i<)#(9nD25;26rs%K##eIViCgy!6gI51n)ZVPOY z9NhY`8it^ZY$I=XPJw{a&eK=KB=pKo4eT|>QSuvXW{nzLg1}UXGz)@uQhgbtP02_Q z+H2p-gsbj@@mJHQeT?7SG92`{Y9ev_Q1Jjo(>TGc%#qK-E%{(o@714hMfp7WPRRJGMkDav zJw5h`3mQU*;+0QbyM`1@1mG4qq1U+?cM!IMpw?)$C6je73ZD3GG95pJWs)Dx9-pTL zqH`|`0%1BJLn1@eBJyc=HCiv9ICngxEe2P9eZOUW31OkJm-b zO)Gv3zex_~%lb7^lxzaRSXYb3X(L5b_JWoJw!6d#PVXOL=@li$<1EU-WH}#Sj9$># zB>r#>iOAwqXXtxupT}zR1^XgwFcHi^kqA0iJUKlK6jZjKR3)aT?vrX5XN+0r!;&M4 z?n20wipFghVCK3pxsabPBpa+BCy~<=qm-lx2r>$zM1aM|;#{+*R1dCo*9X0r$R6G- ziOKq<(GxgwjN9^T^ji2(@~Y;qL^2BDr;hyr01c3gk%;p5n`*-3uF7JA|580XgjJK6 zM1jYI(K6XFR18rXf$D7vQl?Y48g@tcKb5IPv3@~)gKKy*2{~cd5P>fIX>w|0b)k&R zi){sL#e6ZZfq_E4Y}jN%HH3G^147;l@ku0Faw;qsFr($;VzX%3*-B_gqy2n*kIl;} z@>9nk5TC`succsec3^$@KpGh?mI$O79ER@waD$NBk_$;@dX$m>P1~?SdqYeEa_wh? zJEpxc>7i&JNwPzBNL0ilznL&Qir|lDOP9o$urKsh&^&BxQK*eWZck z_ZHuUPo&qnG`)t`7?Y-j1VIF^Bljo5YBKI`C+dXFY73p$2H1DIdj}d?k$nlb)Jv>U zUcjL7ZaN$NgmL)1n3C?K0#2y=(-P4oC?3u}Rir}#h)Yp@sGdg&4S4DatD%L-PK&N! zqJe{~0Zb#hMxxFXSslKZJk(F1CAZuqiHU6I73`>!oXL?u4s25S;&({xc|zyIBOS*A z^hxHOJr|?JoO~S+?C{JE31E#Af-ZYnzQ- zeA&K$*u$FG@1&K52X~Ht4PZoaJPwA(pJ)l+ikI#Aw&9D(Ib!G!7TXa5qh)O*To=v+ zX_wUz<7!Cwi?>YP2P4k(VMNqp2zf+HF%dZP$KK=1fI1(d-d|p@3u@ihbwn)eNqxiQ za$#lgZ;vt*CM0J}tZ7Ny)%#0cGvr7?4keK{455-jEmceM2`UGS5~96~4}DsYiY+B3 z&-5T3r=?c5u21LMXNbZcqGMt$1#nS9Jot=T%8xJy$mk;iH=chH*9q5@?0}lAJ`3Y3 zkJE)Z&k1h=&;dNcW$q=XP?unh9M}m5(4hgCydnr11y@Hh^{1G2s8_@u=tg>-zV_r9 z)D@fbrI`Kyw7p4_BwKdhSCF)jfo2jlP#_5cpo$=#K(uGYoDr0n3_XAiGynm@g8(Bp z-9E*TF?hW2h|G#KnM?~Uw9p68N@mih)Kb6yJsugyJ#JQJz1Kja->WVUzrz{-XSmnt zgpJt61wMl|;}Xkxqlhe~E~xwH8C-44{@Up~9K=yvaxU(HW=v@gvMzZC z7QrWT8n+%-klJHc0u3+~J#$wq=OmH@|7uf_5COj41bC2!K#h37iK$v$VFJ)vp-9-W zi^Az94JAJJ!sZ0fQlm-svK_~^upR2aqzDLynnO8med%Xf$4*NOZqqF6Mz(jU^MUA^ z17aN@i|tb*RegdJTB@v#V~_@*X=1BJ4ZvyGj3YHDfN4R(;lUqX{jmZ5#KK1UF{u~I zjJ&j5I0@4fcy930fy0sXvYH)st~Kl;Kf>&_7XXf_@RABl5i^I10|++MFHO!ndkT-U zL#Z0IatFV6^|~)520gx<();KNi&_p%(VOga0HmG4q!5whMSy9dpEC{|S47=*Sbq}) zr*8Yh@yWK@8T(jm`F~Ng-2HNqA)Dl~@isgxpUU9*1o%(RngoGN*i6sZB)Sik! zB}h<^9rrZIoI0!*0S<>fI2q$44K32ACu}?Cp-nv;&17!^ zjK!UJESx?8eu0WQc-;DpBM&CL-nO4Qs?&@|rxv|(q*U*YOD`|lZz#K5qdrNiW3oxM z;7r($+pwM>@1>3lbJU_a3*fAfe!!WfGZ6R2L#RMNb?dM_lqzp^$Ih!7C{qEuy@hal zQr4c-av{qp@8S%Q^>C2u3~kPieOeDQ(q*%u4M%Tv3<|x@w6M2Y{WT8<&geA+JG4kA zDGhDuBw&=3YMiI*o6&qh*w;raA~r-0FUSyKr^A$CT~@rvs&hfciDRi`{QUATYWNkH z(1u3fX-Umvd8*BrIHAxX6i^X<8dG#rawT^KX6M}JIvmStRn)Yg$MhL9NJ-yO_F1-} zI4tZCs1p*xMh?|gXDb1G>;&JGF;|?2z~a#fO(TV_A!yXYDe>`XSBKJ+mpkY?M z44JvzX^qx{IF;s0YCBJ9ol*4^K|2WLJ6?zUN^^sNlPS4pe`>HZ-uC=dmM9C7CE0N= zV(a%{ua^V<&QmL81Zc)g0#E5z4OXg~cQSs1CGohh%f@%J*ZA`twHCkOn6Vft=i%K{_Gqsbv^g_2ZpRjaIGWUi@{zNz(G} z%(*MxlSIqgIlx0FAdPHvBodV*<9CNCURJ~)fjS*q&Dqlf4FzV5op`G)0AHW4mzJ@1 zk2c4r{*1V@raKh@@v5t6WJrxqJ>Fo6jvanhK`bQnByo;S1oi9Y)UJ~qEnG>9O@Rej z=q$6rBZaX@fqX@ibuSDE<$+T)@E^w!le91$K?+wGau1vxh< zs9PLo|Dpb|+P@4F=638;9|;Ga)ioSFhbb&bqY+uX<6~1NcFd){!g8+8D2OFULMY%k zd8AyCWL(ZdNG4qk>u@81a{{#Srrbg~Tsk+oc-lIPrpaESULA7^C)=%3-iZp*dHH## zLm5p#{C#T ziB1j)vcOjl5Lam^9JkKH1*YKlkr3to#7>vJWcLKFx(w?j7CtFrC8O-oB5PDZ+czM( zdFkngC|b<#TuoAwhqq@*=nnAKFQEK&$liew{9IaaUKNm-f%{RMS1K3n^ zdYce)x9_G#>7+BcxqG;&zYrKg@Jru{Q+h39&&in$swt`oKRZ)lnmZVA)U7)mC4`dB zEQ8z~V+s?}Mm~T`GI>tO7pD{5ePk?1@(Q{+V`1H>ucwAOT1dwQSa}=rzJcX#7Hy2< z0c!cnRVH=DM2}8;LhwWA50b1nTW@Dh`~5JW(=jUb9E?z_W=m?F=5Uyap8I-v>h*^K zB|G5qNbd%g8o&}XoBWh62Wf?vVZ~gfK|AVUarRQA77c-gwb>~rCmf%nOGD<+ktQWY z1457<8G%0D2h>)URZ03;6Fr5lW{>6x=KoZhCVKE&IO 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
    KJpyDtq*rl534hLWRO-& zh8!b8jl<=w4dHhHQ?0xj6(2CZLuxQdlr|zk?LI9qEU69JKzT`w(UlQnJ@9X0FV~C2 z&5ROlp^)`myZBJ?W4SWzI}Dm9*O!{wgx;V4=~1qfp|+6tWuwI8B)%VI?m-!ockW7Z z2@P=nV=kDwfI2~P6m5gxPF_Bxi!b6jU)A?9s(#f!Jw7Q$!hSkvuly)p><8l>TG^A? z-bUi>wWA(WhGpRw;$!{@ILFXE1k>5SIK z;*0psCEnjwj45szcn)?0(~D#!w05~9rBsAi8uYo+J%Fv3z~n_f3E1c5n9^>&`cQj} zB>w@Y*mca87%8DKsoQ;dAOGhirV_IDb-0m+Sz1kMZPv}p+pqVY8;5&ng{+kJgPmnU zRW!0z)lKy`{_Lw?Z}2rt$pH@HHapTU4!^Vi%O*b)MM%zsIcKsOj^QD-&($`DVK}PF zFjlQGS#snp@fM(+As~fNnBQjPhF(3XuZAu9#~j|$BKwh#{F$uM$xnrIrJjy;1IOWI z4m)IcD|zxX#fWISdnf12?o)J7$)j^{7E81=Y93TIC3w`fBE}4uV#%avCL1DJ@|OL~ z8O8nS+hASpebij~XkNbv@xpX;4X^jpJ>7v-BpNE?e9-!k1$dVX8 zYSS|%EFdN%3+jD|bToqI$c>hW7T#m6cT8+ocel)WrdO;85X^`a04}&(XgCQq*p?2? zTn+PZ2spN;m5xOpai0mYP{)|6%wWq9qzzEf_+&;K+8>wWz(?NQ``hPQSVkY&9Z9b4 zbcdIutgD!72y09&V+x43OmT2S#yBH+Q zJ>b@@UOl}$A#8utKh@)qGz(^I;fGq*Up8-E|DsDLmlf5u%1aT(@hOIBa#uC=kE5H01qmjx zH$Hbhriv8;*_x1(L3a4+yU5Yb36L@T(vul*#D`keum1GcZ+`J7SCh-)Q;86xBg$se zI76&Kd43pQna1Mns0QYb&dn)7lo7Kr^Ay?EAlc!zn-PmW!URXn{t1_L{l|ay%lg}I zCznNm2tNUKYHMTrYBngEeZO8tC?BAfq?R?#m=}^SI&!X(JLO3UsXm`sgPUkdG?ZuL z6AL3}vXV62R9^+FK_WOP*iICg{^@n_UZU_uc?j0aw~+=Ll}E6bOs+U&6h^NYorS;~ zO0Jq-0!cl^Sq}0Rcy}8as*L>LIG+$vEqi2Eck$lC>_ z8{Noh#et>qDU2l5zvI*UxCLr%fGr zs6dD?ca?G4q+DP4$(bF**8wjH#7&+``!-fYtOsKZDUlS|cddlaVq!5j^w4!O)&6`| zyq;FTG1iJ!l}Mj%F1a-)^Sr~3>xE(jPHh-ZXJRTiT< zh9;fy-bCo1(;hz)vrS*eOLTaF;SAPd%7h;b!h~?OGP7b}Zk|>QLG~^)+i?_zS+R)O zOrp(QW?==p`;1QYbj)V-%Cu_hHNyYk--HrFU?C5d6as)A73e!B`P=PxC!D< z3|Avj2Y~4Lph)ayBv_v+W=miqX3L8wV|F1a#=^z$pxKmFb#hAO3h^e0#xV9Wx;Okn zPkW7BfOSvms>5S)BGR&MiL${6Se|-wyn;W~eO^z$Qc&R-*+4_zu={{iu>8e>(!^lc zLSEB?;iyB$`>dX$yjBqqAxwahNa=3vWqg{l@@rcEF|J=a^O`uw*kUvN2BK(4UZrMh?+q| z{bVbiHnQtw6=6V#U@QT_ob5FDv}!iT$Unk+<^$S6AOb}O0HYpdqdG*W$WAi+L)Jw)2u0{a z2F+ar=ioEC$J4RedYcLxT zs<<0te))g$s2ECL?PlPOpDGi(rIkO3xsoP_-GIjjGoyd|GU^ct}=Zz>ds*R zUO(1SfJy>jRhE$jJ~eY{HT$WBOtsLJsb@fvpDcn+8y<#q#jH0nUSsV9Cl78ojlz3) z-_m-3(o?MZamDDWcY#2LOpk+$qUqgN`O&Ng%0Aey9{_oD^Y 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

    H@tlUI7+td>e3H_QSv!H)~s2#+&9PMj^wNM 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

    vnD(4$FN2@%Z9uppJ4K#1T^34ybSb!h=(0# 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

    r?OMsB$T$3A%wqN7k=?HmB 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�kt)=8ZdGjF5L( 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�m&%MB6OGj1nqdR2@ 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 bed_AHzjWWFTixq@IUeo%@BO-;zU}`2?3;Vh literal 0 HcmV?d00001 diff --git a/www/src/components/package-readme.js b/www/src/components/package-readme.js index 569d2fd420b79..34a984ea6b255 100644 --- a/www/src/components/package-readme.js +++ b/www/src/components/package-readme.js @@ -10,10 +10,51 @@ import MarkdownPageFooter from "./markdown-page-footer" import FooterLinks from "./shared/footer-links" import { GoMarkGithub as GithubIcon } from "react-icons/go" import GatsbyIcon from "./gatsby-monogram" +import { FaUsers as CommunityIcon } from "react-icons/fa" + +const GatsbyPluginBadge = ({ isOfficial }) => { + const Icon = isOfficial ? GatsbyIcon : CommunityIcon + const title = isOfficial + ? "Official Gatsby Plugin" + : "Community Gatsby Plugin" + const text = isOfficial ? `Official Plugin` : `Community Plugin` + + return ( +
    + + + + {text} +
    + ) +} const PackageReadMe = props => { const { page, packageName, excerpt, html, githubUrl, timeToRead } = props const metaExcerpt = excerpt || `Plugin information for ${packageName}` + const isOfficial = + githubUrl.indexOf(`https://github.com/gatsbyjs/gatsby`) === 0 && + packageName[0] !== `@` return ( @@ -45,35 +86,7 @@ const PackageReadMe = props => { justifyContent: `space-between`, }} > - {githubUrl.indexOf(`https://github.com/gatsbyjs/gatsby`) === 0 && - packageName[0] !== `@` && ( -
    - - - - Official Plugin -
    - )} +
    { }} > {hit.repository && - hit.name[0] !== `@` && - hit.repository.url.indexOf(`https://github.com/gatsbyjs/gatsby`) === - 0 && ( - - - - )} + hit.name[0] !== `@` && + hit.repository.url.indexOf(`https://github.com/gatsbyjs/gatsby`) === + 0 ? ( + + + + ) : ( + + + + )} Date: Tue, 7 Apr 2020 19:28:59 -0700 Subject: [PATCH 046/128] add todo --- packages/gatsby/src/recipes/todo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 67cbde917be5e..ea2445a7c6da8 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -41,3 +41,4 @@ - [ ] validate resource config - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Select input supported recipes +- [ ] Refactor resource state to use Redux & record runs in local db From b11808b307627540fdcb704b12f1b842cd04c409 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 8 Apr 2020 21:34:08 -0700 Subject: [PATCH 047/128] feat(recipes): Show recap of operations & show diff for changes to files (#22953) * feat(recipes): Show recap of completed operations & diff of proposed changes to files * Use better diff algorithm + diff by line not word as that's more normal --- packages/gatsby/package.json | 1 + .../__snapshots__/create-types.test.js.snap | 13 ++ .../__snapshots__/recipe-machine.test.js.snap | 25 ++- packages/gatsby/src/recipes/apply-plan.js | 16 +- packages/gatsby/src/recipes/cli.js | 164 +++++++--------- packages/gatsby/src/recipes/create-plan.js | 34 ++-- packages/gatsby/src/recipes/create-types.js | 5 +- packages/gatsby/src/recipes/eslint.mdx | 10 +- .../fs/__snapshots__/file.test.js.snap | 11 +- .../gatsby/src/recipes/providers/fs/file.js | 41 ++-- .../gatsby/__snapshots__/plugin.test.js.snap | 135 ++++++------- .../src/recipes/providers/gatsby/plugin.js | 15 +- .../npm/__snapshots__/package.test.js.snap | 44 +++++ .../npm/__snapshots__/script.test.js.snap | 12 +- .../src/recipes/providers/npm/package-json.js | 20 +- .../src/recipes/providers/npm/package.js | 180 ++++++++++++------ .../src/recipes/providers/npm/package.test.js | 28 ++- .../src/recipes/providers/npm/script.js | 20 +- .../src/recipes/providers/resource-schema.js | 3 +- .../recipes/providers/resource-test-helper.js | 2 +- packages/gatsby/src/recipes/recipe-machine.js | 24 ++- .../gatsby/src/recipes/recipe-machine.test.js | 28 +++ 22 files changed, 510 insertions(+), 321 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 268ee98574470..405deead7ad8c 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -86,6 +86,7 @@ "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", "gatsby-telemetry": "^1.2.3", + "git-diff": "^2.0.6", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap index df79f2636a313..2e8fe5ee3f6e9 100644 --- a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -6,6 +6,10 @@ Object { "resolve": [Function], "type": "GatsbyPluginConnection", }, + "allNPMPackageJson": Object { + "resolve": [Function], + "type": "NPMPackageJsonConnection", + }, "allNPMScript": Object { "resolve": [Function], "type": "NPMScriptConnection", @@ -28,6 +32,15 @@ Object { "resolve": [Function], "type": "GatsbyPlugin", }, + "npmPackage": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "NPMPackage", + }, "npmPackageJson": Object { "args": Object { "id": Object { diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 104a1adb3d54f..1ff528fb51687 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -3,10 +3,10 @@ exports[`should create plan for File resources 1`] = ` Array [ Object { - "currentState": undefined, + "currentState": "#yo", "describe": "Write ./hi.md", "newState": "#yo", - "resource": Array [ + "resourceDefinitions": Array [ Object { "content": "#yo", "path": "./hi.md", @@ -16,3 +16,24 @@ Array [ }, ] `; + +exports[`should store created/changed/deleted resources on the context after applying plan 1`] = ` +Array [ + Array [ + Object { + "_message": "Wrote file ./hi.md", + "content": "#yo", + "id": "./hi.md", + "path": "./hi.md", + }, + ], + Array [ + Object { + "_message": "Wrote file ./hi2.md", + "content": "#yo", + "id": "./hi2.md", + "path": "./hi2.md", + }, + ], +] +`; diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js index 6f8d50fe9f41f..825fb738ca22c 100644 --- a/packages/gatsby/src/recipes/apply-plan.js +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -8,7 +8,8 @@ const asyncForEach = async (array, callback) => { } } -const applyPlan = async stepPlan => +const applyPlan = async stepPlan => { + let appliedResources = [] await asyncForEach(stepPlan, async resourcePlan => { const resource = resources[resourcePlan.resourceName] @@ -18,13 +19,16 @@ const applyPlan = async stepPlan => ) } - if (resource.config && resource.config.batch) { - return await resource.create(ctx, resourcePlan.resourceDefinitions) - } - - return await Promise.all( + const changedResources = await Promise.all( resourcePlan.resourceDefinitions.map(r => resource.create(ctx, r)) ) + + appliedResources = appliedResources.concat(changedResources) + + return }) + return appliedResources +} + module.exports = applyPlan diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index b809d95af2245..8c322cc3968f1 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,6 +1,7 @@ const fs = require(`fs`) const path = require(`path`) const { inspect } = require(`util`) +const lodash = require(`lodash`) const React = require(`react`) const { useState, useContext, useEffect } = require(`react`) @@ -22,19 +23,7 @@ const ws = require(`ws`) const parser = require(`./parser`) -const PlanDescribe = ({ resourceName }) => { - const { planForNextStep = [] } = usePlan() - const plans = planForNextStep.filter(p => p.resourceName === resourceName) - - return null - return ( - - {plans.map((stepPlan, i) => ( - {stepPlan.describe || `* ${resourceName}`} - ))} - - ) -} +let renderCount = 1 const Div = props => ( @@ -67,11 +56,11 @@ const components = { ul: props =>
    {props.children}
    , li: props => * {props.children}, Config: () => null, - GatsbyPlugin: () => , - NPMPackageJson: () => , + GatsbyPlugin: () => null, + NPMPackageJson: () => null, NPMPackage: () => null, - File: () => , - ShadowFile: () => , + File: () => null, + ShadowFile: () => null, NPMScript: () => null, } @@ -83,19 +72,11 @@ const isRelative = path => { return false } +var logStream = fs.createWriteStream(`recipe-client.log`, { flags: `a` }) const log = (label, textOrObj) => { - const text = - typeof textOrObj === `string` ? textOrObj : inspect(textOrObj, null, 2) - - let contents = `` - try { - contents = fs.readFileSync(`recipe-client.log`, `utf8`) - } catch (e) { - // File doesn't exist yet - } - - contents += label + `: ` + text + `\n` - fs.writeFileSync(`recipe-client.log`, contents) + logStream.write(`[${label}]:\n`) + logStream.write(require(`util`).inspect(textOrObj)) + logStream.write(`\n`) } log( @@ -180,7 +161,6 @@ module.exports = ({ recipe, projectRoot }) => { } } - let renderCount = 1 const RecipeInterpreter = ({ commands }) => { const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() @@ -208,6 +188,7 @@ module.exports = ({ recipe, projectRoot }) => { `) subscriptionClient.connectionCallback = async () => { + log(`subscriptionClient connected`) await createOperation({ commands: JSON.stringify(commands) }) } @@ -243,23 +224,38 @@ module.exports = ({ recipe, projectRoot }) => { // If we're done, exit. if (state.value === `done`) { - process.exit() + process.nextTick(() => process.exit()) } if (process.env.DEBUG) { log(`state`, state) log(`plan`, state.context.plan) + log(`stepResources`, state.context.stepResources) } const PresentStep = ({ state }) => { const isPlan = state.context.plan && state.context.plan.length > 0 const isPresetPlanState = state.value === `present plan` const isRunningStep = state.value === `applyingPlan` + const isDone = state.value === `done` + const isLastStep = + state.context.steps && + state.context.steps.length - 1 === state.context.currentStep if (isRunningStep) { return null } + if (isDone) { + return null + } + + // If there's no plan on the last step, just return. + if (!isPlan && isLastStep) { + process.nextTick(() => process.exit()) + return null + } + if (!isPlan || !isPresetPlanState) { return (
    @@ -270,14 +266,13 @@ module.exports = ({ recipe, projectRoot }) => { return (
    - {state.context.plan.map(p => { - return ( -
    - {p.resourceName}: - * {p.describe} -
    - ) - })} + {state.context.plan.map(p => ( +
    + {p.resourceName}: + * {p.describe} + {p.diff} +
    + ))}
    Do you want to run this step? Y/n
    @@ -295,72 +290,47 @@ module.exports = ({ recipe, projectRoot }) => { return (
    - {state.context.plan.map(p => { - return ( -
    - {p.resourceName}: - - {` `} - {p.describe} - -
    - ) - })} + {state.context.plan.map(p => ( +
    + {p.resourceName}: + + {` `} + {p.describe} + +
    + ))}
    ) } - // - // Finished - // Step 1 - // ✅ Wrote out file to src/pages/what-about-bob.js - // Step 2 - // - // ✅ Shadowed file src/gatsby-theme-blog/foo.js from gatsby-theme-blog - // - // return ( - - {state.context.currentStep > 0 && ( -
    - - Step {state.context.currentStep} /{` `} - {state.context.steps.length - 1} - -
    - )} - - - {stepsAsMDX[state.context.currentStep]} - - - - -
    + <> + + {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( + ✅ {r._message} + ))} + + + {state.context.currentStep > 0 && state.value !== `done` && ( +
    + + Step {state.context.currentStep} /{` `} + {state.context.steps.length - 1} + +
    + )} + + + {stepsAsMDX[state.context.currentStep]} + + + + +
    + ) } - // {operation.map((command, i) => ( - //
    - //
    - //
    - // ))} - // {state === `SUCCESS` ? ( - //
    - // - // Your recipe is served! Press enter to exit. - //
    - // ) : null} - const StateIndicator = ({ state }) => { - if (state === `complete`) { - return - } else if (state === `error`) { - return - } else { - return - } - } - const Wrapper = () => ( {` `} diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js index 518ae55b95461..dd8a53820e659 100644 --- a/packages/gatsby/src/recipes/create-plan.js +++ b/packages/gatsby/src/recipes/create-plan.js @@ -28,28 +28,18 @@ module.exports = async context => { return } - // Does the resource support batching? - if (resource && resource.config && resource.config.batch) { - const cmdPlan = await resource.plan(ctx, val) - planForNextStep.push({ - resourceName: key, - resourceDefinitions: val, - ...cmdPlan, - }) - } else { - await asyncForEach(cmds[key], async cmd => { - try { - const commandPlan = await resource.plan(ctx, cmd) - planForNextStep.push({ - resourceName: key, - resourceDefinitions: val, - ...commandPlan, - }) - } catch (e) { - console.log(e) - } - }) - } + await asyncForEach(cmds[key], async cmd => { + try { + const commandPlan = await resource.plan(ctx, cmd) + planForNextStep.push({ + resourceName: key, + resourceDefinitions: val, + ...commandPlan, + }) + } catch (e) { + console.log(e) + } + }) }) await Promise.all(commandPlans) diff --git a/packages/gatsby/src/recipes/create-types.js b/packages/gatsby/src/recipes/create-types.js index 79fefb76c45d9..17129e55ac658 100644 --- a/packages/gatsby/src/recipes/create-types.js +++ b/packages/gatsby/src/recipes/create-types.js @@ -17,15 +17,14 @@ const typeNameToHumanName = name => { module.exports = () => { const resourceTypes = Object.entries(resources).map( ([resourceName, resource]) => { - if (!resource.validate) { + if (!resource.schema) { return undefined } const types = [] const joiSchema = Joi.object().keys({ - ...resource.validate(), - ...resourceSchema, + ...resource.schema, _typeName: Joi.string(), }) diff --git a/packages/gatsby/src/recipes/eslint.mdx b/packages/gatsby/src/recipes/eslint.mdx index 60e51407acef7..db98506a76d09 100644 --- a/packages/gatsby/src/recipes/eslint.mdx +++ b/packages/gatsby/src/recipes/eslint.mdx @@ -26,19 +26,13 @@ add additional presets, plugins, and rules. Install necessary packages - + --- + content='hi'/> --- diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index d2bbd316dc2d8..02f9f9c58013f 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -2,6 +2,7 @@ exports[`file resource e2e file resource test: File create 1`] = ` Object { + "_message": "Wrote file file.txt", "content": "Hello, world!", "id": "file.txt", "path": "file.txt", @@ -12,12 +13,16 @@ exports[`file resource e2e file resource test: File create plan 1`] = ` Object { "currentState": undefined, "describe": "Write file.txt", + "diff": "@@ -0,0 +1 @@ +{+Hello, world!+} +", "newState": "Hello, world!", } `; exports[`file resource e2e file resource test: File destroy 1`] = ` Object { + "_message": "Wrote file file.txt", "content": "Hello, world!1", "id": "file.txt", "path": "file.txt", @@ -26,6 +31,7 @@ Object { exports[`file resource e2e file resource test: File update 1`] = ` Object { + "_message": "Wrote file file.txt", "content": "Hello, world!1", "id": "file.txt", "path": "file.txt", @@ -34,8 +40,11 @@ Object { exports[`file resource e2e file resource test: File update plan 1`] = ` Object { - "currentState": undefined, + "currentState": "Hello, world!", "describe": "Write file.txt", + "diff": "@@ -1 +1 @@ +Hello, [-world!-]{+world!1+} +", "newState": "Hello, world!1", } `; diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index d846be7d1fe34..99e7fdbaaccd8 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -2,6 +2,9 @@ const fs = require(`fs-extra`) const path = require(`path`) const mkdirp = require(`mkdirp`) const Joi = require(`@hapi/joi`) +const gitDiff = require(`git-diff/async`) + +const resourceSchema = require(`../resource-schema`) const makePath = (root, relativePath) => path.join(root, relativePath) @@ -41,7 +44,9 @@ const read = async (context, id) => { return undefined } - return { id, path: id, content } + const resource = { id, path: id, content } + resource._message = message(resource) + return resource } const destroy = async (context, fileResource) => { @@ -52,28 +57,34 @@ const destroy = async (context, fileResource) => { // TODO pass action to plan module.exports.plan = async (context, { id, path: filePath, content }) => { - let fullPath - if (!id) { - fullPath = path.join(context.root, filePath) - fullPath = makePath(context.root, filePath) - } else { - fullPath = makePath(context.root, id) - } - const currentResource = await read(context, fullPath) + const currentResource = await read(context, filePath) - return { + const plan = { currentState: currentResource && currentResource.content, newState: content, describe: `Write ${filePath}`, } -} -exports.validate = () => { - return { - path: Joi.string(), - content: Joi.string(), + if (plan.currentState !== plan.newState) { + const diff = await gitDiff(plan.currentState || ``, plan.newState || ``, { + color: true, + flags: `--diff-algorithm=minimal`, + }) + plan.diff = diff } + + return plan +} + +const message = resource => `Wrote file ${resource.path}` + +const schema = { + path: Joi.string(), + content: Joi.string(), + ...resourceSchema, } +exports.schema = schema +exports.validate = resource => Joi.validate(resource, schema) module.exports.exists = fileExists diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index e8efd14ac8e44..e129519def3c1 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -5,42 +5,62 @@ Array [ Object { "id": "gatsby-source-filesystem", "name": "gatsby-source-filesystem", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-transformer-sharp", "name": "gatsby-transformer-sharp", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-emotion", "name": "gatsby-plugin-emotion", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-typography", "name": "gatsby-plugin-typography", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-transformer-remark", "name": "gatsby-transformer-remark", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-sharp", "name": "gatsby-plugin-sharp", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-google-analytics", "name": "gatsby-plugin-google-analytics", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-manifest", "name": "gatsby-plugin-manifest", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-offline", "name": "gatsby-plugin-offline", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, Object { "id": "gatsby-plugin-react-helmet", "name": "gatsby-plugin-react-helmet", + "shadowableFiles": Array [], + "shadowedFiles": Array [], }, ] `; @@ -54,76 +74,59 @@ Object { exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create plan 1`] = ` Object { - "currentState": "const redish = \`#c5484d\` + "currentState": "const redish = \`#c5484d\`; module.exports = { siteMetadata: { title: \`Bricolage\`, author: \`Kyle Mathews\`, - homeCity: \`San Francisco\`, + homeCity: \`San Francisco\` }, - plugins: [ - { - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\`, - }, - }, - \`gatsby-transformer-sharp\`, - \`gatsby-plugin-emotion\`, - { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\`, - }, - }, - { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [ - { - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590, - }, - }, - { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\`, - }, - }, - \`gatsby-remark-prismjs\`, - \`gatsby-remark-copy-linked-files\`, - \`gatsby-remark-smartypants\`, - ], - }, - }, - \`gatsby-plugin-sharp\`, - { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\`, - }, - }, - { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\`, - }, - }, - \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`, - ], -} -", - "describe": "Configure gatsby-plugin-foo", + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`] +};", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", "id": "gatsby-plugin-foo", "name": "gatsby-plugin-foo", "newState": "const redish = \`#c5484d\`; @@ -244,7 +247,7 @@ module.exports = { }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] };", - "describe": "Configure gatsby-plugin-foo", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", "id": "gatsby-plugin-foo", "name": "gatsby-plugin-foo", "newState": "const redish = \`#c5484d\`; diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 8be3df2957373..3a4e38f73b8a4 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -6,6 +6,7 @@ const glob = require(`glob`) const declare = require(`@babel/helper-plugin-utils`).declare +const resourceSchema = require(`../resource-schema`) const fileExists = filePath => fs.existsSync(filePath) const listShadowableFilesForTheme = (directory, theme) => { @@ -226,13 +227,15 @@ module.exports.all = async ({ root }) => { }) } -module.exports.validate = () => { - return { - name: Joi.string(), - shadowableFiles: Joi.array().items(Joi.string()), - shadowedFiles: Joi.array().items(Joi.string()), - } +const schema = { + name: Joi.string(), + shadowableFiles: Joi.array().items(Joi.string()), + shadowedFiles: Joi.array().items(Joi.string()), + ...resourceSchema, } +module.exports.schema = schema + +exports.validate = resource => Joi.validate(resource, schema) module.exports.plan = async ({ root }, { id, name }) => { const fullName = id || name diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap new file mode 100644 index 0000000000000..6958d9ba0fffd --- /dev/null +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap @@ -0,0 +1,44 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`npm package resource e2e npm package resource test: NPMPackage create 1`] = ` +Object { + "_message": "Installed NPM package is-sorted@1.0.0", + "id": "is-sorted", + "name": "is-sorted", + "version": "1.0.0", +} +`; + +exports[`npm package resource e2e npm package resource test: NPMPackage create plan 1`] = ` +Object { + "currentState": undefined, + "describe": "Install is-sorted@1.0.0", + "newState": "is-sorted@1.0.0", +} +`; + +exports[`npm package resource e2e npm package resource test: NPMPackage destroy 1`] = ` +Object { + "_message": "Installed NPM package is-sorted@1.0.2", + "id": "is-sorted", + "name": "is-sorted", + "version": "1.0.2", +} +`; + +exports[`npm package resource e2e npm package resource test: NPMPackage update 1`] = ` +Object { + "_message": "Installed NPM package is-sorted@1.0.2", + "id": "is-sorted", + "name": "is-sorted", + "version": "1.0.2", +} +`; + +exports[`npm package resource e2e npm package resource test: NPMPackage update plan 1`] = ` +Object { + "currentState": "is-sorted@1.0.0", + "describe": "Install is-sorted@1.0.2", + "newState": "is-sorted@1.0.2", +} +`; diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap index 9af551ca5b1e8..1213c6a4791eb 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap @@ -11,8 +11,9 @@ Object { exports[`npm script resource e2e script resource test: NPMScript create plan 1`] = ` Object { "currentState": "", - "describe": "Add new command to your package.json — \\"apple\\": \\"foot", - "newState": "\\"apple\\": \\"foot", + "describe": "Add new command to your package.json: +\\"apple\\": \\"foot\\"", + "newState": "\\"apple\\": \\"foot\\"", } `; @@ -28,8 +29,9 @@ Object { exports[`npm script resource e2e script resource test: NPMScript update plan 1`] = ` Object { - "currentState": "\\"apple\\": \\"foot", - "describe": "Add new command to your package.json — \\"apple\\": \\"foot2", - "newState": "\\"apple\\": \\"foot2", + "currentState": "\\"apple\\": \\"foot\\"", + "describe": "Add new command to your package.json: +\\"apple\\": \\"foot2\\"", + "newState": "\\"apple\\": \\"foot2\\"", } `; diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index 97f0fe507f296..d84f9f0b89e6d 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -1,14 +1,13 @@ -const fs = require(`fs`) +const fs = require(`fs-extra`) const path = require(`path`) const { promisify } = require(`util`) const Joi = require(`@hapi/joi`) -const readFile = promisify(fs.readFile) -const writeFile = promisify(fs.writeFile) +const resourceSchema = require(`../resource-schema`) const readPackageJson = async root => { const fullPath = path.join(root, `package.json`) - const contents = await readFile(fullPath, `utf8`) + const contents = await fs.readFile(fullPath, `utf8`) const obj = JSON.parse(contents) return obj } @@ -16,7 +15,7 @@ const readPackageJson = async root => { const writePackageJson = async (root, obj) => { const fullPath = path.join(root, `package.json`) const contents = JSON.stringify(obj, null, 2) - await writeFile(fullPath, contents) + await fs.writeFile(fullPath, contents) } const create = async ({ root }, { name, value }) => { @@ -48,12 +47,13 @@ const destroy = async ({ root }, { id }) => { await writePackageJson(root, pkg) } -module.exports.validate = () => { - return { - name: Joi.string(), - value: Joi.string(), - } +const schema = { + name: Joi.string(), + value: Joi.string(), + ...resourceSchema, } +exports.schema = schema +exports.validate = resource => Joi.validate(resource, schema) module.exports.plan = async ({ root }, { id, name, value }) => { const key = id || name diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 055f7214e0afa..85e46b02e024b 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -1,82 +1,156 @@ const execa = require(`execa`) const _ = require(`lodash`) -const humanizeList = require(`humanize-list`) +const Joi = require(`@hapi/joi`) +const path = require(`path`) +const fs = require(`fs-extra`) + +const resourceSchema = require(`../resource-schema`) + +const getPackageNames = packages => packages.map(n => `${n.name}@${n.version}`) -const getPackageNames = packages => packages.map(n => n.name) const asyncForEach = async (array, callback) => { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array) } } -const create = async ({ root }, packages) => - new Promise(resolve => { - setTimeout(() => { - resolve() - }, 1000) - }) -/* - const types = _.groupBy(packages, c => c.dependencyType) - - // Run install for each dependency type - await asyncForEach(Object.keys(types), async type => { - let typeFlag = `` - if (type === `dev`) { - typeFlag = `--dev` - } - const command = [ - `yarn`, - [`add`, `-W`, typeFlag, ...getPackageNames(types[type])], - { - cwd: root, - }, - ] - - let commands - if (typeFlag !== ``) { - commands = [`add`, `-W`, typeFlag, ...getPackageNames(types[type])] - } else { - commands = [`add`, `-W`, ...getPackageNames(types[type])] - } - - const { stdout } = await execa(`yarn`, commands, { +let installs = [] +const executeInstalls = async root => { + const types = _.groupBy(installs, c => c.resource.dependencyType) + + // Grab the key of the first install & delete off installs these packages + // then run intall + // when done, check again & call executeInstalls again. + const depType = installs[0].resource.dependencyType + const packagesToInstall = types[depType] + installs = installs.filter( + i => !_.some(packagesToInstall, p => i.resource.id === p.resource.id) + ) + + const pkgs = packagesToInstall.map(p => p.resource) + + let typeFlag = `` + if (depType === `devDependency`) { + typeFlag = `--dev` + } + const command = [ + `yarn`, + [`add`, `-W`, typeFlag, ...getPackageNames(pkgs)], + { cwd: root, - }) - console.log(stdout) + }, + ] + + let commands + if (typeFlag !== ``) { + commands = [`add`, `-W`, typeFlag, ...getPackageNames(pkgs)] + } else { + commands = [`add`, `-W`, ...getPackageNames(pkgs)] + } + + const { stderr, stdout } = await execa(`yarn`, commands, { + cwd: root, }) - */ -const read = async (_, { name }) => { - const { stdout } = await execa(`yarn`, [`why`, name], { cwd: root }) - return stdout + packagesToInstall.forEach(p => p.outsideResolve()) + + // Run again if there's still more installs. + if (installs.length > 0) { + executeInstalls() + } } -const update = async (_, packages) => { - await execa(`yarn`, [`upgrade`, `-W`, ...getPackageNames(packages)], { - cwd: root, +const debouncedExecute = _.debounce(executeInstalls, 25) + +// Collect installs run at the same time so we can batch them. +const createInstall = async ({ root }, resource) => { + let outsideResolve + const promise = new Promise(resolve => { + outsideResolve = resolve }) + installs.push({ + outsideResolve, + resource, + }) + + debouncedExecute(root) + return promise } -const destroy = async (_, packages) => { - await execa(`yarn`, [`remove`, `-W`, ...getPackageNames(packages)], { +const create = async ({ root }, resource) => { + const { err, value } = validate(resource) + if (err) { + return err + } + + await createInstall({ root }, value) + return read({ root }, value.name) + + return new Promise(resolve => { + setTimeout(async () => { + const resources = await read({ root }, { packages }) + resolve(resources) + }, 1) + }) +} + +const read = async ({ root }, id) => { + let packageJSON + try { + // TODO is there a better way to grab this? Can the position of `node_modules` + // change? + packageJSON = JSON.parse( + await fs.readFile(path.join(root, `node_modules`, id, `package.json`)) + ) + } catch (e) { + return undefined + } + return { + id: packageJSON.name, + name: packageJSON.name, + version: packageJSON.version, + _message: `Installed NPM package ${packageJSON.name}@${packageJSON.version}`, + } +} + +const schema = { + name: Joi.string().required(), + version: Joi.string().default(`latest`, `Defaults to "latest"`), + dependencyType: Joi.string().default( + `dependency`, + `defaults to regular dependency` + ), + ...resourceSchema, +} + +const validate = resource => Joi.validate(resource, schema) + +const destroy = async ({ root }, resource) => { + const { stderr, stdout } = await execa(`yarn`, [`remove`, resource.name], { cwd: root, }) + return resource } module.exports.create = create -module.exports.update = update +module.exports.update = create module.exports.read = read module.exports.destroy = destroy -module.exports.config = { - batch: true, -} +module.exports.schema = schema +module.exports.config = {} + +module.exports.plan = async (context, resource) => { + const { + err, + value: { name, version }, + } = validate(resource) -module.exports.plan = (_, packages) => { - const packageNames = getPackageNames(packages) + const currentState = await read(context, resource.name) return { - currentState: [], - newState: [packageNames], - describe: `Install ${humanizeList(packageNames)}`, + currentState: + currentState && `${currentState.name}@${currentState.version}`, + newState: `${name}@${version}`, + describe: `Install ${name}@${version}`, } } diff --git a/packages/gatsby/src/recipes/providers/npm/package.test.js b/packages/gatsby/src/recipes/providers/npm/package.test.js index 9a1811f50979e..06fef678f10c8 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.test.js +++ b/packages/gatsby/src/recipes/providers/npm/package.test.js @@ -1,10 +1,30 @@ +const pkgDir = require(`pkg-dir`) +const os = require(`os`) +const path = require(`path`) +const uuid = require(`uuid`) +const fs = require(`fs-extra`) + const pkg = require(`./package`) +const resourceTestHelper = require(`../resource-test-helper`) -const root = __dirname -const commands = [{ name: `foo` }] +const root = path.join(os.tmpdir(), uuid.v4()) +fs.mkdirSync(root) +const pkgResource = { name: `glob` } test(`plan returns a description`, async () => { - const result = await pkg.plan({ root }, commands) + const result = await pkg.plan({ root }, pkgResource) + + expect(result.describe).toEqual(expect.stringContaining(`Install glob`)) +}) - expect(result.describe).toEqual(`Install foo`) +describe(`npm package resource`, () => { + test(`e2e npm package resource test`, async () => { + await resourceTestHelper({ + resourceModule: pkg, + resourceName: `NPMPackage`, + context: { root }, + initialObject: { name: `is-sorted`, version: `1.0.0` }, + partialUpdate: { name: `is-sorted`, version: `1.0.2` }, + }) + }) }) diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index a28f8eb8b66b2..a18f0a7972059 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -1,13 +1,11 @@ -const fs = require(`fs`) +const fs = require(`fs-extra`) const path = require(`path`) const Joi = require(`@hapi/joi`) -const { promisify } = require(`util`) -const readFile = promisify(fs.readFile) -const writeFile = promisify(fs.writeFile) +const resourceSchema = require(`../resource-schema`) const readPackageJson = async root => { const fullPath = path.join(root, `package.json`) - const contents = await readFile(fullPath, `utf8`) + const contents = await fs.readFile(fullPath, `utf8`) const obj = JSON.parse(contents) return obj } @@ -15,7 +13,7 @@ const readPackageJson = async root => { const writePackageJson = async (root, obj) => { const fullPath = path.join(root, `package.json`) const contents = JSON.stringify(obj, null, 2) - await writeFile(fullPath, contents) + await fs.writeFile(fullPath, contents) } const create = async ({ root }, { name, command }) => { @@ -48,12 +46,12 @@ const destroy = async ({ root }, { name }) => { await writePackageJson(root, pkg) } -module.exports.validate = () => { - return { - name: Joi.string(), - command: Joi.string(), - } +const schema = { + name: Joi.string(), + command: Joi.string(), } +exports.schema = schema +exports.validate = resource => Joi.validate(resource, schema) module.exports.all = async ({ root }) => { const pkg = await readPackageJson(root) diff --git a/packages/gatsby/src/recipes/providers/resource-schema.js b/packages/gatsby/src/recipes/providers/resource-schema.js index 7e45505f57f87..9b58341ae3713 100644 --- a/packages/gatsby/src/recipes/providers/resource-schema.js +++ b/packages/gatsby/src/recipes/providers/resource-schema.js @@ -10,5 +10,6 @@ const Joi = require(`@hapi/joi`) module.exports = { // ID of a file should be relative to the root of the git repo // or the absolute path if we can't find one - id: Joi.string(), + id: Joi.string().required(), + _message: Joi.string(), } diff --git a/packages/gatsby/src/recipes/providers/resource-test-helper.js b/packages/gatsby/src/recipes/providers/resource-test-helper.js index 01a5be3821d91..93a020b3191cc 100644 --- a/packages/gatsby/src/recipes/providers/resource-test-helper.js +++ b/packages/gatsby/src/recipes/providers/resource-test-helper.js @@ -15,7 +15,7 @@ module.exports = async ({ // Test creating the resource const createResponse = await resource.create(context, initialObject) const validateResult = Joi.validate(createResponse, { - ...resource.validate(), + ...resource.schema, ...resourceSchema, }) expect(validateResult.error).toBeNull() diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index 3b3cd2a653f7c..d6a547120d606 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -11,6 +11,7 @@ const recipeMachine = Machine( currentStep: 0, steps: [], plan: [], + stepResources: [], }, states: { creatingPlan: { @@ -40,14 +41,6 @@ const recipeMachine = Machine( on: { CONTINUE: `applyingPlan`, }, - meta: { - test: (_, state) => { - expect(state.context.plan).toBeTruthy() - }, - }, - }, - applyPlan: { - // invoke apply plan machine which sends back state updates for resources }, applyingPlan: { invoke: { @@ -57,9 +50,12 @@ const recipeMachine = Machine( return undefined } - return applyPlan(context.plan) + return await applyPlan(context.plan) + }, + onDone: { + target: `hasAnotherStep`, + actions: [`addResourcesToContext`], }, - onDone: `hasAnotherStep`, onError: { target: `failure`, actions: assign({ error: (context, event) => event.data }), @@ -102,6 +98,14 @@ const recipeMachine = Machine( plan: [], } }), + addResourcesToContext: assign((context, event) => { + if (event.data) { + const stepResources = context.stepResources || [] + return { + stepResources: stepResources.concat([event.data]), + } + } + }), }, guards: { hasNextStep: (context, event) => diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 8dcdedd4198b1..25422506983d5 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -65,3 +65,31 @@ it(`it should switch to done after the final apply step`, done => { service.start() }) + +it(`should store created/changed/deleted resources on the context after applying plan`, done => { + const filePath = `./hi.md` + const filePath2 = `./hi2.md` + const initialContext = { + steps: [ + { File: [{ path: filePath, content: `#yo` }] }, + { File: [{ path: filePath2, content: `#yo` }] }, + {}, + ], + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + // Keep simulating moving onto the next step + if (state.value === `present plan`) { + service.send(`CONTINUE`) + } + if (state.value === `done`) { + expect(state.context.stepResources).toMatchSnapshot() + expect(state.context.stepResources[1][0]._message).toBeTruthy() + done() + } + }) + + service.start() +}) From f1d245b612e13db1a4ff1bcdad7387f5baed67cd Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 8 Apr 2020 21:44:30 -0700 Subject: [PATCH 048/128] Fix merge barf --- packages/gatsby/package.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index f61fb1f993a1f..e3c682da75091 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,11 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", -<<<<<<< HEAD - "version": "2.20.13", -======= "version": "2.20.14", ->>>>>>> origin/master "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -90,10 +86,7 @@ "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", "gatsby-telemetry": "^1.2.3", -<<<<<<< HEAD "git-diff": "^2.0.6", -======= ->>>>>>> origin/master "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", From bbfa77fd05647d7d9ff730c63467afc2c4aa8902 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 8 Apr 2020 21:47:21 -0700 Subject: [PATCH 049/128] Remove file that came in from bad merge --- docs/blog/2020-04-05-LA-2020-Gladwell.md | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 docs/blog/2020-04-05-LA-2020-Gladwell.md diff --git a/docs/blog/2020-04-05-LA-2020-Gladwell.md b/docs/blog/2020-04-05-LA-2020-Gladwell.md deleted file mode 100644 index ba538952dbb00..0000000000000 --- a/docs/blog/2020-04-05-LA-2020-Gladwell.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Gatsby Days LA 2020 Video 3: Slash Build Times with Gatsby Builds Best Practices" -date: 2020-04-05 -author: Greg Thomas -excerpt: "React developer Grant Gladwell tells how he identified best practices for using Gatsby Builds to cut build time for image-heavy websites by a factor of five." -tags: - - gatsby-days - - community - - performance - - drupal - - gatsby-cloud ---- - -_Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ - -Grant Gladwell is a React developer dedicated to employing modern technologies in cutting-edge projects. During his time at the digital experience agency Third and Grove, Grant was part of the team that integrated Drupal and Gatsby to create the agency’s fast, yet content-rich website. He also helped build Gatsby Preview + Drupal—a live preview module for Drupal that can be used with Gatsby Cloud. - -At Gatsby Days LA 2020, Grant focused on performance. After analyzing top Gatsby-based sites, he and his team identified best practices that can help developers achieve blazing fast speeds. Check out this video of Grant’s presentation to discover how Gatsby Builds helped Third and Grove reduce build times for its image-heavy site from about 40 minutes to only 8. And learn how Gatsby’s lazy load components can deliver impressive performance benefits without excessive coding. - -[![Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell](https://res.cloudinary.com/marcomontalbano/image/upload/v1585858632/video_to_markdown/images/youtube--xMorT50I0cw-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=xMorT50I0cw "Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell") From c6de7149ac7f384af32c93701aee478e76b7b456 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 8 Apr 2020 22:01:31 -0700 Subject: [PATCH 050/128] update todos --- packages/gatsby/src/recipes/todo.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index ea2445a7c6da8..bf9d94c7453fb 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -17,21 +17,24 @@ ## alpha - [x] Handle `dev` in NPMPackage -- [ ] Make `dependencyType` in NPMPackage an enum -- [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions +- [x] add Joi for validating resource objects +- [x] handle template strings in JSX parser - [x] Step by step design -- [ ] Make port selection dynamic - [x] Use `fs-extra` - [x] Handle object style plugins - [x] Improve gatsby-config test -- [ ] use yarn/npm based on the user config - [x] convert to xstate +- [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) +- [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions +- [ ] use yarn/npm based on the user config - [ ] reasonably test resources -- [x] add Joi for validating resource objects -- [x] handle template strings in JSX parser - [ ] integration test for each resource (read, create, update, delete) - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] handle error states +- [ ] have File only pull from remote files for now until multiline strings work in MDX +- [ ] diff all resource changes +- [ ] move code to its own package `gatsby-recipes` +- [ ] write blog post ## Near-ish future From bc369a00fb3ac1ff0d0fbd3bfecab1e29cc820bf Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 17:12:19 -0700 Subject: [PATCH 051/128] Validate resources & improve file diffing (#22986) --- packages/gatsby/package.json | 1 + .../__snapshots__/recipe-machine.test.js.snap | 42 ++++++++++++- .../validate-recipe.test.js.snap | 30 +++++++++ packages/gatsby/src/recipes/cli.js | 61 +++++++++++++++++-- .../fs/__snapshots__/file.test.js.snap | 10 +-- .../gatsby/src/recipes/providers/fs/file.js | 18 +++++- .../src/recipes/providers/npm/package.js | 5 +- .../src/recipes/providers/resource-schema.js | 2 +- packages/gatsby/src/recipes/recipe-machine.js | 34 +++++++++-- .../gatsby/src/recipes/recipe-machine.test.js | 23 +++++++ packages/gatsby/src/recipes/todo.md | 7 ++- .../gatsby/src/recipes/validate-recipe.js | 26 ++++++++ .../src/recipes/validate-recipe.test.js | 29 +++++++++ 13 files changed, 264 insertions(+), 24 deletions(-) create mode 100644 packages/gatsby/src/recipes/__snapshots__/validate-recipe.test.js.snap create mode 100644 packages/gatsby/src/recipes/validate-recipe.js create mode 100644 packages/gatsby/src/recipes/validate-recipe.test.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index e3c682da75091..990e984043a17 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -100,6 +100,7 @@ "import-jsx": "^4.0.0", "ink-link": "^1.0.0", "invariant": "^2.2.4", + "is-newline": "^1.0.0", "is-relative": "^1.0.0", "is-relative-url": "^3.0.0", "is-string": "^1.0.5", diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 1ff528fb51687..08a29e145bf07 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -1,10 +1,50 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`it should error if part of the recipe fails validation 1`] = ` +Array [ + Object { + "resource": "File", + "resourceDeclaration": Object { + "contentz": "#yo", + "path": "./hi.md", + }, + "step": 0, + "validationError": Object { + "_object": Object { + "contentz": "#yo", + "path": "./hi.md", + }, + "details": Array [ + Object { + "context": Object { + "child": "contentz", + "key": "contentz", + "label": "contentz", + "value": "#yo", + }, + "message": "\\"contentz\\" is not allowed", + "path": Array [ + "contentz", + ], + "type": "object.allowUnknown", + }, + ], + "isJoi": true, + "name": "ValidationError", + }, + }, +] +`; + exports[`should create plan for File resources 1`] = ` Array [ Object { - "currentState": "#yo", + "currentState": "", "describe": "Write ./hi.md", + "diff": "@@ -1 +1 @@ +- ++#yo +", "newState": "#yo", "resourceDefinitions": Array [ Object { diff --git a/packages/gatsby/src/recipes/__snapshots__/validate-recipe.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/validate-recipe.test.js.snap new file mode 100644 index 0000000000000..81c21ece9be11 --- /dev/null +++ b/packages/gatsby/src/recipes/__snapshots__/validate-recipe.test.js.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`validate module validates recipes with resource declarations validates File declarations 1`] = ` +Array [ + Object { + "resource": "File", + "resourceDeclaration": Object { + "contentz": "yo", + "path": "super-duper.md", + }, + "step": 2, + "validationError": [ValidationError: "contentz" is not allowed], + }, +] +`; + +exports[`validate module validates recipes with resource declarations validates File declarations 2`] = `[ValidationError: "contentz" is not allowed]`; + +exports[`validate module validates recipes with resource declarations validates NPMPackage declarations 1`] = ` +Array [ + Object { + "resource": "NPMPackage", + "resourceDeclaration": Object { + "namez": "wee-package", + }, + "step": 1, + "validationError": [ValidationError: child "name" fails because ["name" is required]. "namez" is not allowed], + }, +] +`; diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 8c322cc3968f1..25b1d20f8dac9 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -5,7 +5,7 @@ const lodash = require(`lodash`) const React = require(`react`) const { useState, useContext, useEffect } = require(`react`) -const { render, Box, Text, useInput, useApp, Static } = require(`ink`) +const { render, Box, Text, Color, useInput, useApp, Static } = require(`ink`) const Spinner = require(`ink-spinner`).default const Link = require(`ink-link`) const MDX = require(`@mdx-js/runtime`) @@ -26,7 +26,13 @@ const parser = require(`./parser`) let renderCount = 1 const Div = props => ( - + ) const components = { @@ -216,6 +222,7 @@ module.exports = ({ recipe, projectRoot }) => { */ log(`render`, `${renderCount} ${new Date().toJSON()}`) + log(`state`, state) renderCount += 1 if (!subscriptionResponse.data) { @@ -226,6 +233,9 @@ module.exports = ({ recipe, projectRoot }) => { if (state.value === `done`) { process.nextTick(() => process.exit()) } + if (state.value === `doneError`) { + process.nextTick(() => process.exit()) + } if (process.env.DEBUG) { log(`state`, state) @@ -303,6 +313,43 @@ module.exports = ({ recipe, projectRoot }) => { ) } + const Error = ({ state }) => { + log(`errors`, state) + if (state && state.context && state.context.error) { + return ( +
    + + The following resources failed validation + + {state.context.error.map((err, i) => { + log(`recipe er`, { err }) + return ( +
    + Type: {err.resource} + + Resource: {JSON.stringify(err.resourceDeclaration, null, 4)} + + Recipe step: {err.step} + + Error{err.validationError.details.length > 1 && `s`}: + + {err.validationError.details.map((d, v) => ( + ‣ {d.message} + ))} +
    + ) + })} +
    + ) + } + + return null + } + + if (state.value === `doneError`) { + return + } + return ( <> @@ -332,10 +379,12 @@ module.exports = ({ recipe, projectRoot }) => { } const Wrapper = () => ( - - {` `} - - +
    + + {` `} + + +
    ) const Recipe = () => diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index 02f9f9c58013f..609a3094f11aa 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -11,10 +11,11 @@ Object { exports[`file resource e2e file resource test: File create plan 1`] = ` Object { - "currentState": undefined, + "currentState": "", "describe": "Write file.txt", - "diff": "@@ -0,0 +1 @@ -{+Hello, world!+} + "diff": "@@ -1 +1 @@ +- ++Hello, world! ", "newState": "Hello, world!", } @@ -43,7 +44,8 @@ Object { "currentState": "Hello, world!", "describe": "Write file.txt", "diff": "@@ -1 +1 @@ -Hello, [-world!-]{+world!1+} +-Hello, world! ++Hello, world!1 ", "newState": "Hello, world!1", } diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 99e7fdbaaccd8..b8b8405035e43 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -3,6 +3,7 @@ const path = require(`path`) const mkdirp = require(`mkdirp`) const Joi = require(`@hapi/joi`) const gitDiff = require(`git-diff/async`) +const isNewline = require(`is-newline`) const resourceSchema = require(`../resource-schema`) @@ -60,13 +61,23 @@ module.exports.plan = async (context, { id, path: filePath, content }) => { const currentResource = await read(context, filePath) const plan = { - currentState: currentResource && currentResource.content, + currentState: (currentResource && currentResource.content) || ``, newState: content, describe: `Write ${filePath}`, + diff: ``, } if (plan.currentState !== plan.newState) { - const diff = await gitDiff(plan.currentState || ``, plan.newState || ``, { + let oldString = plan.currentState || `\n` + let newString = plan.newState || `\n` + if (!isNewline(oldString.slice(-1))) { + oldString += `\n` + } + if (!isNewline(newString.slice(-1))) { + newString += `\n` + } + + const diff = await gitDiff(oldString, newString, { color: true, flags: `--diff-algorithm=minimal`, }) @@ -84,7 +95,8 @@ const schema = { ...resourceSchema, } exports.schema = schema -exports.validate = resource => Joi.validate(resource, schema) +exports.validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) module.exports.exists = fileExists diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 85e46b02e024b..5f8b0bab1fe71 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -123,7 +123,10 @@ const schema = { ...resourceSchema, } -const validate = resource => Joi.validate(resource, schema) +const validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) + +exports.validate = validate const destroy = async ({ root }, resource) => { const { stderr, stdout } = await execa(`yarn`, [`remove`, resource.name], { diff --git a/packages/gatsby/src/recipes/providers/resource-schema.js b/packages/gatsby/src/recipes/providers/resource-schema.js index 9b58341ae3713..d2e068d093e7f 100644 --- a/packages/gatsby/src/recipes/providers/resource-schema.js +++ b/packages/gatsby/src/recipes/providers/resource-schema.js @@ -10,6 +10,6 @@ const Joi = require(`@hapi/joi`) module.exports = { // ID of a file should be relative to the root of the git repo // or the absolute path if we can't find one - id: Joi.string().required(), + id: Joi.string(), _message: Joi.string(), } diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index d6a547120d606..9acf6394d4cb5 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -2,11 +2,12 @@ const { Machine, assign } = require(`xstate`) const createPlan = require(`./create-plan`) const applyPlan = require(`./apply-plan`) +const validateRecipe = require(`./validate-recipe`) const recipeMachine = Machine( { id: `recipe`, - initial: `creatingPlan`, + initial: `validatePlan`, context: { currentStep: 0, steps: [], @@ -14,6 +15,27 @@ const recipeMachine = Machine( stepResources: [], }, states: { + validatePlan: { + invoke: { + id: `validatePlan`, + src: async (context, event) => { + const result = await validateRecipe(context.steps) + if (result.length > 0) { + // is stringifying the only way to pass data around in errors 🤔 + throw new Error(JSON.stringify(result)) + } + + return result + }, + onDone: `creatingPlan`, + onError: { + target: `doneError`, + actions: assign({ + error: (context, event) => JSON.parse(event.data.message), + }), + }, + }, + }, creatingPlan: { entry: [`deleteOldPlan`], invoke: { @@ -29,14 +51,11 @@ const recipeMachine = Machine( }), }, onError: { - target: `failure`, + target: `doneError`, actions: assign({ error: (context, event) => event.data }), }, }, }, - failure: { - "": `done`, - }, "present plan": { on: { CONTINUE: `applyingPlan`, @@ -57,7 +76,7 @@ const recipeMachine = Machine( actions: [`addResourcesToContext`], }, onError: { - target: `failure`, + target: `doneError`, actions: assign({ error: (context, event) => event.data }), }, }, @@ -84,6 +103,9 @@ const recipeMachine = Machine( done: { type: `final`, }, + doneError: { + type: `final`, + }, }, }, { diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 25422506983d5..12e1500fbb3a2 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -40,6 +40,26 @@ it(`should create plan for File resources`, done => { service.start() }) +it(`it should error if part of the recipe fails validation`, done => { + const filePath = `./hi.md` + const initialContext = { + steps: [{ File: [{ path: filePath, contentz: `#yo` }] }, {}, {}], + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `doneError`) { + expect(state.context.error).toBeTruthy() + expect(state.context.error).toMatchSnapshot() + service.stop() + done() + } + }) + + service.start() +}) + it(`it should switch to done after the final apply step`, done => { const filePath = `./hi.md` const initialContext = { @@ -87,6 +107,9 @@ it(`should store created/changed/deleted resources on the context after applying if (state.value === `done`) { expect(state.context.stepResources).toMatchSnapshot() expect(state.context.stepResources[1][0]._message).toBeTruthy() + // Clean up files + fs.unlinkSync(path.join(process.cwd(), filePath)) + fs.unlinkSync(path.join(process.cwd(), filePath2)) done() } }) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index bf9d94c7453fb..24742c9d64931 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -24,16 +24,18 @@ - [x] Handle object style plugins - [x] Improve gatsby-config test - [x] convert to xstate +- [x] integration test for each resource (read, create, update, delete) - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config -- [ ] reasonably test resources -- [ ] integration test for each resource (read, create, update, delete) - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] handle error states +- [x] validate Resource component props. - [ ] have File only pull from remote files for now until multiline strings work in MDX - [ ] diff all resource changes - [ ] move code to its own package `gatsby-recipes` +- [ ] handle not finding a recipe +- [ ] write up testing doc ASAP so internal folks can try it - [ ] write blog post ## Near-ish future @@ -45,3 +47,4 @@ - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Select input supported recipes - [ ] Refactor resource state to use Redux & record runs in local db +- [ ] move creating the validate function to core and out of resources — they just declare their schema diff --git a/packages/gatsby/src/recipes/validate-recipe.js b/packages/gatsby/src/recipes/validate-recipe.js new file mode 100644 index 0000000000000..7e80eaa503c5f --- /dev/null +++ b/packages/gatsby/src/recipes/validate-recipe.js @@ -0,0 +1,26 @@ +const resources = require(`./resources`) +const _ = require(`lodash`) + +module.exports = plan => { + const validationErrors = _.compact( + _.flattenDeep( + plan.map((step, i) => + Object.keys(step).map(key => + step[key].map(resourceDeclaration => { + const result = resources[key].validate(resourceDeclaration) + if (result.error) { + return { + step: i, + resource: key, + resourceDeclaration, + validationError: result.error, + } + } + }) + ) + ) + ) + ) + + return validationErrors +} diff --git a/packages/gatsby/src/recipes/validate-recipe.test.js b/packages/gatsby/src/recipes/validate-recipe.test.js new file mode 100644 index 0000000000000..d2a69ada67284 --- /dev/null +++ b/packages/gatsby/src/recipes/validate-recipe.test.js @@ -0,0 +1,29 @@ +const validateRecipe = require(`./validate-recipe`) + +describe(`validate module validates recipes with resource declarations`, () => { + it(`validates File declarations`, () => { + const recipe = [ + {}, + { File: [{ path: `super.md`, content: `hi` }] }, + { File: [{ path: `super-duper.md`, contentz: `yo` }] }, + ] + const validationResponse = validateRecipe(recipe) + expect(validationResponse).toMatchSnapshot() + expect(validationResponse[0].validationError).toMatchSnapshot() + }) + + it(`validates NPMPackage declarations`, () => { + const recipe = [{}, { NPMPackage: [{ namez: `wee-package` }] }] + const validationResponse = validateRecipe(recipe) + expect(validationResponse).toMatchSnapshot() + }) + + it(`returns empty array if there's no errors`, () => { + const recipe = [ + { File: [{ path: `yo.md`, content: `pizza` }] }, + { NPMPackage: [{ name: `wee-package` }] }, + ] + const validationResponse = validateRecipe(recipe) + expect(validationResponse).toHaveLength(0) + }) +}) From 63604f3961d8f194430195e5d6dea82e9113afb4 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 18:33:09 -0700 Subject: [PATCH 052/128] Improve diffing & just run all resource operations serially --- .../__snapshots__/recipe-machine.test.js.snap | 16 +++++++----- packages/gatsby/src/recipes/apply-plan.js | 13 ++++------ packages/gatsby/src/recipes/cli.js | 26 ++++++++++++------- packages/gatsby/src/recipes/create-plan.js | 2 +- .../gatsby/src/recipes/providers/fs/file.js | 18 ++----------- .../src/recipes/providers/gatsby/plugin.js | 10 +++++-- .../providers/gatsby/shadow-file.test.js | 25 ++++++++++++++++++ .../src/recipes/providers/npm/package-json.js | 5 +++- .../src/recipes/providers/npm/script.js | 20 +++++++++++--- .../src/recipes/providers/utils/get-diff.js | 23 ++++++++++++++++ .../gatsby/src/recipes/recipe-machine.test.js | 15 ++++++++--- packages/gatsby/src/recipes/todo.md | 2 +- .../gatsby/src/recipes/validate-recipe.js | 4 +++ 13 files changed, 128 insertions(+), 51 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js create mode 100644 packages/gatsby/src/recipes/providers/utils/get-diff.js diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 08a29e145bf07..6a9aca237395f 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -46,12 +46,10 @@ Array [ +#yo ", "newState": "#yo", - "resourceDefinitions": Array [ - Object { - "content": "#yo", - "path": "./hi.md", - }, - ], + "resourceDefinitions": Object { + "content": "#yo", + "path": "./hi.md", + }, "resourceName": "File", }, ] @@ -66,6 +64,12 @@ Array [ "id": "./hi.md", "path": "./hi.md", }, + Object { + "_message": "Wrote file ./hi3.md", + "content": "#yo", + "id": "./hi3.md", + "path": "./hi3.md", + }, ], Array [ Object { diff --git a/packages/gatsby/src/recipes/apply-plan.js b/packages/gatsby/src/recipes/apply-plan.js index 825fb738ca22c..08f4bf3d7442b 100644 --- a/packages/gatsby/src/recipes/apply-plan.js +++ b/packages/gatsby/src/recipes/apply-plan.js @@ -10,17 +10,14 @@ const asyncForEach = async (array, callback) => { const applyPlan = async stepPlan => { let appliedResources = [] + // We apply each resource serially for now — we can parallalize in the + // future for SPEED await asyncForEach(stepPlan, async resourcePlan => { const resource = resources[resourcePlan.resourceName] - if (resource.config && resource.config.serial) { - return await asyncForEach(resourcePlan.resourceDefinitions, r => - resource.create(ctx, r) - ) - } - - const changedResources = await Promise.all( - resourcePlan.resourceDefinitions.map(r => resource.create(ctx, r)) + const changedResources = await resource.create( + ctx, + resourcePlan.resourceDefinitions ) appliedResources = appliedResources.concat(changedResources) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 25b1d20f8dac9..0b1603c214496 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -208,7 +208,6 @@ module.exports = ({ recipe, projectRoot }) => { if (key.return && state.value === `SUCCESS`) { subscriptionClient.close() exit() - // TODO figure out why exiting ink isn't enough. process.exit() } else if (key.return) { sendEvent({ event: `CONTINUE` }) @@ -217,12 +216,10 @@ module.exports = ({ recipe, projectRoot }) => { /* * TODOs - * on last step w/ no plan just exit - * show what's happened in Static — probably the state machine should put these in new context key. + * Listen to "y" to continue (in addition to enter) */ log(`render`, `${renderCount} ${new Date().toJSON()}`) - log(`state`, state) renderCount += 1 if (!subscriptionResponse.data) { @@ -276,11 +273,22 @@ module.exports = ({ recipe, projectRoot }) => { return (
    - {state.context.plan.map(p => ( -
    +
    + + Proposed changes + +
    + {state.context.plan.map((p, i) => ( +
    {p.resourceName}: * {p.describe} - {p.diff} + {p.diff !== `` && ( + <> + --- + {p.diff} + --- + + )}
    ))}
    @@ -300,8 +308,8 @@ module.exports = ({ recipe, projectRoot }) => { return (
    - {state.context.plan.map(p => ( -
    + {state.context.plan.map((p, i) => ( +
    {p.resourceName}: {` `} diff --git a/packages/gatsby/src/recipes/create-plan.js b/packages/gatsby/src/recipes/create-plan.js index dd8a53820e659..f30997a2a5457 100644 --- a/packages/gatsby/src/recipes/create-plan.js +++ b/packages/gatsby/src/recipes/create-plan.js @@ -33,7 +33,7 @@ module.exports = async context => { const commandPlan = await resource.plan(ctx, cmd) planForNextStep.push({ resourceName: key, - resourceDefinitions: val, + resourceDefinitions: cmd, ...commandPlan, }) } catch (e) { diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index b8b8405035e43..c288626624e97 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -2,9 +2,8 @@ const fs = require(`fs-extra`) const path = require(`path`) const mkdirp = require(`mkdirp`) const Joi = require(`@hapi/joi`) -const gitDiff = require(`git-diff/async`) -const isNewline = require(`is-newline`) +const getDiff = require(`../utils/get-diff`) const resourceSchema = require(`../resource-schema`) const makePath = (root, relativePath) => path.join(root, relativePath) @@ -68,20 +67,7 @@ module.exports.plan = async (context, { id, path: filePath, content }) => { } if (plan.currentState !== plan.newState) { - let oldString = plan.currentState || `\n` - let newString = plan.newState || `\n` - if (!isNewline(oldString.slice(-1))) { - oldString += `\n` - } - if (!isNewline(newString.slice(-1))) { - newString += `\n` - } - - const diff = await gitDiff(oldString, newString, { - color: true, - flags: `--diff-algorithm=minimal`, - }) - plan.diff = diff + plan.diff = await getDiff(plan.currentState, plan.newState) } return plan diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 3a4e38f73b8a4..27a10c7aea7c4 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -6,6 +6,7 @@ const glob = require(`glob`) const declare = require(`@babel/helper-plugin-utils`).declare +const getDiff = require(`../utils/get-diff`) const resourceSchema = require(`../resource-schema`) const fileExists = filePath => fs.existsSync(filePath) @@ -233,19 +234,24 @@ const schema = { shadowedFiles: Joi.array().items(Joi.string()), ...resourceSchema, } -module.exports.schema = schema -exports.validate = resource => Joi.validate(resource, schema) +const validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) + +exports.schema = schema +exports.validate = validate module.exports.plan = async ({ root }, { id, name }) => { const fullName = id || name const configPath = path.join(root, `gatsby-config.js`) const src = await fs.readFile(configPath, `utf8`) const newContents = addPluginToConfig(src, fullName) + const diff = await getDiff(src, newContents) return { id: fullName, name, + diff, currentState: src, newState: newContents, describe: `Install ${fullName} in gatsby-config.js`, diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js new file mode 100644 index 0000000000000..d32e207ff50d8 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js @@ -0,0 +1,25 @@ +const pkgDir = require(`pkg-dir`) +const os = require(`os`) +const path = require(`path`) +const uuid = require(`uuid`) +const fs = require(`fs-extra`) + +const shadowFile = require(`./shadow-file`) +const resourceTestHelper = require(`../resource-test-helper`) + +// Make temp directory to run tests in. +const root = path.join(os.tmpdir(), uuid.v4()) +fs.mkdirSync(root) + +// TODO finish this. Shadow File isn't yet updated. +describe(`Shadow File resource`, () => { + test(`e2e shadow file resource test`, async () => { + await resourceTestHelper({ + resourceModule: shadowFile, + resourceName: `ShadowFile`, + context: { root }, + // initialObject: { path: `file.txt`, content }, + // partialUpdate: { content: content + `1` }, + }) + }) +}) diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index d84f9f0b89e6d..a4b7faa604c73 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -52,8 +52,11 @@ const schema = { value: Joi.string(), ...resourceSchema, } +const validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) + exports.schema = schema -exports.validate = resource => Joi.validate(resource, schema) +exports.validate = validate module.exports.plan = async ({ root }, { id, name, value }) => { const key = id || name diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index a18f0a7972059..6412612ff94a4 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -2,6 +2,7 @@ const fs = require(`fs-extra`) const path = require(`path`) const Joi = require(`@hapi/joi`) +const getDiff = require(`../utils/get-diff`) const resourceSchema = require(`../resource-schema`) const readPackageJson = async root => { const fullPath = path.join(root, `package.json`) @@ -33,6 +34,7 @@ const read = async ({ root }, id) => { id, name: id, command: pkg.scripts[id], + _message: `Wrote script ${id} to your package.json`, } } @@ -50,6 +52,9 @@ const schema = { name: Joi.string(), command: Joi.string(), } +const validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) + exports.schema = schema exports.validate = resource => Joi.validate(resource, schema) @@ -65,19 +70,26 @@ module.exports.all = async ({ root }) => { module.exports.plan = async ({ root }, { name, command }) => { const resource = await read({ root }, name) + const pkg = await readPackageJson(root) + const scriptDescription = (name, command) => `"${name}": "${command}"` let currentState = `` if (resource) { currentState = scriptDescription(resource.name, resource.command) } + + const oldState = JSON.stringify(pkg, null, 2) + pkg.scripts = pkg.scripts || {} + pkg.scripts[name] = command + const newState = JSON.stringify(pkg, null, 2) + + const diff = await getDiff(oldState, newState) return { currentState, newState: scriptDescription(name, command), - describe: `Add new command to your package.json:\n${scriptDescription( - name, - command - )}`, + diff, + describe: `Add new command to your package.json`, } } diff --git a/packages/gatsby/src/recipes/providers/utils/get-diff.js b/packages/gatsby/src/recipes/providers/utils/get-diff.js new file mode 100644 index 0000000000000..42f88dafc35ea --- /dev/null +++ b/packages/gatsby/src/recipes/providers/utils/get-diff.js @@ -0,0 +1,23 @@ +const gitDiff = require(`git-diff/async`) +const isNewline = require(`is-newline`) + +module.exports = async (oldString = `\n`, newString = `\n`) => { + if (!isNewline(oldString.slice(-1))) { + oldString += `\n` + } + if (!isNewline(newString.slice(-1))) { + newString += `\n` + } + + let diff = await gitDiff(oldString, newString, { + color: true, + noHeaders: true, + flags: `--diff-algorithm=minimal`, + }) + + if (!diff) { + diff = `` + } + + return diff +} diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 12e1500fbb3a2..10b4eaf76385f 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -89,9 +89,15 @@ it(`it should switch to done after the final apply step`, done => { it(`should store created/changed/deleted resources on the context after applying plan`, done => { const filePath = `./hi.md` const filePath2 = `./hi2.md` + const filePath3 = `./hi3.md` const initialContext = { steps: [ - { File: [{ path: filePath, content: `#yo` }] }, + { + File: [ + { path: filePath, content: `#yo` }, + { path: filePath3, content: `#yo` }, + ], + }, { File: [{ path: filePath2, content: `#yo` }] }, {}, ], @@ -105,11 +111,14 @@ it(`should store created/changed/deleted resources on the context after applying service.send(`CONTINUE`) } if (state.value === `done`) { - expect(state.context.stepResources).toMatchSnapshot() - expect(state.context.stepResources[1][0]._message).toBeTruthy() // Clean up files fs.unlinkSync(path.join(process.cwd(), filePath)) fs.unlinkSync(path.join(process.cwd(), filePath2)) + fs.unlinkSync(path.join(process.cwd(), filePath3)) + + expect(state.context.stepResources[0]).toHaveLength(2) + expect(state.context.stepResources).toMatchSnapshot() + expect(state.context.stepResources[1][0]._message).toBeTruthy() done() } }) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 24742c9d64931..62c8dd013fa4d 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -25,12 +25,12 @@ - [x] Improve gatsby-config test - [x] convert to xstate - [x] integration test for each resource (read, create, update, delete) +- [x] validate Resource component props. - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] handle error states -- [x] validate Resource component props. - [ ] have File only pull from remote files for now until multiline strings work in MDX - [ ] diff all resource changes - [ ] move code to its own package `gatsby-recipes` diff --git a/packages/gatsby/src/recipes/validate-recipe.js b/packages/gatsby/src/recipes/validate-recipe.js index 7e80eaa503c5f..e489547abe136 100644 --- a/packages/gatsby/src/recipes/validate-recipe.js +++ b/packages/gatsby/src/recipes/validate-recipe.js @@ -7,6 +7,10 @@ module.exports = plan => { plan.map((step, i) => Object.keys(step).map(key => step[key].map(resourceDeclaration => { + if (!resources[key].validate) { + console.log(`${key} is missing an exported validate function`) + return + } const result = resources[key].validate(resourceDeclaration) if (result.error) { return { From 64625e4ee45bea5c3363b5611842b661beb952e0 Mon Sep 17 00:00:00 2001 From: John Otander Date: Thu, 9 Apr 2020 20:50:01 -0600 Subject: [PATCH 053/128] feat(recipes): Import recipes from urls and begin moving parsing to the server (#22987) * Update todo * feat(recipes): Move recipe parsing to the server Also adds experimental support for url imports and recipes from urls. * Fix command --- packages/gatsby/package.json | 3 + .../__snapshots__/recipe-machine.test.js.snap | 51 +- packages/gatsby/src/recipes/cli.js | 68 +-- packages/gatsby/src/recipes/graphql.js | 18 +- packages/gatsby/src/recipes/parser.js | 98 ---- packages/gatsby/src/recipes/parser.test.js | 131 ----- .../parser/__snapshots__/parser.test.js.snap | 150 +++++ .../src/recipes/parser/extract-imports.js | 44 ++ packages/gatsby/src/recipes/parser/index.js | 186 ++++++ .../src/recipes/{ => parser}/jsx-to-json.js | 17 +- .../gatsby/src/recipes/parser/parser.test.js | 37 ++ .../{ => parser}/react-standard-props.js | 0 .../recipes/parser/remove-element-by-name.js | 35 ++ .../src/recipes/providers/npm/package-json.js | 1 + .../src/recipes/providers/npm/script.js | 3 +- packages/gatsby/src/recipes/recipe-machine.js | 32 +- .../gatsby/src/recipes/recipe-machine.test.js | 57 +- packages/gatsby/src/recipes/todo.md | 24 +- yarn.lock | 539 ++++++++++++++++-- 19 files changed, 1101 insertions(+), 393 deletions(-) delete mode 100644 packages/gatsby/src/recipes/parser.js delete mode 100644 packages/gatsby/src/recipes/parser.test.js create mode 100644 packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap create mode 100644 packages/gatsby/src/recipes/parser/extract-imports.js create mode 100644 packages/gatsby/src/recipes/parser/index.js rename packages/gatsby/src/recipes/{ => parser}/jsx-to-json.js (92%) create mode 100644 packages/gatsby/src/recipes/parser/parser.test.js rename packages/gatsby/src/recipes/{ => parser}/react-standard-props.js (100%) create mode 100644 packages/gatsby/src/recipes/parser/remove-element-by-name.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 990e984043a17..e25cd0954b12c 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -15,6 +15,7 @@ "@babel/parser": "^7.8.8", "@babel/polyfill": "^7.8.7", "@babel/runtime": "^7.8.7", + "@babel/standalone": "^7.9.5", "@babel/traverse": "^7.8.6", "@hapi/joi": "^15.1.1", "@mdx-js/mdx": "^1.5.8", @@ -100,10 +101,12 @@ "import-jsx": "^4.0.0", "ink-link": "^1.0.0", "invariant": "^2.2.4", + "is-blank": "^2.1.0", "is-newline": "^1.0.0", "is-relative": "^1.0.0", "is-relative-url": "^3.0.0", "is-string": "^1.0.5", + "is-url": "^1.2.4", "is-wsl": "^2.1.1", "jest-worker": "^24.9.0", "joi2gql": "^1.3.1", diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 6a9aca237395f..d81d834ed38e5 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -1,48 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`it should error if part of the recipe fails validation 1`] = ` -Array [ - Object { - "resource": "File", - "resourceDeclaration": Object { - "contentz": "#yo", - "path": "./hi.md", - }, - "step": 0, - "validationError": Object { - "_object": Object { - "contentz": "#yo", - "path": "./hi.md", - }, - "details": Array [ - Object { - "context": Object { - "child": "contentz", - "key": "contentz", - "label": "contentz", - "value": "#yo", - }, - "message": "\\"contentz\\" is not allowed", - "path": Array [ - "contentz", - ], - "type": "object.allowUnknown", - }, - ], - "isJoi": true, - "name": "ValidationError", - }, - }, -] -`; +exports[`it should error if part of the recipe fails validation 1`] = `[TypeError: Cannot read property 'slice' of undefined]`; exports[`should create plan for File resources 1`] = ` Array [ Object { "currentState": "", "describe": "Write ./hi.md", - "diff": "@@ -1 +1 @@ -- + "diff": "- +#yo ", "newState": "#yo", @@ -65,18 +30,18 @@ Array [ "path": "./hi.md", }, Object { - "_message": "Wrote file ./hi3.md", + "_message": "Wrote file ./hi2.md", "content": "#yo", - "id": "./hi3.md", - "path": "./hi3.md", + "id": "./hi2.md", + "path": "./hi2.md", }, ], Array [ Object { - "_message": "Wrote file ./hi2.md", + "_message": "Wrote file ./hi3.md", "content": "#yo", - "id": "./hi2.md", - "path": "./hi2.md", + "id": "./hi3.md", + "path": "./hi3.md", }, ], ] diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 0b1603c214496..25ee27d4890f6 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -21,8 +21,6 @@ const { SubscriptionClient } = require(`subscriptions-transport-ws`) const fetch = require(`node-fetch`) const ws = require(`ws`) -const parser = require(`./parser`) - let renderCount = 1 const Div = props => ( @@ -70,14 +68,6 @@ const components = { NPMScript: () => null, } -const isRelative = path => { - if (path.slice(0, 1) == `.`) { - return true - } - - return false -} - var logStream = fs.createWriteStream(`recipe-client.log`, { flags: `a` }) const log = (label, textOrObj) => { logStream.write(`[${label}]:\n`) @@ -91,20 +81,8 @@ log( ) const PlanContext = React.createContext({}) -const usePlan = () => useContext(PlanContext) module.exports = ({ recipe, projectRoot }) => { - let recipePath - if (isRelative(recipe)) { - recipePath = path.join(projectRoot, recipe) - } else { - recipePath = path.join(__dirname, recipe) - } - if (recipePath.slice(-4) !== `.mdx`) { - recipePath += `.mdx` - } - - const recipeSrc = fs.readFileSync(recipePath, `utf8`) const GRAPHQL_ENDPOINT = `http://localhost:4000/graphql` const subscriptionClient = new SubscriptionClient( @@ -128,19 +106,6 @@ module.exports = ({ recipe, projectRoot }) => { ], }) - let parsed = {} - try { - parsed = parser(recipeSrc) - } catch (e) { - if (process.env.DEBUG) { - console.log(e) - } - console.log(`Unable to parse `, recipe) - process.exit() - } - - const { commands: allCommands, stepsAsMdx: stepsAsMDX } = parsed - class ErrorBoundary extends React.Component { constructor(props) { super(props) @@ -167,9 +132,10 @@ module.exports = ({ recipe, projectRoot }) => { } } - const RecipeInterpreter = ({ commands }) => { + const RecipeInterpreter = () => { const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() + const [subscriptionResponse] = useSubscription( { query: ` @@ -183,8 +149,8 @@ module.exports = ({ recipe, projectRoot }) => { (_prev, now) => now ) const [_, createOperation] = useMutation(` - mutation ($commands: String!) { - createOperation(commands: $commands) + mutation ($recipePath: String!, $projectRoot: String!) { + createOperation(recipePath: $recipePath, projectRoot: $projectRoot) } `) const [__, sendEvent] = useMutation(` @@ -194,14 +160,15 @@ module.exports = ({ recipe, projectRoot }) => { `) subscriptionClient.connectionCallback = async () => { - log(`subscriptionClient connected`) - await createOperation({ commands: JSON.stringify(commands) }) + try { + await createOperation({ recipePath: recipe, projectRoot }) + } catch (e) { + log('error creating operation', e) + } } const state = (subscriptionResponse.data && - JSON.parse(subscriptionResponse.data.operation.state)) || { - state: `waitingForData`, - } + JSON.parse(subscriptionResponse.data.operation.state)) useInput((_, key) => { setLastKeyPress(key) @@ -214,6 +181,11 @@ module.exports = ({ recipe, projectRoot }) => { } }) + log('subscriptionResponse.data', subscriptionResponse.data) + + if (!state) { + return Loading recipe + } /* * TODOs * Listen to "y" to continue (in addition to enter) @@ -222,10 +194,6 @@ module.exports = ({ recipe, projectRoot }) => { log(`render`, `${renderCount} ${new Date().toJSON()}`) renderCount += 1 - if (!subscriptionResponse.data) { - return null - } - // If we're done, exit. if (state.value === `done`) { process.nextTick(() => process.exit()) @@ -376,7 +344,7 @@ module.exports = ({ recipe, projectRoot }) => { )} - {stepsAsMDX[state.context.currentStep]} + {state.context.stepsAsMdx[state.context.currentStep]} @@ -390,12 +358,12 @@ module.exports = ({ recipe, projectRoot }) => {
    {` `} - +
    ) - const Recipe = () => + const Recipe = () => // Enable experimental mode for more efficient reconciler and renderer render(, { experimental: true }) diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 572154aa816bb..f7e8f89f3de83 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -12,6 +12,7 @@ const { SubscriptionServer } = require(`subscriptions-transport-ws`) const { createServer } = require(`http`) const { interpret } = require(`xstate`) const pkgDir = require(`pkg-dir`) +const cors = require('cors') const recipeMachine = require(`./recipe-machine`) const createTypes = require(`./create-types`) @@ -22,6 +23,7 @@ const pubsub = new PubSub() const PORT = 4000 const emitOperation = state => { + console.log(state) pubsub.publish(`operation`, { state: JSON.stringify(state), }) @@ -29,12 +31,12 @@ const emitOperation = state => { // only one service can run at a time. let service -const applyPlan = plan => { +const applyPlan = ({ recipePath, projectRoot }) => { + const initialState = { - context: { steps: plan, currentStep: 0 }, + context: { recipePath, projectRoot, steps: [], currentStep: 0 }, value: `init`, } - emitOperation(initialState) // Interpret the machine, and add a listener for whenever a transition occurs. service = interpret( @@ -92,12 +94,12 @@ const rootMutationType = new GraphQLObjectType({ createOperation: { type: GraphQLString, args: { - commands: { type: GraphQLString }, + recipePath: { type: GraphQLString }, + projectRoot: { type: GraphQLString } }, resolve: (_data, args) => { - const commands = JSON.parse(args.commands) - console.log(`received operation`, commands) - applyPlan(commands) + console.log(`received operation`, args.recipePath) + applyPlan(args) }, }, sendEvent: { @@ -138,6 +140,8 @@ const server = createServer(app) console.log(`listening on localhost:4000`) +app.use(cors()) + app.use( `/graphql`, graphqlHTTP({ diff --git a/packages/gatsby/src/recipes/parser.js b/packages/gatsby/src/recipes/parser.js deleted file mode 100644 index e64d3ad43db12..0000000000000 --- a/packages/gatsby/src/recipes/parser.js +++ /dev/null @@ -1,98 +0,0 @@ -const unified = require(`unified`) -const remarkMdx = require(`remark-mdx`) -const remarkParse = require(`remark-parse`) -const remarkStringify = require(`remark-stringify`) -const visit = require(`unist-util-visit`) - -const jsxToJson = require(`./jsx-to-json`) - -const asRoot = nodes => { - return { - type: `root`, - children: nodes, - } -} - -const toJson = value => { - const obj = {} - jsxToJson(value).forEach(([type, props = {}]) => { - if (type === `\n`) { - return - } - obj[type] = obj[type] || [] - obj[type].push(props) - }) - return obj -} - -const extractCommands = steps => { - const commands = steps - .map(nodes => { - const stepAst = asRoot(nodes) - let cmds = [] - visit(stepAst, `jsx`, node => { - const jsx = node.value - cmds = cmds.concat(toJson(jsx)) - }) - return cmds - }) - .reduce((acc, curr) => { - const cmdByName = {} - curr.map(v => { - Object.entries(v).forEach(([key, value]) => { - cmdByName[key] = cmdByName[key] || [] - cmdByName[key] = cmdByName[key].concat(value) - }) - }) - return [...acc, cmdByName] - }, []) - - return commands -} - -const u = unified() - .use(remarkParse) - .use(remarkStringify) - .use(remarkMdx) - -const partitionSteps = ast => { - const steps = [] - let index = 0 - ast.children.forEach(node => { - if (node.type === `thematicBreak`) { - index++ - return - } - - steps[index] = steps[index] || [] - steps[index].push(node) - }) - - return steps -} - -const toMdx = nodes => { - const stepAst = asRoot(nodes) - return u.stringify(stepAst) -} - -const toMdxWithoutJsx = nodes => { - const stepAst = asRoot(nodes) - visit(stepAst, `jsx`, (node, index, parent) => { - parent.children.splice(index, 1) - }) - return u.stringify(stepAst) -} - -module.exports = src => { - const ast = u.parse(src) - const steps = partitionSteps(ast) - - return { - ast, - steps, - commands: extractCommands(steps), - stepsAsMdx: steps.map(toMdx), - stepsAsMdxWithoutJsx: steps.map(toMdxWithoutJsx), - } -} diff --git a/packages/gatsby/src/recipes/parser.test.js b/packages/gatsby/src/recipes/parser.test.js deleted file mode 100644 index 1a159126570fe..0000000000000 --- a/packages/gatsby/src/recipes/parser.test.js +++ /dev/null @@ -1,131 +0,0 @@ -const fs = require(`fs-extra`) -const path = require(`path`) - -const parser = require(`./parser`) - -const fixturePath = path.join(__dirname, `prettier-git-hook.mdx`) -const fixtureSrc = fs.readFileSync(fixturePath, `utf8`) - -test(`returns a set of commands`, () => { - const result = parser(fixtureSrc) - - expect(result.commands).toMatchInlineSnapshot(` - Array [ - Object {}, - Object { - "NPMPackage": Array [ - Object { - "name": "husky", - }, - Object { - "name": "prettier", - }, - Object { - "name": "lint-staged", - }, - ], - }, - Object { - "NPMPackageJson": Array [ - Object { - "name": "husky", - "value": Object { - "hooks": Object { - "pre-commit": "lint-staged", - }, - }, - }, - Object { - "name": "lint-staged", - "value": Object { - "*.{js,md,mdx,json}": Array [ - "prettier --write", - ], - }, - }, - ], - }, - Object { - "File": Array [ - Object { - "content": "{ - \\"semi\\": false, - \\"singleQuote\\": true, - \\"trailingComma\\": \\"none\\" - }", - "path": ".prettierrc", - }, - Object { - "content": ".cache - public - node_modules - ", - "path": ".prettierignore", - }, - ], - }, - Object {}, - ] - `) -}) - -test(`partitions the MDX into steps`, () => { - const result = parser(fixtureSrc) - - expect(result.stepsAsMdx).toMatchInlineSnapshot(` - Array [ - "# Prettier Git Hook - - Make sure all of your code is run through prettier when you commit it to git. - We achieve this by configuring prettier to run on git hooks using husky and - lint-staged. - ", - "Install packages. - - - - - ", - "Implement git hooks for prettier. - - - - ", - "Write prettier config files. - - - - ", - "Prettier, husky, and lint-staged are now installed! You can edit your \`.prettierrc\` - if you'd like to change your prettier configuration. - ", - ] - `) -}) diff --git a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap new file mode 100644 index 0000000000000..74563f3715c1a --- /dev/null +++ b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap @@ -0,0 +1,150 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`fetches MDX from a url 1`] = ` +Array [ + Object { + "NPMPackageJson": Array [ + Object { + "name": "test-recipe", + "value": Object { + "hello": "world!", + }, + }, + ], + }, +] +`; + +exports[`handles imports from urls 1`] = ` +Array [ + "# Here is an imported recipe from a url! + +# Test recipe + +Add a package.json config object. + + +", +] +`; + +exports[`partitions the MDX into steps 1`] = ` +Array [ + "# Prettier Git Hook + +Make sure all of your code is run through prettier when you commit it to git. +We achieve this by configuring prettier to run on git hooks using husky and +lint-staged. +", + "Install packages. + + + + +", + "Implement git hooks for prettier. + + + +", + "Write prettier config files. + + + +", + "Prettier, husky, and lint-staged are now installed! You can edit your \`.prettierrc\` +if you'd like to change your prettier configuration. +", +] +`; + +exports[`returns a set of commands 1`] = ` +Array [ + Object {}, + Object { + "NPMPackage": Array [ + Object { + "name": "husky", + }, + Object { + "name": "prettier", + }, + Object { + "name": "lint-staged", + }, + ], + }, + Object { + "NPMPackageJson": Array [ + Object { + "name": "husky", + "value": Object { + "hooks": Object { + "pre-commit": "lint-staged", + }, + }, + }, + Object { + "name": "lint-staged", + "value": Object { + "*.{js,md,mdx,json}": Array [ + "prettier --write", + ], + }, + }, + ], + }, + Object { + "File": Array [ + Object { + "content": "{ + \\"semi\\": false, + \\"singleQuote\\": true, + \\"trailingComma\\": \\"none\\" +}", + "path": ".prettierrc", + }, + Object { + "content": ".cache +public +node_modules +", + "path": ".prettierignore", + }, + ], + }, + Object {}, +] +`; diff --git a/packages/gatsby/src/recipes/parser/extract-imports.js b/packages/gatsby/src/recipes/parser/extract-imports.js new file mode 100644 index 0000000000000..6ff9876371549 --- /dev/null +++ b/packages/gatsby/src/recipes/parser/extract-imports.js @@ -0,0 +1,44 @@ +const {declare} = require('@babel/helper-plugin-utils') +const babel = require('@babel/standalone') + +class BabelPluginExtractImportNames { + constructor() { + const names = {} + this.state = names + + this.plugin = declare(api => { + api.assertVersion(7) + + return { + visitor: { + ImportDeclaration(path) { + const source = path.node.source.value + path.traverse({ + Identifier(path) { + if (path.key === 'local') { + names[path.node.name] = source + } + } + }) + } + } + } + }) + } +} + +module.exports = src => { + try { + const plugin = new BabelPluginExtractImportNames() + babel.transform(src, { + configFile: false, + plugins: [plugin.plugin] + }) + return plugin.state + } catch (e) { + console.log(e) + return {} + } +} + +module.exports.BabelPluginExtractImportNames = BabelPluginExtractImportNames diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js new file mode 100644 index 0000000000000..d9044e5d0e797 --- /dev/null +++ b/packages/gatsby/src/recipes/parser/index.js @@ -0,0 +1,186 @@ +const unified = require(`unified`) +const remarkMdx = require(`remark-mdx`) +const remarkParse = require(`remark-parse`) +const remarkStringify = require(`remark-stringify`) +const visit = require(`unist-util-visit`) +const fetch = require('node-fetch') +const fs = require('fs-extra') +const isUrl = require('is-url') +const path = require('path') + +const extractImports = require('./extract-imports') +const removeElementByName = require('./remove-element-by-name') +const jsxToJson = require(`./jsx-to-json`) + +const asRoot = nodes => { + return { + type: `root`, + children: nodes, + } +} + +const toJson = value => { + const obj = {} + jsxToJson(value).forEach(([type, props = {}]) => { + if (type === `\n`) { + return + } + obj[type] = obj[type] || [] + obj[type].push(props) + }) + return obj +} + +const extractCommands = steps => { + const commands = steps + .map(nodes => { + const stepAst = asRoot(nodes) + let cmds = [] + visit(stepAst, `jsx`, node => { + const jsx = node.value + cmds = cmds.concat(toJson(jsx)) + }) + return cmds + }) + .reduce((acc, curr) => { + const cmdByName = {} + curr.map(v => { + Object.entries(v).forEach(([key, value]) => { + cmdByName[key] = cmdByName[key] || [] + cmdByName[key] = cmdByName[key].concat(value) + }) + }) + return [...acc, cmdByName] + }, []) + + return commands +} + +const u = unified() + .use(remarkParse) + .use(remarkStringify) + .use(remarkMdx) + +const handleImports = tree => { + let imports = {} + visit(tree, 'import', async (node, index, parent) => { + imports = { ...imports, ...extractImports(node.value) } + parent.children.splice(index, 1) + }) + return imports +} + +const unwrapImports = async (tree, imports) => { + return new Promise((resolve, reject) => { + let count = 0 + + visit(tree, 'jsx', () => { + count++ + }) + + if (count === 0) { + return resolve() + } + + visit(tree, 'jsx', async (node, index, parent) => { + const names = toJson(node.value) + const _newValue = removeElementByName(node.value, { names: Object.keys(imports) }) + + if (names) { + Object.keys(names).map(async name => { + const url = imports[name] + if (!url) { + return resolve() + } + + const result = await fetch(url) + const mdx = await result.text() + const nodes = u.parse(mdx).children + parent.children.splice(index, 1, nodes) + parent.children = parent.children.flat() + resolve() + }) + } + }) + }) +} + +const partitionSteps = ast => { + const steps = [] + let index = 0 + ast.children.forEach(node => { + if (node.type === `thematicBreak`) { + index++ + return + } + + steps[index] = steps[index] || [] + steps[index].push(node) + }) + + return steps +} + +const toMdx = nodes => { + const stepAst = asRoot(nodes) + return u.stringify(stepAst) +} + +const toMdxWithoutJsx = nodes => { + const stepAst = asRoot(nodes) + visit(stepAst, `jsx`, (node, index, parent) => { + parent.children.splice(index, 1) + }) + return u.stringify(stepAst) +} + +const parse = async src => { + const ast = u.parse(src) + const imports = handleImports(ast) + await unwrapImports(ast, imports) + const steps = partitionSteps(ast) + + return { + ast, + steps, + commands: extractCommands(steps), + stepsAsMdx: steps.map(toMdx), + stepsAsMdxWithoutJsx: steps.map(toMdxWithoutJsx), + } +} + +const isRelative = path => { + if (path.slice(0, 1) == `.`) { + return true + } + + return false +} + +const getSource = async (pathOrUrl, projectRoot) => { + let recipePath + if (isUrl(pathOrUrl)) { + const result = await fetch(pathOrUrl) + const src = await result.text() + return src + } + if (isRelative(pathOrUrl)) { + recipePath = path.join(projectRoot, pathOrUrl) + } else { + recipePath = path.join(__dirname, pathOrUrl) + } + if (recipePath.slice(-4) !== `.mdx`) { + recipePath += `.mdx` + } + + const src = await fs.readFile(recipePath, 'utf8') + return src +} + +module.exports = async (recipePath, projectRoot) => { + const src = await getSource(recipePath, projectRoot) + const result = await parse(src) + return result +} + +module.exports.parse = parse \ No newline at end of file diff --git a/packages/gatsby/src/recipes/jsx-to-json.js b/packages/gatsby/src/recipes/parser/jsx-to-json.js similarity index 92% rename from packages/gatsby/src/recipes/jsx-to-json.js rename to packages/gatsby/src/recipes/parser/jsx-to-json.js index 094f2a1777b7b..e764ee2d80cb9 100644 --- a/packages/gatsby/src/recipes/jsx-to-json.js +++ b/packages/gatsby/src/recipes/parser/jsx-to-json.js @@ -55,6 +55,10 @@ const getAttributeValue = expression => { return entries } + if (expression.type === 'Identifier') { + return expression.name + } + // Unsupported type throw new SyntaxError(`${expression.type} is not supported`) } @@ -119,10 +123,15 @@ const jsxToJson = input => { `${input}` ) - if (parsed.body[0]) { - return parsed.body[0].expression.children - .map(getNode) - .filter(child => child) + try { + if (parsed.body[0]) { + return parsed.body[0].expression.children + .map(getNode) + .filter(child => child) + } + } catch (e) { + console.log(input) + console.log(e) } return [] diff --git a/packages/gatsby/src/recipes/parser/parser.test.js b/packages/gatsby/src/recipes/parser/parser.test.js new file mode 100644 index 0000000000000..d3be0a5fbe948 --- /dev/null +++ b/packages/gatsby/src/recipes/parser/parser.test.js @@ -0,0 +1,37 @@ +const fs = require(`fs-extra`) +const path = require(`path`) + +const parser = require(`.`) + +const fixturePath = path.join(__dirname, `../prettier-git-hook.mdx`) +const fixtureSrc = fs.readFileSync(fixturePath, `utf8`) + +test(`returns a set of commands`, async () => { + const result = await parser.parse(fixtureSrc) + + expect(result.commands).toMatchSnapshot() +}) + +test(`partitions the MDX into steps`, async () => { + const result = await parser.parse(fixtureSrc) + + expect(result.stepsAsMdx).toMatchSnapshot() +}) + +test(`handles imports from urls`, async () => { + const result = await parser.parse(` +import TestRecipe from 'https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx' + +# Here is an imported recipe from a url! + + +`) + +expect(result.stepsAsMdx).toMatchSnapshot() +}) + +test(`fetches MDX from a url`, async () => { + const result = await parser('https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx') + + expect(result.commands).toMatchSnapshot() +}) diff --git a/packages/gatsby/src/recipes/react-standard-props.js b/packages/gatsby/src/recipes/parser/react-standard-props.js similarity index 100% rename from packages/gatsby/src/recipes/react-standard-props.js rename to packages/gatsby/src/recipes/parser/react-standard-props.js diff --git a/packages/gatsby/src/recipes/parser/remove-element-by-name.js b/packages/gatsby/src/recipes/parser/remove-element-by-name.js new file mode 100644 index 0000000000000..3d805caa3ec4b --- /dev/null +++ b/packages/gatsby/src/recipes/parser/remove-element-by-name.js @@ -0,0 +1,35 @@ +const {declare} = require('@babel/helper-plugin-utils') +const babel = require('@babel/standalone') +const jsxSyntax = require('@babel/plugin-syntax-jsx') + +const BabelPluginRemoveElementByName = (api, { names }) => { + const {types: t} = api + + return { + visitor: { + JSXElement(path) { + if (names.includes(path.node.openingElement.name.name)) { + path.remove() + } + } + } + } +} + +module.exports = (src, options) => { + try { + const { code } = babel.transform(`<>${src}`, { + configFile: false, + plugins: [ + [BabelPluginRemoveElementByName, options], + jsxSyntax + ] + }) + + return code.replace(/^<>/, '').replace(/<\/>;$/, '') + } catch (e) { + console.log(e) + } +} + +module.exports.BabelPluginRemoveElementByName = BabelPluginRemoveElementByName diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index a4b7faa604c73..7460bf90dbcd6 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -69,6 +69,7 @@ module.exports.plan = async ({ root }, { id, name, value }) => { currentState: JSON.stringify(currentState, null, 2), newState: JSON.stringify(newState, null, 2), describe: `Add ${key} to package.json`, + diff: '' // TODO: Make diff } } diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index 6412612ff94a4..f2bfe3a934525 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -51,12 +51,13 @@ const destroy = async ({ root }, { name }) => { const schema = { name: Joi.string(), command: Joi.string(), + ...resourceSchema } const validate = resource => Joi.validate(resource, schema, { abortEarly: false }) exports.schema = schema -exports.validate = resource => Joi.validate(resource, schema) +exports.validate = validate module.exports.all = async ({ root }) => { const pkg = await readPackageJson(root) diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index 9acf6394d4cb5..b76d6d24356cb 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -3,18 +3,48 @@ const { Machine, assign } = require(`xstate`) const createPlan = require(`./create-plan`) const applyPlan = require(`./apply-plan`) const validateRecipe = require(`./validate-recipe`) +const parser = require('./parser') const recipeMachine = Machine( { id: `recipe`, - initial: `validatePlan`, + initial: `parsingRecipe`, context: { + recipePath: null, + projectRoot: null, currentStep: 0, steps: [], plan: [], stepResources: [], + stepsAsMdx: [] }, states: { + parsingRecipe: { + invoke: { + id: `parseRecipe`, + src: async (context, event) => { + let parsed + if (context.src) { + parsed = await parser.parse(context.src) + } else { + parsed = await parser(context.recipePath, context.projectRoot) + } + + return parsed + }, + onError: { + target: `doneError`, + actions: assign({ error: (context, event) => event.data }) + }, + onDone: { + target: `validatePlan`, + actions: assign({ + steps: (context, event) => event.data.commands, + stepsAsMdx: (context, event) => event.data.stepsAsMdx + }) + } + } + }, validatePlan: { invoke: { id: `validatePlan`, diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 10b4eaf76385f..8e90ddae1abaf 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -6,7 +6,9 @@ const recipeMachine = require(`./recipe-machine`) it(`should create empty plan when the step has no resources`, done => { const initialContext = { - steps: [{}, {}, {}], + src: ` +# Hello, world! + `, currentStep: 0, } const service = interpret( @@ -24,7 +26,11 @@ it(`should create empty plan when the step has no resources`, done => { it(`should create plan for File resources`, done => { const initialContext = { - steps: [{ File: [{ path: `./hi.md`, content: `#yo` }] }], + src: ` +# File! + + + `, currentStep: 0, } const service = interpret( @@ -63,7 +69,11 @@ it(`it should error if part of the recipe fails validation`, done => { it(`it should switch to done after the final apply step`, done => { const filePath = `./hi.md` const initialContext = { - steps: [{ File: [{ path: filePath, content: `#yo` }] }, {}, {}], + src: ` +# File! + + + `, currentStep: 0, } const service = interpret( @@ -91,16 +101,16 @@ it(`should store created/changed/deleted resources on the context after applying const filePath2 = `./hi2.md` const filePath3 = `./hi3.md` const initialContext = { - steps: [ - { - File: [ - { path: filePath, content: `#yo` }, - { path: filePath3, content: `#yo` }, - ], - }, - { File: [{ path: filePath2, content: `#yo` }] }, - {}, - ], + src: ` +# File! + + + + +--- + + + `, currentStep: 0, } const service = interpret( @@ -125,3 +135,24 @@ it(`should store created/changed/deleted resources on the context after applying service.start() }) + +it.skip(`should create a plan from a url`, () => { + const url = 'https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx' + const initialContext = { + recipePath: url, + currentStep: 0, + } + + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `present plan`) { + console.log(state.context) + expect(state.context.plan).toMatchSnapshot() + service.stop() + done() + } + }) + + service.start() +}) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 62c8dd013fa4d..5ebf75fce91c2 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -8,18 +8,13 @@ - [x] Then run the CLI - [x] Clean up server after -## Near future - -- [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) -- [ ] Document the supported components and trivial guide on recipe authoring (help) -- [ ] Move to more random port - ## alpha - [x] Handle `dev` in NPMPackage - [x] add Joi for validating resource objects - [x] handle template strings in JSX parser - [x] Step by step design +- [ ] Make port selection dynamic - [x] Use `fs-extra` - [x] Handle object style plugins - [x] Improve gatsby-config test @@ -30,6 +25,20 @@ - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done +- [x] reasonably test resources +- [x] add Joi for validating resource objects +- [ ] handle error states +- [x] handle template strings in JSX parser +- [ ] integration test for each resource (read, create, update, delete) +- [ ] finish shadow file +- [ ] run recipe from url +- [ ] Move parsing to the server +- [ ] Implement config object for GatsbyPlugin +- [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } +- [ ] Gatsby recipes list (design and implementation) +- [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` +- [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) +- [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] handle error states - [ ] have File only pull from remote files for now until multiline strings work in MDX - [ ] diff all resource changes @@ -41,10 +50,9 @@ ## Near-ish future - [ ] Make a proper "Config" provider to add recipes dir, store data, etc. -- [ ] Move parsing to the server - [ ] init.js for providers to setup clients - [ ] validate resource config - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Select input supported recipes - [ ] Refactor resource state to use Redux & record runs in local db -- [ ] move creating the validate function to core and out of resources — they just declare their schema +- [ ] move creating the validate function to core and out of resources — they just declare their schema \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 219b0871cd64c..20918b1e9133c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1107,6 +1107,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-destructuring@^7.5.0": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-destructuring@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" @@ -1846,6 +1853,11 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/standalone@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.9.5.tgz#aba82195a39a8ed8ae56eacff72cf2bda551a7c3" + integrity sha512-J6mHRjRUh4pKCd1uz5ghF2LpUwMuGwxy4z+TM+jbvt0dM6NiXd8Z2UOD1ftmGfkuAuDYlgcz4fm62MIjt8iUlg== + "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" @@ -3585,16 +3597,59 @@ unist-builder "2.0.3" unist-util-visit "2.0.2" +"@mdx-js/mdx@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.8.tgz#40740eaf0b0007b461cee8df13a7ae5a1af8064a" + integrity sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA== + dependencies: + "@babel/core" "7.8.4" + "@babel/plugin-syntax-jsx" "7.8.3" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "^1.5.8" + babel-plugin-apply-mdx-type-prop "^1.5.8" + babel-plugin-extract-import-names "^1.5.8" + camelcase-css "2.0.1" + detab "2.0.3" + hast-util-raw "5.0.2" + lodash.uniq "4.5.0" + mdast-util-to-hast "7.0.0" + remark-mdx "^1.5.8" + remark-parse "7.0.2" + remark-squeeze-paragraphs "3.0.4" + style-to-object "0.3.0" + unified "8.4.2" + unist-builder "2.0.3" + unist-util-visit "2.0.2" + "@mdx-js/react@^1.5.7": version "1.5.7" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.7.tgz#dd7e08c9cdd3c3af62c9594c2c9003a3d05e34fd" integrity sha512-OxX/GKyVlqY7WqyRcsIA/qr7i1Xq3kAVNUhSSnL1mfKKNKO+hwMWcZX4WS2OItLtoavA2/8TVDHpV/MWKWyfvw== +"@mdx-js/react@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.8.tgz#fc38fe0eb278ae24666b2df3c751e726e33f5fac" + integrity sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg== + +"@mdx-js/runtime@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.5.8.tgz#e1d3672816925f58fe60970b49d35b1de80fd3cf" + integrity sha512-eiF6IOv8+FuUp1Eit5hRiteZ658EtZtqTc1hJ0V9pgBqmT0DswiD/8h1M5+kWItWOtNbvc6Cz7oHMHD3PrfAzA== + dependencies: + "@mdx-js/mdx" "^1.5.8" + "@mdx-js/react" "^1.5.8" + buble-jsx-only "^0.19.8" + "@mdx-js/util@^1.5.7": version "1.5.7" resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.7.tgz#335358feb2d511bfdb3aa46e31752a10aa51270a" integrity sha512-SV+V8A+Y33pmVT/LWk/2y51ixIyA/QH1XL+nrWAhoqre1rFtxOEZ4jr0W+bKZpeahOvkn/BQTheK+dRty9o/ig== +"@mdx-js/util@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.8.tgz#cbadda0378af899c17ce1aa69c677015cab28448" + integrity sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ== + "@mikaelkristiansson/domready@^1.0.10": version "1.0.10" resolved "https://registry.yarnpkg.com/@mikaelkristiansson/domready/-/domready-1.0.10.tgz#f6d69866c0857664e70690d7a0bfedb72143adb5" @@ -4346,6 +4401,13 @@ semver "^6.3.0" tsutils "^3.17.1" +"@urql/core@^1.10.8": + version "1.10.8" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.10.8.tgz#bf9ca3baf3722293fade7481cd29c1f5049b9208" + integrity sha512-lScBVB7N4aij3SXtIMrRo+rcYJavi/Y53YSuhj4/bGhlxogSq+4nbd3UjnUXer2hIfaTEi0egLnqjE5cW5WQVQ== + dependencies: + wonka "^4.0.9" + "@verdaccio/commons-api@^9.3.2": version "9.3.2" resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-9.3.2.tgz#7ce1e2c694fb6ca4f5a7cbc2b4445f3019d7e950" @@ -4553,6 +4615,19 @@ dependencies: tslib "^1.9.3" +"@xstate/graph@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@xstate/graph/-/graph-1.0.0.tgz#657168ce35001bb915d419dc2bea9cd89d17b038" + integrity sha512-QinBh+O7CEqqb//SSeJU++tdKex635Hzx0xCgF+yYtDs0RIx99qscRJXlIr2mjaV1g0c/j9wAgc/ZChd6mzgDA== + +"@xstate/test@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@xstate/test/-/test-0.3.0.tgz#366ffd9eb349a5244d8e6d085d85b86879f4bca7" + integrity sha512-s9QlyyER/ox606+Ihw0TlQBDniU+OIveS1VQtm56FL+kKbUQGHO0NTBXX33z18MjrFt2hmmjgehs3wHB0RQ6sg== + dependencies: + "@xstate/graph" "^1.0.0" + chalk "^2.4.2" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4637,6 +4712,11 @@ accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0, acorn-globals@^4.3.0, acorn-globals@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" @@ -4670,6 +4750,11 @@ acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^6.0.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" @@ -4950,7 +5035,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: +anymatch@^3.0.1, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -5554,6 +5639,14 @@ babel-plugin-apply-mdx-type-prop@^1.5.7: "@babel/helper-plugin-utils" "7.8.3" "@mdx-js/util" "^1.5.7" +babel-plugin-apply-mdx-type-prop@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz#f5ff6d9d7a7fcde0e5f5bd02d3d3cd10e5cca5bf" + integrity sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA== + dependencies: + "@babel/helper-plugin-utils" "7.8.3" + "@mdx-js/util" "^1.5.8" + babel-plugin-dev-expression@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz#c18de18a06150f9480edd151acbb01d2e65e999b" @@ -5589,6 +5682,13 @@ babel-plugin-extract-import-names@^1.5.7: dependencies: "@babel/helper-plugin-utils" "7.8.3" +babel-plugin-extract-import-names@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz#418057261346451d689dff5036168567036b8cf6" + integrity sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g== + dependencies: + "@babel/helper-plugin-utils" "7.8.3" + babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -5797,7 +5897,7 @@ babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" -backo2@1.0.2: +backo2@1.0.2, backo2@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -6115,7 +6215,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -6267,6 +6367,19 @@ btoa-lite@^1.0.0: resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= +buble-jsx-only@^0.19.8: + version "0.19.8" + resolved "https://registry.yarnpkg.com/buble-jsx-only/-/buble-jsx-only-0.19.8.tgz#6e3524aa0f1c523de32496ac9aceb9cc2b493867" + integrity sha512-7AW19pf7PrKFnGTEDzs6u9+JZqQwM1VnLS19OlqYDhXomtFFknnoQJAPHeg84RMFWAvOhYrG7harizJNwUKJsA== + dependencies: + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.3" + minimist "^1.2.0" + regexpu-core "^4.5.4" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -6647,7 +6760,7 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6750,6 +6863,21 @@ cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" +chokidar@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" + integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== + dependencies: + anymatch "^3.0.1" + braces "^3.0.2" + glob-parent "^5.0.0" + is-binary-path "^2.1.0" + is-glob "^4.0.1" + normalize-path "^3.0.0" + readdirp "^3.1.1" + optionalDependencies: + fsevents "^2.0.6" + chokidar@3.3.1, chokidar@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" @@ -7122,6 +7250,11 @@ colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" +colors@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + colors@^1.1.2: version "1.3.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" @@ -7551,6 +7684,16 @@ cookies@0.8.0: depd "~2.0.0" keygrip "~1.1.0" +copy-and-watch@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/copy-and-watch/-/copy-and-watch-0.1.4.tgz#4fd6cb5f1d8df9dfd2725de5bad5a45b65b07097" + integrity sha512-fg44GQwBoBkDeHl7K/Euq8FrWKK28o40LwEAEonnF8+ta9mJGQ3F47OqeiPWpxo1b2m6Hz0KdfHSbpWesRoJIg== + dependencies: + chokidar "3.0.2" + colors "1.3.3" + glob "7.1.4" + glob-parent "5.0.0" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -8724,7 +8867,7 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff@^3.2.0: +diff@^3.2.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -10021,6 +10164,21 @@ execa@^3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + executable@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -10529,6 +10687,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" @@ -10914,7 +11081,7 @@ fsevents@^1.0.0, fsevents@^1.2.7: nan "^2.9.2" node-pre-gyp "^0.10.0" -fsevents@~2.1.2: +fsevents@^2.0.6, fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== @@ -11139,6 +11306,17 @@ git-config-path@^1.0.1: fs-exists-sync "^0.1.0" homedir-polyfill "^1.0.0" +git-diff@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/git-diff/-/git-diff-2.0.6.tgz#4a8ece670d64d1f9f4e68191ad8b1013900f6c1e" + integrity sha512-/Iu4prUrydE3Pb3lCBMbcSNIf81tgGt0W1ZwknnyF62t3tHmtiJTRj0f+1ZIhp3+Rh0ktz1pJVoa7ZXUCskivA== + dependencies: + chalk "^2.3.2" + diff "^3.5.0" + loglevel "^1.6.1" + shelljs "^0.8.1" + shelljs.exec "^1.1.7" + git-raw-commits@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" @@ -11230,6 +11408,13 @@ glob-base@^0.3.0: glob-parent "^2.0.0" is-glob "^2.0.0" +glob-parent@5.0.0, glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" @@ -11243,13 +11428,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" @@ -11293,25 +11471,25 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" +glob@7.1.4, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" dependencies: - fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" @@ -11741,6 +11919,13 @@ graphql-request@^1.5.0, graphql-request@^1.8.2: dependencies: cross-fetch "2.2.2" +graphql-subscriptions@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" + integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== + dependencies: + iterall "^1.2.1" + graphql-tools-fork@^8.9.6: version "8.9.6" resolved "https://registry.yarnpkg.com/graphql-tools-fork/-/graphql-tools-fork-8.9.6.tgz#7d84d07c7e6600c363854132bcca395e86455d40" @@ -11759,6 +11944,11 @@ graphql-type-json@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.4.tgz#545af27903e40c061edd30840a272ea0a49992f9" +graphql-type-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.1.tgz#47fca2b1fa7adc0758d165b33580d7be7a6cf548" + integrity sha512-1lPkUXQ2L8o+ERLzVAuc3rzc/E6pGF+6HnjihCVTK0VzR0jCuUd92FqNxoHdfILXqOn2L6b4y47TBxiPyieUVA== + graphql@^14.6.0: version "14.6.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49" @@ -12082,6 +12272,20 @@ hast-util-raw@5.0.1: xtend "^4.0.1" zwitch "^1.0.0" +hast-util-raw@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67" + integrity sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g== + dependencies: + hast-util-from-parse5 "^5.0.0" + hast-util-to-parse5 "^5.0.0" + html-void-elements "^1.0.0" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + hast-util-raw@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" @@ -12223,6 +12427,11 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoek@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + integrity sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ== + hoek@6.x.x: version "6.1.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" @@ -12323,6 +12532,11 @@ html-minifier@^4.0.0: relateurl "^0.2.7" uglify-js "^3.5.1" +html-tag-names@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.5.tgz#f537420c16769511283f8ae1681785fbc89ee0a9" + integrity sha512-aI5tKwNTBzOZApHIynaAwecLBv8TlZTEy/P4Sj2SzzAhBrGuI8yGZ0UIXVPQzOHGS+to2mjb04iy6VWt/8+d8A== + html-void-elements@^1.0.0, html-void-elements@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.3.tgz#956707dbecd10cf658c92c5d27fee763aa6aa982" @@ -12523,6 +12737,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +humanize-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/humanize-list/-/humanize-list-1.0.1.tgz#e7e719c60a5d5848e8e0a5ed5f0a885496c239fd" + integrity sha1-5+cZxgpdWEjo4KXtXwqIVJbCOf0= + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -12699,6 +12918,21 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-jsx@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-jsx/-/import-jsx-4.0.0.tgz#2f31fd8e884e14f136751448841ffd2d3144dce1" + integrity sha512-CnjJ2BZFJzbFDmYG5S47xPQjMlSbZLyLJuG4znzL4TdPtJBxHtFP1xVmR+EYX4synFSldiY3B6m00XkPM3zVnA== + dependencies: + "@babel/core" "^7.5.5" + "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-react-jsx" "^7.3.0" + caller-path "^2.0.0" + find-cache-dir "^3.2.0" + make-dir "^3.0.2" + resolve-from "^3.0.0" + rimraf "^3.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -12778,6 +13012,14 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" +ink-link@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ink-link/-/ink-link-1.1.0.tgz#e00bd68dfd163a9392baecc0808391fd07e6cfbb" + integrity sha512-a716nYz4YDPu8UOA2PwabTZgTvZa3SYB/70yeXVmTOKFAEdMbJyGSVeNuB7P+aM2olzDj9AGVchA7W5QytF9uA== + dependencies: + prop-types "^15.7.2" + terminal-link "^2.1.1" + ink-spinner@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ink-spinner/-/ink-spinner-3.0.1.tgz#7b4b206d2b18538701fd92593f9acabbfe308dce" @@ -13054,7 +13296,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-binary-path@~2.1.0: +is-binary-path@^2.1.0, is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== @@ -13069,6 +13311,14 @@ is-blank@1.0.0: is-empty "0.0.1" is-whitespace "^0.3.0" +is-blank@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-blank/-/is-blank-2.1.0.tgz#69a73d3c0d4f417dfffb207a2795c0f0e576de04" + integrity sha1-aac9PA1PQX3/+yB6J5XA8OV23gQ= + dependencies: + is-empty latest + is-whitespace latest + is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -13176,6 +13426,11 @@ is-empty@0.0.1: resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-0.0.1.tgz#09fdc3d649dda5969156c0853a9b76bd781c5a33" integrity sha1-Cf3D1kndpZaRVsCFOpt2vXgcWjM= +is-empty@latest: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" + integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s= + is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" @@ -13303,6 +13558,13 @@ is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" +is-newline@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-newline/-/is-newline-1.0.0.tgz#f0aac97cc9ac0b4b94af8c55a01cf3690f436e38" + integrity sha1-8KrJfMmsC0uUr4xVoBzzaQ9Dbjg= + dependencies: + newline-regex "^0.2.0" + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -13565,6 +13827,11 @@ is-upper-case@^1.1.0: dependencies: upper-case "^1.1.0" +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -13583,7 +13850,7 @@ is-whitespace-character@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" -is-whitespace@^0.3.0: +is-whitespace@^0.3.0, is-whitespace@latest: version "0.3.0" resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= @@ -13721,15 +13988,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -iterall@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" - -iterall@^1.3.0: +iterall@^1.2.1, iterall@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== +iterall@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -14280,6 +14547,13 @@ jimp@^0.9.6: core-js "^3.4.1" regenerator-runtime "^0.13.3" +joi2gql@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/joi2gql/-/joi2gql-1.3.1.tgz#79d3e3ab12eca0dc42bc1aab0278fd29dab53858" + integrity sha512-Xhym7M4uPyMB0JOnvV3qjdFP2xCncL8wGFnVCEJ4XfocGRCp2/zNv1nmaWOmxAgz84HsnuVYs9uxTt1fM9dSEw== + dependencies: + hoek "4.2.0" + joi@^14.3.1: version "14.3.1" resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" @@ -15555,7 +15829,7 @@ logalot@^2.0.0, logalot@^2.1.0: figures "^1.3.5" squeak "^1.0.0" -loglevel@^1.6.6: +loglevel@^1.6.1, loglevel@^1.6.6: version "1.6.7" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== @@ -15693,6 +15967,13 @@ magic-string@^0.25.2: dependencies: sourcemap-codec "^1.4.4" +magic-string@^0.25.3: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^1.0.0, make-dir@^1.2.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -15714,6 +15995,13 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-dir@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + dependencies: + semver "^6.0.0" + make-fetch-happen@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" @@ -15812,6 +16100,13 @@ markdown-table@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + markdown-toc@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/markdown-toc/-/markdown-toc-1.2.0.tgz#44a15606844490314afc0444483f9e7b1122c339" @@ -15899,6 +16194,13 @@ mdast-util-compact@^1.0.0: dependencies: unist-util-visit "^1.1.0" +mdast-util-compact@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" + integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== + dependencies: + unist-util-visit "^2.0.0" + mdast-util-definitions@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz#2b54ad4eecaff9d9fcb6bf6f9f6b68b232d77ca7" @@ -16640,6 +16942,11 @@ netlify-identity-widget@^1.5.6: resolved "https://registry.yarnpkg.com/netlify-identity-widget/-/netlify-identity-widget-1.5.6.tgz#b841d4d469ad37bdc47e876d87cc2926aba2c302" integrity sha512-DvWVUGuswOd+IwexKjzIpYcqYMrghmnkmflNqCQc4lG4KX55zE3fFjfXziCTr6LibP7hvZp37s067j5N3kRuyw== +newline-regex@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/newline-regex/-/newline-regex-0.2.1.tgz#4696d869045ee1509b83aac3a58d4a93bbed926e" + integrity sha1-RpbYaQRe4VCbg6rDpY1Kk7vtkm4= + next-tick@1, next-tick@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -17734,6 +18041,18 @@ parse-entities@^1.0.2, parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + 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" + parse-filepath@^1.0.1, parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -18118,7 +18437,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -19366,6 +19685,15 @@ read-package-tree@^5.1.6: read-package-json "^2.0.0" readdir-scoped-modules "^1.0.0" +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -19522,6 +19850,13 @@ readdirp@^2.0.0, readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + readdirp@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" @@ -19831,6 +20166,20 @@ remark-mdx@^1.5.7: remark-parse "7.0.2" unified "8.4.2" +remark-mdx@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.8.tgz#81fd9085e56ea534b977d08d6f170899138b3f38" + integrity sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ== + dependencies: + "@babel/core" "7.8.4" + "@babel/helper-plugin-utils" "7.8.3" + "@babel/plugin-proposal-object-rest-spread" "7.8.3" + "@babel/plugin-syntax-jsx" "7.8.3" + "@mdx-js/util" "^1.5.8" + is-alphabetical "1.0.4" + remark-parse "7.0.2" + unified "8.4.2" + remark-parse@7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" @@ -19994,6 +20343,26 @@ remark-stringify@^5.0.0: unherit "^1.0.4" xtend "^4.0.1" +remark-stringify@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.0.0.tgz#33423ab8bf3076fb197f4cf582aaaf866b531625" + integrity sha512-cABVYVloFH+2ZI5bdqzoOmemcz/ZuhQSH6W6ZNYnLojAUUn3xtX7u+6BpnYp35qHoGr2NFBsERV14t4vCIeW8w== + dependencies: + 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 "^2.0.0" + mdast-util-compact "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^3.0.0" + unherit "^1.0.4" + xtend "^4.0.1" + remark-toc@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-5.0.0.tgz#f1e13ed11062ad4d102b02e70168bd85015bf129" @@ -20065,7 +20434,7 @@ repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" -repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -21061,6 +21430,20 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shelljs.exec@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/shelljs.exec/-/shelljs.exec-1.1.8.tgz#6f3c8dd017cb96d2dea82e712b758eab4fc2f68c" + integrity sha512-vFILCw+lzUtiwBAHV8/Ex8JsFjelFMdhONIsgKNLgTzeRckp2AOYRQtHJE/9LhNvdMmE27AGtzWx0+DHpwIwSw== + +shelljs@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -21119,6 +21502,18 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simplified-jsx-to-json@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simplified-jsx-to-json/-/simplified-jsx-to-json-0.1.0.tgz#bb53de1c014a04a039d9e1f46e1fa0b5d77e8627" + integrity sha512-3bZyn0alS292ltfVqnM4pqaYRHVw6sTeVA9Zzs5LaBGVOfNSEatYo8R+yKO3B6/Fq7SV8Th4wXjoFZ9/TYDwvA== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + html-tag-names "^1.1.5" + is-string "^1.0.5" + style-to-object "^0.3.0" + svg-tag-names "^2.0.1" + sisteransi@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" @@ -21867,6 +22262,17 @@ stringify-entities@^2.0.0: is-decimal "^1.0.2" is-hexadecimal "^1.0.0" +stringify-entities@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.0.0.tgz#455abe501f8b7859ba5726a25a8872333c65b0a7" + integrity sha512-h7NJJIssprqlyjHT2eQt2W1F+MCcNmwPGlKb0bWEdET/3N44QN3QbUF/ueKCgAssyKRZ3Br9rQ7FcXjHr0qLHw== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.2" + is-hexadecimal "^1.0.0" + stringify-object@^3.2.2, stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -22089,6 +22495,17 @@ subfont@^4.2.0: urltools "^0.4.1" yargs "^14.2.0" +subscriptions-transport-ws@^0.9.16: + version "0.9.16" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" + integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + sudo-prompt@^8.2.0: version "8.2.5" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" @@ -22116,7 +22533,7 @@ supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== @@ -22131,6 +22548,19 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-tag-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-2.0.1.tgz#acf5655faaa2e4b173007599226b906be1b38a29" + integrity sha512-BEZ508oR+X/b5sh7bT0RqDJ7GhTpezjj3P1D4kugrOaPs6HijviWksoQ63PS81vZn0QCjZmVKjHDBniTo+Domg== + svgo@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -22210,7 +22640,7 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" -symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -22378,6 +22808,14 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.1.0.tgz#3aec444c07a7cf936e157c1dc224b590c3c7eef2" integrity sha512-I42EWhJ+2aeNQawGx1VtpO0DFI9YcfuvAMNIdKyf/6sRbHJ4P+ZQ/zIT87tE+ln1ymAGcCJds4dolfSAS0AcNg== +terminal-link@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -23219,6 +23657,13 @@ unist-util-remove@^1.0.0, unist-util-remove@^1.0.3: dependencies: unist-util-is "^3.0.0" +unist-util-remove@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488" + integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g== + dependencies: + unist-util-is "^4.0.0" + unist-util-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" @@ -23257,7 +23702,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.3" unist-util-is "^4.0.0" -unist-util-visit@2.0.2: +unist-util-visit@2.0.2, unist-util-visit@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7" integrity sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ== @@ -23465,6 +23910,14 @@ urltools@^0.4.1: underscore "^1.8.3" urijs "^1.18.2" +urql@^1.9.5: + version "1.9.6" + resolved "https://registry.yarnpkg.com/urql/-/urql-1.9.6.tgz#88590f1f54774190adbdd468457ee7779a60f2e5" + integrity sha512-n4RTViR0KuNlcz97pYBQ7ojZzEzhCYgylhhmhE2hOhlvb+bqEdt83ZymmtSnhw9Qi17Xc/GgSjE7itYw385JCA== + dependencies: + "@urql/core" "^1.10.8" + wonka "^4.0.9" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -23484,6 +23937,13 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -24197,6 +24657,11 @@ wmf@~1.0.1: resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.1.tgz#f8690f185651bf88d39f0a21ae3e51bb1ec9fae9" integrity sha512-Mgopbef6qEsZvGss8ke/hMLg2XCCkt6emB/bZlCez9Zve9hrOj0lsrh0ncrN6Tnv6h/UCNn5nOd1UjjssezrtA== +wonka@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.9.tgz#b21d93621e1d5f3b45ca96d99d03711c7c1f7c55" + integrity sha512-he7Nn1254ToUN03zLbJok6QxKdRJd46/QHm8nUcJNViXQnCutCuUgAbZvzoxrX+VXzGb4sCFolC4XhkHsmvdaA== + word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -24462,7 +24927,7 @@ ws@^7.0.0, ws@^7.1.2: dependencies: async-limiter "^1.0.0" -ws@^7.2.1: +ws@^7.2.1, ws@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== From 2d191c43805df51e6fad8ce6944a15a4c34faaaa Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 20:35:05 -0700 Subject: [PATCH 054/128] update todos --- packages/gatsby/src/recipes/todo.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 5ebf75fce91c2..df201a22c455f 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -14,30 +14,30 @@ - [x] add Joi for validating resource objects - [x] handle template strings in JSX parser - [x] Step by step design -- [ ] Make port selection dynamic - [x] Use `fs-extra` - [x] Handle object style plugins - [x] Improve gatsby-config test - [x] convert to xstate - [x] integration test for each resource (read, create, update, delete) - [x] validate Resource component props. +- [x] reasonably test resources +- [x] add Joi for validating resource objects +- [x] handle error states +- [x] handle template strings in JSX parser +- [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) +- [x] Move parsing to the server +- [ ] Make port selection dynamic - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done -- [x] reasonably test resources -- [x] add Joi for validating resource objects -- [ ] handle error states -- [x] handle template strings in JSX parser - [ ] integration test for each resource (read, create, update, delete) - [ ] finish shadow file - [ ] run recipe from url -- [ ] Move parsing to the server - [ ] Implement config object for GatsbyPlugin - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } - [ ] Gatsby recipes list (design and implementation) - [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` -- [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) - [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] handle error states - [ ] have File only pull from remote files for now until multiline strings work in MDX @@ -55,4 +55,4 @@ - [ ] Theme UI preset selection (runs dependent install and file write) - [ ] Select input supported recipes - [ ] Refactor resource state to use Redux & record runs in local db -- [ ] move creating the validate function to core and out of resources — they just declare their schema \ No newline at end of file +- [ ] move creating the validate function to core and out of resources — they just declare their schema From 0be2a5dde55bf9fb5ab2a2821baa9d72bbf9787d Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:22:40 -0700 Subject: [PATCH 055/128] Add support for file content on remote URLs --- packages/gatsby/src/recipes/cli.js | 76 +++++++++++-------- packages/gatsby/src/recipes/graphql.js | 5 +- packages/gatsby/src/recipes/parser/index.js | 37 ++++----- .../gatsby/src/recipes/providers/fs/file.js | 29 ++++++- .../src/recipes/providers/gatsby/plugin.js | 2 +- packages/gatsby/src/recipes/todo.md | 2 + 6 files changed, 95 insertions(+), 56 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 25ee27d4890f6..d34f60573b014 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -163,12 +163,13 @@ module.exports = ({ recipe, projectRoot }) => { try { await createOperation({ recipePath: recipe, projectRoot }) } catch (e) { - log('error creating operation', e) + log(`error creating operation`, e) } } - const state = (subscriptionResponse.data && - JSON.parse(subscriptionResponse.data.operation.state)) + const state = + subscriptionResponse.data && + JSON.parse(subscriptionResponse.data.operation.state) useInput((_, key) => { setLastKeyPress(key) @@ -181,10 +182,14 @@ module.exports = ({ recipe, projectRoot }) => { } }) - log('subscriptionResponse.data', subscriptionResponse.data) + log(`subscriptionResponse.data`, subscriptionResponse.data) if (!state) { - return Loading recipe + return ( + + Loading recipe + + ) } /* * TODOs @@ -233,7 +238,7 @@ module.exports = ({ recipe, projectRoot }) => { if (!isPlan || !isPresetPlanState) { return ( -
    +
    Press enter to continue
    ) @@ -250,7 +255,7 @@ module.exports = ({ recipe, projectRoot }) => {
    {p.resourceName}: * {p.describe} - {p.diff !== `` && ( + {p.diff && p.diff !== `` && ( <> --- {p.diff} @@ -292,31 +297,38 @@ module.exports = ({ recipe, projectRoot }) => { const Error = ({ state }) => { log(`errors`, state) if (state && state.context && state.context.error) { - return ( -
    - - The following resources failed validation - - {state.context.error.map((err, i) => { - log(`recipe er`, { err }) - return ( -
    - Type: {err.resource} - - Resource: {JSON.stringify(err.resourceDeclaration, null, 4)} - - Recipe step: {err.step} - - Error{err.validationError.details.length > 1 && `s`}: - - {err.validationError.details.map((d, v) => ( - ‣ {d.message} - ))} -
    - ) - })} -
    - ) + if (false) { + return ( +
    + + The following resources failed validation + + {state.context.error.map((err, i) => { + log(`recipe er`, { err }) + return ( +
    + Type: {err.resource} + + Resource:{` `} + {JSON.stringify(err.resourceDeclaration, null, 4)} + + Recipe step: {err.step} + + Error{err.validationError.details.length > 1 && `s`}: + + {err.validationError.details.map((d, v) => ( + ‣ {d.message} + ))} +
    + ) + })} +
    + ) + } else { + return ( + {JSON.stringify(state.context.error, null, 2)} + ) + } } return null diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index f7e8f89f3de83..7e4c0ce3786b4 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -12,7 +12,7 @@ const { SubscriptionServer } = require(`subscriptions-transport-ws`) const { createServer } = require(`http`) const { interpret } = require(`xstate`) const pkgDir = require(`pkg-dir`) -const cors = require('cors') +const cors = require(`cors`) const recipeMachine = require(`./recipe-machine`) const createTypes = require(`./create-types`) @@ -32,7 +32,6 @@ const emitOperation = state => { // only one service can run at a time. let service const applyPlan = ({ recipePath, projectRoot }) => { - const initialState = { context: { recipePath, projectRoot, steps: [], currentStep: 0 }, value: `init`, @@ -95,7 +94,7 @@ const rootMutationType = new GraphQLObjectType({ type: GraphQLString, args: { recipePath: { type: GraphQLString }, - projectRoot: { type: GraphQLString } + projectRoot: { type: GraphQLString }, }, resolve: (_data, args) => { console.log(`received operation`, args.recipePath) diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js index d9044e5d0e797..752a184e00661 100644 --- a/packages/gatsby/src/recipes/parser/index.js +++ b/packages/gatsby/src/recipes/parser/index.js @@ -3,13 +3,13 @@ const remarkMdx = require(`remark-mdx`) const remarkParse = require(`remark-parse`) const remarkStringify = require(`remark-stringify`) const visit = require(`unist-util-visit`) -const fetch = require('node-fetch') -const fs = require('fs-extra') -const isUrl = require('is-url') -const path = require('path') +const fetch = require(`node-fetch`) +const fs = require(`fs-extra`) +const isUrl = require(`is-url`) +const path = require(`path`) -const extractImports = require('./extract-imports') -const removeElementByName = require('./remove-element-by-name') +const extractImports = require(`./extract-imports`) +const removeElementByName = require(`./remove-element-by-name`) const jsxToJson = require(`./jsx-to-json`) const asRoot = nodes => { @@ -63,18 +63,18 @@ const u = unified() const handleImports = tree => { let imports = {} - visit(tree, 'import', async (node, index, parent) => { + visit(tree, `import`, async (node, index, parent) => { imports = { ...imports, ...extractImports(node.value) } parent.children.splice(index, 1) }) return imports } -const unwrapImports = async (tree, imports) => { - return new Promise((resolve, reject) => { +const unwrapImports = async (tree, imports) => + new Promise((resolve, reject) => { let count = 0 - visit(tree, 'jsx', () => { + visit(tree, `jsx`, () => { count++ }) @@ -82,17 +82,19 @@ const unwrapImports = async (tree, imports) => { return resolve() } - visit(tree, 'jsx', async (node, index, parent) => { + visit(tree, `jsx`, async (node, index, parent) => { const names = toJson(node.value) - const _newValue = removeElementByName(node.value, { names: Object.keys(imports) }) - + const _newValue = removeElementByName(node.value, { + names: Object.keys(imports), + }) + if (names) { Object.keys(names).map(async name => { const url = imports[name] if (!url) { return resolve() } - + const result = await fetch(url) const mdx = await result.text() const nodes = u.parse(mdx).children @@ -103,7 +105,6 @@ const unwrapImports = async (tree, imports) => { } }) }) -} const partitionSteps = ast => { const steps = [] @@ -167,13 +168,13 @@ const getSource = async (pathOrUrl, projectRoot) => { if (isRelative(pathOrUrl)) { recipePath = path.join(projectRoot, pathOrUrl) } else { - recipePath = path.join(__dirname, pathOrUrl) + recipePath = path.join(__dirname, `../`, pathOrUrl) } if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` } - const src = await fs.readFile(recipePath, 'utf8') + const src = await fs.readFile(recipePath, `utf8`) return src } @@ -183,4 +184,4 @@ module.exports = async (recipePath, projectRoot) => { return result } -module.exports.parse = parse \ No newline at end of file +module.exports.parse = parse diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index c288626624e97..654ef8f7530e7 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -2,6 +2,8 @@ const fs = require(`fs-extra`) const path = require(`path`) const mkdirp = require(`mkdirp`) const Joi = require(`@hapi/joi`) +const isUrl = require(`is-url`) +const fetch = require(`node-fetch`) const getDiff = require(`../utils/get-diff`) const resourceSchema = require(`../resource-schema`) @@ -17,13 +19,30 @@ const fileExists = fullPath => { } } +const downloadFile = async (url, filePath) => + fetch(url).then( + res => + new Promise((resolve, reject) => { + const dest = fs.createWriteStream(filePath) + res.body.pipe(dest) + dest.on(`finish`, () => { + resolve(true) + }) // not sure why you want to pass a boolean + dest.on(`error`, reject) // don't forget this! + }) + ) + const create = async ({ root }, { id, path: filePath, content }) => { const fullPath = makePath(root, filePath) const { dir } = path.parse(fullPath) await mkdirp(dir) - await fs.writeFile(fullPath, content) + if (isUrl(content)) { + await downloadFile(content, fullPath) + } else { + await fs.writeFile(fullPath, content) + } return await read({ root }, filePath) } @@ -59,9 +78,15 @@ const destroy = async (context, fileResource) => { module.exports.plan = async (context, { id, path: filePath, content }) => { const currentResource = await read(context, filePath) + let newState = content + if (isUrl(content)) { + const res = await fetch(content) + newState = await res.text() + } + const plan = { currentState: (currentResource && currentResource.content) || ``, - newState: content, + newState, describe: `Write ${filePath}`, diff: ``, } diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.js index 27a10c7aea7c4..678b21d448377 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.js @@ -109,7 +109,7 @@ const read = async ({ root }, id) => { const name = getPluginsFromConfig(configSrc).find(name => name === id) if (name) { - return { id, name } + return { id, name, _message: `Installed ${id} in gatsby-config.js` } } else { return undefined } diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index df201a22c455f..930e319a93416 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -36,12 +36,14 @@ - [ ] run recipe from url - [ ] Implement config object for GatsbyPlugin - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } +- [ ] write tests for remote files src in File - [ ] Gatsby recipes list (design and implementation) - [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` - [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] handle error states - [ ] have File only pull from remote files for now until multiline strings work in MDX - [ ] diff all resource changes +- [ ] validate that the first step doesn't have any packages in it. - [ ] move code to its own package `gatsby-recipes` - [ ] handle not finding a recipe - [ ] write up testing doc ASAP so internal folks can try it From 793c3dec721147bcf30b20c810925c5c0cfca8c0 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:36:09 -0700 Subject: [PATCH 056/128] Add some basic docs & new emotion recipe --- packages/gatsby/src/recipes/README.md | 125 ++++++++++++++++++++++++ packages/gatsby/src/recipes/emotion.mdx | 36 +++++++ 2 files changed, 161 insertions(+) create mode 100644 packages/gatsby/src/recipes/README.md create mode 100644 packages/gatsby/src/recipes/emotion.mdx diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md new file mode 100644 index 0000000000000..9431cc7d3056b --- /dev/null +++ b/packages/gatsby/src/recipes/README.md @@ -0,0 +1,125 @@ +# Gatsby Recipes + +Gatsby Recipes is framework for automating common Gatsby tasks. Recipes are MDX +files which when run by our interpretor, perform common actions like installing +NPM packages, installing plugins, creating pages, etc. + +It's designed to be extensible so new capabilities can be added which allow +Recipes to automate more things. + +We chose MDX to allow for a literate programming style of writing recipes which +enables us to port our dozens of recipes from +https://www.gatsbyjs.org/docs/recipes/ as well as in the future, entire +tutorials. + +[Read more about Recipes on the RFC](https://github.com/gatsbyjs/gatsby/pull/22610) + +## How to write a recipe + +Let's write our first Recipe to setup Emotion on a Gatsby site. + +```mdx +# Setup Gatsby with Emotion + +[Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. + +--- + +Install necessary NPM packages + + + + + +--- + +Install the Emotion plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go. + +Let's also write out an example page you can use to play +with Emotion. + + + +--- + +Read more about Emotion on the official Emotion docs site: + +https://emotion.sh/docs/introduction +``` + +Let's try running out this Recipe! + +First create a new Hello World Gatsby site: + +`gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world` + +Upgrade the version of Gatsby installed to use one with Recipes. + +`yarn add gatsby@recipe` + +Now run the Emotion recipe and follow the commands. + +`gatsby recipes emotion` + +## Ways to run Recipes + +You can run built-in Recipes, ones you write locally, and ones people have posted online. + +To run a local recipe, make sure to start the path to the recipe with a period like `gatsby recipes ./my-cool-recipe.mdx` + +To run a remote recipe, just paste in the path to the recipe e.g. `gatsby recipes https://example.com/sweet-recipe.mdx` + +## How to write your own + +### API + +#### `` + +Installs a Gatsby Plugin in the site's `gatsby-config.js`. + +Soon will support options. + +```jsx + +``` + +##### props + +- **name** name of the plugin + +#### `` + +##### props + +- **name**: name of the package(s) to install. Takes a string or an array of strings. +- **version**: defaults to latest +- **dependencyType**: defaults to `dependency`. Other options include `devDependency` + +#### `` + +`` + +##### props + +- **name:** name of the command +- **command** the command that's run when the script is called + +#### `` + + + +##### props + +- **path** path to the file that should be created. The path is local to the root of the Node.js project (where the package.json is) +- **content** URL to the content that should be written to the path. Eventually we'll support directly putting content here after some fixees to MDX. diff --git a/packages/gatsby/src/recipes/emotion.mdx b/packages/gatsby/src/recipes/emotion.mdx new file mode 100644 index 0000000000000..bf53c3a76b0a2 --- /dev/null +++ b/packages/gatsby/src/recipes/emotion.mdx @@ -0,0 +1,36 @@ +# Setup Gatsby with Emotion + +[Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. + +--- + +Install necessary NPM packages + + + + + +--- + +Install the Emotion plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go. + +Let's also write out an example page you can use to play +with Emotion. + + + +--- + +Read more about Emotion on the official Emotion docs site: + +https://emotion.sh/docs/introduction + From de5e40c1bd79311c329bed730dc929234d635401 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:39:18 -0700 Subject: [PATCH 057/128] Small updates to README --- packages/gatsby/src/recipes/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index 9431cc7d3056b..d6eececf98796 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -14,6 +14,12 @@ tutorials. [Read more about Recipes on the RFC](https://github.com/gatsbyjs/gatsby/pull/22610) +There's an umbrella issue for testing / using Recipes during its incubation stage. + +Follow the issue for updates! + +https://github.com/gatsbyjs/gatsby/issues/22991 + ## How to write a recipe Let's write our first Recipe to setup Emotion on a Gatsby site. From 0d0367daaa102e01af1c6337a935f9ea3a2b7e8d Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:45:02 -0700 Subject: [PATCH 058/128] small fixes --- packages/gatsby/src/recipes/README.md | 2 +- .../gatsby/src/recipes/joi-to-graphql/methods/composeType.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index d6eececf98796..43f885eafb6a7 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -70,7 +70,7 @@ First create a new Hello World Gatsby site: Upgrade the version of Gatsby installed to use one with Recipes. -`yarn add gatsby@recipe` +`yarn add gatsby@recipes` Now run the Emotion recipe and follow the commands. diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js index 0220d53b0ebd2..d66fa17977a9a 100644 --- a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js +++ b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js @@ -1,7 +1,7 @@ "use strict" const Hoek = require(`hoek`) -const Joi = require(`joi`) +const Joi = require(`@hapi/joi`) const { joiToGraphql } = require(`../helpers`) const internals = {} From c36ecee7f3254b4fb37881245689b569b9df58a9 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:48:17 -0700 Subject: [PATCH 059/128] fix --- .../gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js index 47be6a04ba468..f2b6d8ceab1f8 100644 --- a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js +++ b/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js @@ -2,7 +2,7 @@ const { GraphQLObjectType, GraphQLSchema } = require(`graphql`) const Hoek = require(`hoek`) -const Joi = require(`joi`) +const Joi = require(`@hapi/joi`) const { typeDictionary } = require(`../helpers`) const internals = {} From ae665f0f2880efbde0136bf1784554689fd32a02 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 22:55:57 -0700 Subject: [PATCH 060/128] More todos --- packages/gatsby/src/recipes/todo.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 930e319a93416..ace6ba155ca45 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -58,3 +58,5 @@ - [ ] Select input supported recipes - [ ] Refactor resource state to use Redux & record runs in local db - [ ] move creating the validate function to core and out of resources — they just declare their schema +- [ ] gatsby-config.js hardening — make it work if there's no plugins set like in hello-world starter +- [ ] get latest version of npm packages so know if can skip running. From f4d5b2af51b3cc2b13f2d536f34c12c289e476e9 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 9 Apr 2020 23:13:51 -0700 Subject: [PATCH 061/128] Cleanup comments --- packages/gatsby/src/recipes/providers/fs/file.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 654ef8f7530e7..6394d2ffd6416 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -27,8 +27,8 @@ const downloadFile = async (url, filePath) => res.body.pipe(dest) dest.on(`finish`, () => { resolve(true) - }) // not sure why you want to pass a boolean - dest.on(`error`, reject) // don't forget this! + }) + dest.on(`error`, reject) }) ) From 7a0f08ba6d423530e2ebf666d0111401d68f4d80 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 10 Apr 2020 08:15:11 -0700 Subject: [PATCH 062/128] Add to docs about how to upgrade gatsby-cli --- packages/gatsby/src/recipes/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index 43f885eafb6a7..395f4181b5b79 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -68,6 +68,12 @@ First create a new Hello World Gatsby site: `gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world` +Meanwhile also upgrade the global gatsby-cli package to use the one with new recipes command. + +`npm install -g gatsby-cli@recipes` + +Once the global finishes installing, running `gatsby -v` should show this as your version: `Gatsby CLI version: 2.11.4-recipes.53` + Upgrade the version of Gatsby installed to use one with Recipes. `yarn add gatsby@recipes` From 22912c3e637b8c4ee1cac17a2d6a6d78c119fc3b Mon Sep 17 00:00:00 2001 From: John Otander Date: Fri, 10 Apr 2020 11:06:11 -0600 Subject: [PATCH 063/128] feat(recipes): Implement basic gitignore provider (#23003) * Begin implementing gitignore * feat(recipes): Implement basic gitignore provider --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/cli.js | 4 +- .../git/__snapshots__/ignore.test.js.snap | 50 ++++++ .../recipes/providers/git/fixtures/.gitignore | 1 + .../src/recipes/providers/git/ignore.js | 154 ++++++++++++++++++ .../src/recipes/providers/git/ignore.test.js | 34 ++++ packages/gatsby/src/recipes/resources.js | 2 + packages/gatsby/src/recipes/todo.md | 4 +- 8 files changed, 246 insertions(+), 4 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap create mode 100644 packages/gatsby/src/recipes/providers/git/fixtures/.gitignore create mode 100644 packages/gatsby/src/recipes/providers/git/ignore.js create mode 100644 packages/gatsby/src/recipes/providers/git/ignore.test.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index e25cd0954b12c..38bf8f6c465de 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -151,6 +151,7 @@ "sift": "^5.1.0", "signal-exit": "^3.0.2", "simplified-jsx-to-json": "^0.1.0", + "single-trailing-newline": "^1.0.0", "slugify": "^1.4.0", "socket.io": "^2.3.0", "stack-trace": "^0.0.10", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d34f60573b014..ce71d9f0f7a24 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,10 +1,8 @@ const fs = require(`fs`) -const path = require(`path`) -const { inspect } = require(`util`) const lodash = require(`lodash`) const React = require(`react`) -const { useState, useContext, useEffect } = require(`react`) +const { useState } = require(`react`) const { render, Box, Text, Color, useInput, useApp, Static } = require(`ink`) const Spinner = require(`ink-spinner`).default const Link = require(`ink-link`) diff --git a/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap b/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap new file mode 100644 index 0000000000000..5c794bd6b24f8 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap @@ -0,0 +1,50 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`git ignore resource e2e test: GitIgnore create 1`] = ` +Object { + "_message": "Added .cache to gitignore", + "id": ".cache", + "name": ".cache", +} +`; + +exports[`git ignore resource e2e test: GitIgnore create plan 1`] = ` +Object { + "currentState": "node_modules +", + "describe": "Add .cache to gitignore", + "diff": " node_modules ++.cache +", + "newState": "node_modules +.cache", +} +`; + +exports[`git ignore resource e2e test: GitIgnore destroy 1`] = ` +Object { + "id": ".cache", + "name": ".cache", +} +`; + +exports[`git ignore resource e2e test: GitIgnore update 1`] = ` +Object { + "_message": "Added .cache to gitignore", + "id": ".cache", + "name": ".cache", +} +`; + +exports[`git ignore resource e2e test: GitIgnore update plan 1`] = ` +Object { + "currentState": "node_modules +.cache +", + "describe": "Add .cache to gitignore", + "diff": "", + "newState": "node_modules +.cache +", +} +`; diff --git a/packages/gatsby/src/recipes/providers/git/fixtures/.gitignore b/packages/gatsby/src/recipes/providers/git/fixtures/.gitignore new file mode 100644 index 0000000000000..3c3629e647f5d --- /dev/null +++ b/packages/gatsby/src/recipes/providers/git/fixtures/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/packages/gatsby/src/recipes/providers/git/ignore.js b/packages/gatsby/src/recipes/providers/git/ignore.js new file mode 100644 index 0000000000000..3541a9135d7e9 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/git/ignore.js @@ -0,0 +1,154 @@ +const fs = require(`fs-extra`) +const path = require(`path`) +const Joi = require(`@hapi/joi`) +const isBlank = require('is-blank') +const singleTrailingNewline = require('single-trailing-newline') + +const getDiff = require(`../utils/get-diff`) +const resourceSchema = require(`../resource-schema`) + +const makePath = root => path.join(root, '.gitignore') + +const gitignoresAsArray = async root => { + const fullPath = makePath(root) + + if (!fileExists(fullPath)) { + return [] + } + + const ignoresStr = await fs.readFile(fullPath, `utf8`) + const ignores = ignoresStr.split('\n') + const last = ignores.pop() + + if (isBlank(last)) { + return ignores + } else { + return [...ignores, last] + } +} + +const ignoresToString = ignores => { + return singleTrailingNewline(ignores.map(n => n.name).join('\n')) +} + +const fileExists = fullPath => { + try { + fs.accessSync(fullPath, fs.constants.F_OK) + return true + } catch (e) { + return false + } +} + +const create = async ({ root }, { name }) => { + const fullPath = makePath(root) + + let ignores = await all({ root }) + + const exists = ignores.find(n => n.id === name) + if (!exists) { + ignores.push({ id: name, name }) + } + + await fs.writeFile(fullPath, ignoresToString(ignores)) + + const result = await read({ root }, name) + return result +} + +const update = async ({ root }, { id, name }) => { + const fullPath = makePath(root) + + let ignores = await all({ root }) + + const exists = ignores.find(n => n.id === id) + + if (!exists) { + ignores.push({ id, name }) + } else { + ignores = ignores.map(n => { + if (n.id === id) { + return { ...n, name } + } + + return n + }) + } + + await fs.writeFile(fullPath, ignoresToString(ignores)) + + return await read({ root }, name) +} + +const read = async (context, id) => { + const ignores = await gitignoresAsArray(context.root) + + const name = ignores.find(n => n === id) + + if (!name) { + return undefined + } + + const resource = { id, name } + resource._message = message(resource) + return resource +} + +const all = async context => { + const ignores = await gitignoresAsArray(context.root) + + return ignores.map((name, i) => { + const id = name || i.toString() // Handle newlines + return { id, name } + }) +} + +const destroy = async (context, { id, name }) => { + const fullPath = makePath(context.root) + + const ignores = await all(context) + const newIgnores = ignores.filter(n => n.id !== id) + + await fs.writeFile(fullPath, ignoresToString(newIgnores)) + + return { id, name } +} + +// TODO pass action to plan +module.exports.plan = async (context, args) => { + const name = args.id || args.name + + const currentResource = await all(context, args) || [] + const alreadyIgnored = currentResource.find(n => n.id === name) + + const contents = ignoresToString(currentResource) + + const plan = { + currentState: contents, + newState: alreadyIgnored ? contents : contents + name, + describe: `Add ${name} to gitignore`, + diff: ``, + } + + if (plan.currentState !== plan.newState) { + plan.diff = await getDiff(plan.currentState, plan.newState) + } + + return plan +} + +const message = resource => `Added ${resource.id || resource.name} to gitignore` + +const schema = { + name: Joi.string(), + ...resourceSchema, +} +exports.schema = schema +exports.validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) + +module.exports.create = create +module.exports.update = update +module.exports.read = read +module.exports.destroy = destroy +module.exports.all = all diff --git a/packages/gatsby/src/recipes/providers/git/ignore.test.js b/packages/gatsby/src/recipes/providers/git/ignore.test.js new file mode 100644 index 0000000000000..aa9fa46089c93 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/git/ignore.test.js @@ -0,0 +1,34 @@ +const path = require("path") +const ignore = require("./ignore") +const resourceTestHelper = require(`../resource-test-helper`) + +const root = path.join(__dirname, "fixtures") + +describe("git ignore resource", () => { + test(`e2e test`, async () => { + await resourceTestHelper({ + resourceModule: ignore, + resourceName: `GitIgnore`, + context: { root }, + initialObject: { name: ".cache" }, + partialUpdate: { id: ".cache", name: ".cache" }, + }) + }) + + test(`does not add duplicate entries`, async () => { + const name = "node_modules" + + await ignore.create({ root }, { name }) + + const result = await ignore.all({ root }) + + expect(result).toMatchInlineSnapshot(` + Array [ + Object { + "id": "node_modules", + "name": "node_modules", + }, + ] + `) + }) +}) diff --git a/packages/gatsby/src/recipes/resources.js b/packages/gatsby/src/recipes/resources.js index 2e98c4693af65..e0bc5c2756ff3 100644 --- a/packages/gatsby/src/recipes/resources.js +++ b/packages/gatsby/src/recipes/resources.js @@ -4,6 +4,7 @@ const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) const npmPackageResource = require(`./providers/npm/package`) const npmPackageScriptResource = require(`./providers/npm/script`) const npmPackageJsonResource = require(`./providers/npm/package-json`) +const gitIgnoreResource = require('./providers/git/ignore') const configResource = { create: () => {}, @@ -21,6 +22,7 @@ const componentResourceMapping = { NPMPackage: npmPackageResource, NPMScript: npmPackageScriptResource, NPMPackageJson: npmPackageJsonResource, + GitIgnore: gitIgnoreResource } module.exports = componentResourceMapping diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index ace6ba155ca45..ca6a4d6b28d25 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -33,7 +33,9 @@ - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] integration test for each resource (read, create, update, delete) - [ ] finish shadow file -- [ ] run recipe from url +- [x] run recipe from url +- [x] Move parsing to the server +- [x] imports from a url - [ ] Implement config object for GatsbyPlugin - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } - [ ] write tests for remote files src in File From 9a4695d009d17197a007c0145a2ea2eb722b2e81 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 10 Apr 2020 14:01:43 -0700 Subject: [PATCH 064/128] Move to jest-diff for faster diffing & more control --- packages/gatsby/package.json | 2 +- packages/gatsby/src/commands/recipes.ts | 3 +++ .../utils/__snapshots__/get-diff.test.js.snap | 13 ++++++++++ .../src/recipes/providers/utils/get-diff.js | 24 ++++++++++++------- .../recipes/providers/utils/get-diff.test.js | 18 ++++++++++++++ 5 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/utils/__snapshots__/get-diff.test.js.snap create mode 100644 packages/gatsby/src/recipes/providers/utils/get-diff.test.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 38bf8f6c465de..88129b0fedf86 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -87,7 +87,6 @@ "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", "gatsby-telemetry": "^1.2.3", - "git-diff": "^2.0.6", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -108,6 +107,7 @@ "is-string": "^1.0.5", "is-url": "^1.2.4", "is-wsl": "^2.1.1", + "jest-diff": "^25.3.0", "jest-worker": "^24.9.0", "joi2gql": "^1.3.1", "json-loader": "^0.5.7", diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 37206ed2c31b2..5797446649331 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -7,6 +7,9 @@ module.exports = async (program: IProgram): Promise => { const recipe = program._[1] telemetry.trackCli(`RECIPE_RUN`, { recipe }) + // const runRecipe = require(`../recipes/index`) + // runRecipe({ recipe, projectRoot: program.directory }) + // Start GraphQL serve let subprocess const scriptPath = path.join( diff --git a/packages/gatsby/src/recipes/providers/utils/__snapshots__/get-diff.test.js.snap b/packages/gatsby/src/recipes/providers/utils/__snapshots__/get-diff.test.js.snap new file mode 100644 index 0000000000000..a609d4281c715 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/utils/__snapshots__/get-diff.test.js.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`diffs strings by line with color codes 1`] = ` +"- Original - 1 ++ Modified + 1 + + + pizza +- super ++ + duper +" +`; diff --git a/packages/gatsby/src/recipes/providers/utils/get-diff.js b/packages/gatsby/src/recipes/providers/utils/get-diff.js index 42f88dafc35ea..75507efd176ee 100644 --- a/packages/gatsby/src/recipes/providers/utils/get-diff.js +++ b/packages/gatsby/src/recipes/providers/utils/get-diff.js @@ -1,5 +1,6 @@ -const gitDiff = require(`git-diff/async`) const isNewline = require(`is-newline`) +const { diffLinesUnified } = require(`jest-diff`) +const chalk = require(`chalk`) module.exports = async (oldString = `\n`, newString = `\n`) => { if (!isNewline(oldString.slice(-1))) { @@ -9,15 +10,20 @@ module.exports = async (oldString = `\n`, newString = `\n`) => { newString += `\n` } - let diff = await gitDiff(oldString, newString, { - color: true, - noHeaders: true, - flags: `--diff-algorithm=minimal`, - }) + const oldStringSplits = oldString.split(/\r?\n/) + const newStringSplits = newString.split(/\r?\n/) - if (!diff) { - diff = `` + const options = { + aAnnotation: `Original`, + bAnnotation: `Modified`, + aColor: chalk.red, + bColor: chalk.green, + includeChangeCounts: true, + contextLines: 3, + expand: false, } - return diff + const diffText = diffLinesUnified(oldStringSplits, newStringSplits, options) + + return diffText } diff --git a/packages/gatsby/src/recipes/providers/utils/get-diff.test.js b/packages/gatsby/src/recipes/providers/utils/get-diff.test.js new file mode 100644 index 0000000000000..99e05e26bd2a6 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/utils/get-diff.test.js @@ -0,0 +1,18 @@ +const getDiff = require(`./get-diff`) + +const oldString = ` +pizza +super +duper +` + +const newString = ` +pizza + +duper +` + +it(`diffs strings by line with color codes`, async () => { + const result = await getDiff(oldString, newString) + expect(result).toMatchSnapshot() +}) From 19ad1d00c5a24a6d8bcbbe07b5eaf5fde9a3a0f8 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Fri, 10 Apr 2020 14:14:45 -0700 Subject: [PATCH 065/128] Update snapshots & use default jest-diff export as that handles any type of JS value" --- .../__snapshots__/create-types.test.js.snap | 13 + .../__snapshots__/recipe-machine.test.js.snap | 7 +- .../fs/__snapshots__/file.test.js.snap | 17 +- .../gatsby/__snapshots__/plugin.test.js.snap | 240 ------------------ .../git/__snapshots__/ignore.test.js.snap | 9 +- .../__snapshots__/package-json.test.js.snap | 2 + .../npm/__snapshots__/script.test.js.snap | 30 ++- .../src/recipes/providers/npm/script.js | 7 +- .../src/recipes/providers/utils/get-diff.js | 17 +- 9 files changed, 66 insertions(+), 276 deletions(-) diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap index 2e8fe5ee3f6e9..e32a7876d1033 100644 --- a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -6,6 +6,10 @@ Object { "resolve": [Function], "type": "GatsbyPluginConnection", }, + "allGitIgnore": Object { + "resolve": [Function], + "type": "GitIgnoreConnection", + }, "allNPMPackageJson": Object { "resolve": [Function], "type": "NPMPackageJsonConnection", @@ -32,6 +36,15 @@ Object { "resolve": [Function], "type": "GatsbyPlugin", }, + "gitIgnore": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "GitIgnore", + }, "npmPackage": Object { "args": Object { "id": Object { diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index d81d834ed38e5..cf07fa7487aa6 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -7,9 +7,10 @@ Array [ Object { "currentState": "", "describe": "Write ./hi.md", - "diff": "- -+#yo -", + "diff": "- Original - 0 ++ Modified + 1 + ++ #yo", "newState": "#yo", "resourceDefinitions": Object { "content": "#yo", diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index 609a3094f11aa..fc7e94f26cae3 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -13,10 +13,10 @@ exports[`file resource e2e file resource test: File create plan 1`] = ` Object { "currentState": "", "describe": "Write file.txt", - "diff": "@@ -1 +1 @@ -- -+Hello, world! -", + "diff": "- Original - 0 ++ Modified + 1 + ++ Hello, world!", "newState": "Hello, world!", } `; @@ -43,10 +43,11 @@ exports[`file resource e2e file resource test: File update plan 1`] = ` Object { "currentState": "Hello, world!", "describe": "Write file.txt", - "diff": "@@ -1 +1 @@ --Hello, world! -+Hello, world!1 -", + "diff": "- Original - 1 ++ Modified + 1 + +- Hello, world! ++ Hello, world!1", "newState": "Hello, world!1", } `; diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index e129519def3c1..3741030e0fa98 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -64,243 +64,3 @@ Array [ }, ] `; - -exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create 1`] = ` -Object { - "id": "gatsby-plugin-foo", - "name": "gatsby-plugin-foo", -} -`; - -exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create plan 1`] = ` -Object { - "currentState": "const redish = \`#c5484d\`; -module.exports = { - siteMetadata: { - title: \`Bricolage\`, - author: \`Kyle Mathews\`, - homeCity: \`San Francisco\` - }, - plugins: [{ - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\` - } - }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\` - } - }, { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [{ - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590 - } - }, { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\` - } - }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] - } - }, \`gatsby-plugin-sharp\`, { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\` - } - }, { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\` - } - }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`] -};", - "describe": "Install gatsby-plugin-foo in gatsby-config.js", - "id": "gatsby-plugin-foo", - "name": "gatsby-plugin-foo", - "newState": "const redish = \`#c5484d\`; -module.exports = { - siteMetadata: { - title: \`Bricolage\`, - author: \`Kyle Mathews\`, - homeCity: \`San Francisco\` - }, - plugins: [{ - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\` - } - }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\` - } - }, { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [{ - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590 - } - }, { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\` - } - }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] - } - }, \`gatsby-plugin-sharp\`, { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\` - } - }, { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\` - } - }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] -};", -} -`; - -exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin destroy 1`] = `undefined`; - -exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update 1`] = ` -Object { - "id": "gatsby-plugin-foo", - "name": "gatsby-plugin-foo", -} -`; - -exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update plan 1`] = ` -Object { - "currentState": "const redish = \`#c5484d\`; -module.exports = { - siteMetadata: { - title: \`Bricolage\`, - author: \`Kyle Mathews\`, - homeCity: \`San Francisco\` - }, - plugins: [{ - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\` - } - }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\` - } - }, { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [{ - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590 - } - }, { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\` - } - }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] - } - }, \`gatsby-plugin-sharp\`, { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\` - } - }, { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\` - } - }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] -};", - "describe": "Install gatsby-plugin-foo in gatsby-config.js", - "id": "gatsby-plugin-foo", - "name": "gatsby-plugin-foo", - "newState": "const redish = \`#c5484d\`; -module.exports = { - siteMetadata: { - title: \`Bricolage\`, - author: \`Kyle Mathews\`, - homeCity: \`San Francisco\` - }, - plugins: [{ - resolve: \`gatsby-source-filesystem\`, - options: { - path: \`\${__dirname}/src/pages\`, - name: \`pages\` - } - }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { - resolve: \`gatsby-plugin-typography\`, - options: { - pathToConfigModule: \`src/utils/typography\` - } - }, { - resolve: \`gatsby-transformer-remark\`, - options: { - plugins: [{ - resolve: \`gatsby-remark-images\`, - options: { - maxWidth: 590 - } - }, { - resolve: \`gatsby-remark-responsive-iframe\`, - options: { - wrapperStyle: \`margin-bottom: 1.0725rem\` - } - }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] - } - }, \`gatsby-plugin-sharp\`, { - resolve: \`gatsby-plugin-google-analytics\`, - options: { - trackingId: \`UA-774017-3\` - } - }, { - resolve: \`gatsby-plugin-manifest\`, - options: { - name: \`Bricolage\`, - short_name: \`Bricolage\`, - icon: \`static/logo.png\`, - start_url: \`/\`, - background_color: redish, - theme_color: redish, - display: \`minimal-ui\` - } - }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, - \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] -};", -} -`; diff --git a/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap b/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap index 5c794bd6b24f8..a36af9e07084b 100644 --- a/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap +++ b/packages/gatsby/src/recipes/providers/git/__snapshots__/ignore.test.js.snap @@ -13,9 +13,12 @@ Object { "currentState": "node_modules ", "describe": "Add .cache to gitignore", - "diff": " node_modules -+.cache -", + "diff": "- Original - 1 ++ Modified + 1 + + node_modules +- ++ .cache", "newState": "node_modules .cache", } diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap index 142f48bace8e2..447e9b551949c 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package-json.test.js.snap @@ -14,6 +14,7 @@ exports[`packageJson resource e2e package resource test: PackageJson create plan Object { "currentState": "{}", "describe": "Add husky to package.json", + "diff": "", "id": "husky", "name": "husky", "newState": "{ @@ -40,6 +41,7 @@ exports[`packageJson resource e2e package resource test: PackageJson update plan Object { "currentState": "{}", "describe": "Add husky to package.json", + "diff": "", "id": "husky", "name": "husky", "newState": "{ diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap index 1213c6a4791eb..b7bafe2c57b2f 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap @@ -2,6 +2,7 @@ exports[`npm script resource e2e script resource test: NPMScript create 1`] = ` Object { + "_message": "Wrote script apple to your package.json", "command": "foot", "id": "apple", "name": "apple", @@ -11,8 +12,19 @@ Object { exports[`npm script resource e2e script resource test: NPMScript create plan 1`] = ` Object { "currentState": "", - "describe": "Add new command to your package.json: -\\"apple\\": \\"foot\\"", + "describe": "Add new command to your package.json", + "diff": "- Original - 1 ++ Modified + 3 + +@@ -3,5 +3,7 @@ + \\"hooks\\": Object {}, + }, + \\"name\\": \\"test\\", +- \\"scripts\\": Object {}, ++ \\"scripts\\": Object { ++ \\"apple\\": \\"foot\\", ++ }, + }", "newState": "\\"apple\\": \\"foot\\"", } `; @@ -21,6 +33,7 @@ exports[`npm script resource e2e script resource test: NPMScript destroy 1`] = ` exports[`npm script resource e2e script resource test: NPMScript update 1`] = ` Object { + "_message": "Wrote script apple to your package.json", "command": "foot2", "id": "apple", "name": "apple", @@ -30,8 +43,17 @@ Object { exports[`npm script resource e2e script resource test: NPMScript update plan 1`] = ` Object { "currentState": "\\"apple\\": \\"foot\\"", - "describe": "Add new command to your package.json: -\\"apple\\": \\"foot2\\"", + "describe": "Add new command to your package.json", + "diff": "- Original - 1 ++ Modified + 1 + + Object { + \\"name\\": \\"test\\", + \\"scripts\\": Object { +- \\"apple\\": \\"foot\\", ++ \\"apple\\": \\"foot2\\", + }, + }", "newState": "\\"apple\\": \\"foot2\\"", } `; diff --git a/packages/gatsby/src/recipes/providers/npm/script.js b/packages/gatsby/src/recipes/providers/npm/script.js index f2bfe3a934525..1fa55c28e5f75 100644 --- a/packages/gatsby/src/recipes/providers/npm/script.js +++ b/packages/gatsby/src/recipes/providers/npm/script.js @@ -51,7 +51,7 @@ const destroy = async ({ root }, { name }) => { const schema = { name: Joi.string(), command: Joi.string(), - ...resourceSchema + ...resourceSchema, } const validate = resource => Joi.validate(resource, schema, { abortEarly: false }) @@ -80,12 +80,11 @@ module.exports.plan = async ({ root }, { name, command }) => { currentState = scriptDescription(resource.name, resource.command) } - const oldState = JSON.stringify(pkg, null, 2) + const oldState = JSON.parse(JSON.stringify(pkg)) pkg.scripts = pkg.scripts || {} pkg.scripts[name] = command - const newState = JSON.stringify(pkg, null, 2) - const diff = await getDiff(oldState, newState) + const diff = await getDiff(oldState, pkg) return { currentState, newState: scriptDescription(name, command), diff --git a/packages/gatsby/src/recipes/providers/utils/get-diff.js b/packages/gatsby/src/recipes/providers/utils/get-diff.js index 75507efd176ee..e1f6c83f5cc31 100644 --- a/packages/gatsby/src/recipes/providers/utils/get-diff.js +++ b/packages/gatsby/src/recipes/providers/utils/get-diff.js @@ -1,18 +1,7 @@ -const isNewline = require(`is-newline`) -const { diffLinesUnified } = require(`jest-diff`) +const diff = require(`jest-diff`).default const chalk = require(`chalk`) -module.exports = async (oldString = `\n`, newString = `\n`) => { - if (!isNewline(oldString.slice(-1))) { - oldString += `\n` - } - if (!isNewline(newString.slice(-1))) { - newString += `\n` - } - - const oldStringSplits = oldString.split(/\r?\n/) - const newStringSplits = newString.split(/\r?\n/) - +module.exports = async (oldVal, newVal) => { const options = { aAnnotation: `Original`, bAnnotation: `Modified`, @@ -23,7 +12,7 @@ module.exports = async (oldString = `\n`, newString = `\n`) => { expand: false, } - const diffText = diffLinesUnified(oldStringSplits, newStringSplits, options) + const diffText = diff(oldVal, newVal, options) return diffText } From 0401a13e95757b4c3b6d8f06e5157f97fa2eda7f Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Sat, 11 Apr 2020 16:53:03 -0700 Subject: [PATCH 066/128] =?UTF-8?q?Chalk=20thinks=20it=20shouldn't=20outpu?= =?UTF-8?q?t=20color=20in=20a=20child=20process=20=E2=80=94=20fix=20that?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gatsby/src/commands/recipes.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 5797446649331..657cbb6ea85a2 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -19,6 +19,12 @@ module.exports = async (program: IProgram): Promise => { subprocess = execa(`node`, [scriptPath], { cwd: program.directory, all: true, + env: { + // Chalk doesn't want to output color in a child process + // as it (correctly) thinks it's not in a normal terminal environemnt. + // Since we're just returning data, we'll override that. + FORCE_COLOR: `true`, + } }) subprocess.stderr.on("data", data => { console.log(data.toString()) From 9a717233c01a43f284d2639490865aadc741b6b7 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Sat, 11 Apr 2020 16:55:43 -0700 Subject: [PATCH 067/128] tweak TODOs --- packages/gatsby/src/recipes/todo.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index ca6a4d6b28d25..8c35e00e5864d 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -26,6 +26,9 @@ - [x] handle template strings in JSX parser - [x] Make it support relative paths for custom recipes (./src/recipes/foo.mdx) - [x] Move parsing to the server +- [x] run recipe from url +- [x] Move parsing to the server +- [x] imports from a url - [ ] Make port selection dynamic - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions @@ -33,18 +36,16 @@ - [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] integration test for each resource (read, create, update, delete) - [ ] finish shadow file -- [x] run recipe from url -- [x] Move parsing to the server -- [x] imports from a url - [ ] Implement config object for GatsbyPlugin - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } - [ ] write tests for remote files src in File - [ ] Gatsby recipes list (design and implementation) - [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` +- [ ] handle people pressing Y & quit if they press "n" (for now) - [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] handle error states - [ ] have File only pull from remote files for now until multiline strings work in MDX -- [ ] diff all resource changes +- [ ] diff all resource changes — add test for all resources that they return something for this & remove current/new state - [ ] validate that the first step doesn't have any packages in it. - [ ] move code to its own package `gatsby-recipes` - [ ] handle not finding a recipe From cf8603c97283f59264eef044a37c254d096ce54e Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Sat, 11 Apr 2020 23:03:06 -0600 Subject: [PATCH 068/128] update todos --- packages/gatsby/src/recipes/todo.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 8c35e00e5864d..02170259240b6 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -29,6 +29,8 @@ - [x] run recipe from url - [x] Move parsing to the server - [x] imports from a url +- [x] Document the supported components and trivial guide on recipe authoring +- [x] have File only pull from remote files for now until multiline strings work in MDX - [ ] Make port selection dynamic - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions @@ -42,9 +44,8 @@ - [ ] Gatsby recipes list (design and implementation) - [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` - [ ] handle people pressing Y & quit if they press "n" (for now) -- [ ] Document the supported components and trivial guide on recipe authoring (help) - [ ] handle error states -- [ ] have File only pull from remote files for now until multiline strings work in MDX +- [ ] validate that the first step of recipes don't have any resources. They should just be for the title/description - [ ] diff all resource changes — add test for all resources that they return something for this & remove current/new state - [ ] validate that the first step doesn't have any packages in it. - [ ] move code to its own package `gatsby-recipes` From abad6f3830c6a847005394097c5786e851cf22b1 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Sun, 12 Apr 2020 14:20:46 -0600 Subject: [PATCH 069/128] update todos --- packages/gatsby/src/recipes/todo.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 02170259240b6..8587f6d7404ac 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -7,6 +7,7 @@ - [x] Boot up server as a process - [x] Then run the CLI - [x] Clean up server after +- [ ] show plan to create or that nothing is necessary & then show in `` what was done ## alpha @@ -32,25 +33,19 @@ - [x] Document the supported components and trivial guide on recipe authoring - [x] have File only pull from remote files for now until multiline strings work in MDX - [ ] Make port selection dynamic -- [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config -- [ ] show plan to create/update or that nothing is necessary & then show in `` what was done - [ ] integration test for each resource (read, create, update, delete) -- [ ] finish shadow file -- [ ] Implement config object for GatsbyPlugin -- [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } +- [ ] update shadow file resource - [ ] write tests for remote files src in File - [ ] Gatsby recipes list (design and implementation) -- [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` +- [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` & pull them from unpkg w/ make-fetch-happen/file-system-cache - [ ] handle people pressing Y & quit if they press "n" (for now) - [ ] handle error states - [ ] validate that the first step of recipes don't have any resources. They should just be for the title/description - [ ] diff all resource changes — add test for all resources that they return something for this & remove current/new state -- [ ] validate that the first step doesn't have any packages in it. - [ ] move code to its own package `gatsby-recipes` - [ ] handle not finding a recipe -- [ ] write up testing doc ASAP so internal folks can try it - [ ] write blog post ## Near-ish future @@ -64,3 +59,7 @@ - [ ] move creating the validate function to core and out of resources — they just declare their schema - [ ] gatsby-config.js hardening — make it work if there's no plugins set like in hello-world starter - [ ] get latest version of npm packages so know if can skip running. +- [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) +- [ ] Show in plan if an update will be applied vs. create. +- [ ] Implement config object for GatsbyPlugin +- [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } From 44aee1ac38793ec1613fb33269986067b644e1c9 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 07:55:05 -0600 Subject: [PATCH 070/128] Move mdx source for recipes to their own directory --- packages/gatsby/package.json | 4 ++-- packages/gatsby/src/recipes/{ => mdx-src}/emotion.mdx | 0 packages/gatsby/src/recipes/{ => mdx-src}/eslint.mdx | 0 packages/gatsby/src/recipes/{ => mdx-src}/jest.mdx | 0 .../gatsby/src/recipes/{ => mdx-src}/prettier-git-hook.mdx | 0 packages/gatsby/src/recipes/{ => mdx-src}/theme-ui.mdx | 0 packages/gatsby/src/recipes/parser/index.js | 2 +- 7 files changed, 3 insertions(+), 3 deletions(-) rename packages/gatsby/src/recipes/{ => mdx-src}/emotion.mdx (100%) rename packages/gatsby/src/recipes/{ => mdx-src}/eslint.mdx (100%) rename packages/gatsby/src/recipes/{ => mdx-src}/jest.mdx (100%) rename packages/gatsby/src/recipes/{ => mdx-src}/prettier-git-hook.mdx (100%) rename packages/gatsby/src/recipes/{ => mdx-src}/theme-ui.mdx (100%) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 88129b0fedf86..abf0980f72fe6 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -240,8 +240,8 @@ "postbuild": "node scripts/output-api-file.js", "build:internal-plugins": "copyfiles -u 1 src/internal-plugins/**/package.json dist", "build:rawfiles": "copyfiles -u 1 src/internal-plugins/**/raw_* dist", - "build:recipes": "copyfiles -u 1 src/recipes/*.mdx dist", - "watch:recipes": "copy-and-watch src/recipes/*.mdx dist/recipes", + "build:recipes": "copyfiles -u 1 src/recipes/mdx-src/*.mdx dist", + "watch:recipes": "copy-and-watch src/recipes/mdx-src/*.mdx dist/recipes/mdx-src", "build:cjs": "babel cache-dir --out-dir cache-dir/commonjs --ignore **/__tests__", "build:src": "babel src --out-dir dist --source-maps --verbose --ignore **/gatsby-cli.js,src/internal-plugins/dev-404-page/raw_dev-404-page.js,**/__tests__ --extensions \".ts,.js\"", "clean-test-bundles": "find test/ -type f -name bundle.js* -exec rm -rf {} +", diff --git a/packages/gatsby/src/recipes/emotion.mdx b/packages/gatsby/src/recipes/mdx-src/emotion.mdx similarity index 100% rename from packages/gatsby/src/recipes/emotion.mdx rename to packages/gatsby/src/recipes/mdx-src/emotion.mdx diff --git a/packages/gatsby/src/recipes/eslint.mdx b/packages/gatsby/src/recipes/mdx-src/eslint.mdx similarity index 100% rename from packages/gatsby/src/recipes/eslint.mdx rename to packages/gatsby/src/recipes/mdx-src/eslint.mdx diff --git a/packages/gatsby/src/recipes/jest.mdx b/packages/gatsby/src/recipes/mdx-src/jest.mdx similarity index 100% rename from packages/gatsby/src/recipes/jest.mdx rename to packages/gatsby/src/recipes/mdx-src/jest.mdx diff --git a/packages/gatsby/src/recipes/prettier-git-hook.mdx b/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx similarity index 100% rename from packages/gatsby/src/recipes/prettier-git-hook.mdx rename to packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx diff --git a/packages/gatsby/src/recipes/theme-ui.mdx b/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx similarity index 100% rename from packages/gatsby/src/recipes/theme-ui.mdx rename to packages/gatsby/src/recipes/mdx-src/theme-ui.mdx diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js index 752a184e00661..51f0a3226ca0f 100644 --- a/packages/gatsby/src/recipes/parser/index.js +++ b/packages/gatsby/src/recipes/parser/index.js @@ -168,7 +168,7 @@ const getSource = async (pathOrUrl, projectRoot) => { if (isRelative(pathOrUrl)) { recipePath = path.join(projectRoot, pathOrUrl) } else { - recipePath = path.join(__dirname, `../`, pathOrUrl) + recipePath = path.join(__dirname, `../mdx-src`, pathOrUrl) } if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` From 5efb22f5f66d453a1da80eb1726a0470da4650bc Mon Sep 17 00:00:00 2001 From: Marcy Sutton Date: Mon, 13 Apr 2020 08:00:42 -0600 Subject: [PATCH 071/128] Add Sass recipe --- packages/gatsby/src/recipes/mdx-src/sass.mdx | 39 ++++++++++++++++++++ packages/gatsby/src/recipes/todo.md | 1 + 2 files changed, 40 insertions(+) create mode 100644 packages/gatsby/src/recipes/mdx-src/sass.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/sass.mdx b/packages/gatsby/src/recipes/mdx-src/sass.mdx new file mode 100644 index 0000000000000..58c01bfb7f444 --- /dev/null +++ b/packages/gatsby/src/recipes/mdx-src/sass.mdx @@ -0,0 +1,39 @@ +# Setup Gatsby with Sass + +Sass is an extension of CSS, adding nested rules, variables, mixins, selector inheritance, and more. In Gatsby, Sass code can be translated to well-formatted, standard CSS using a plugin. + +--- + +Install necessary NPM packages + + + + +--- + +Install the Emotion plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go. + +Let's also write out an example stylesheet and page you can use to play +with Sass. + + + + + +--- + +Read more about Sass on the official Sass docs site: + +https://sass-lang.com/documentationb diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 8587f6d7404ac..fcc47ae1107e5 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -35,6 +35,7 @@ - [ ] Make port selection dynamic - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config +- [ ] test modifying gatsby-config.js from default starter - [ ] integration test for each resource (read, create, update, delete) - [ ] update shadow file resource - [ ] write tests for remote files src in File From 4f2e2df26c18208fb5d5c0b84ac1bcdd9bbaddd4 Mon Sep 17 00:00:00 2001 From: Laurie Barth Date: Mon, 13 Apr 2020 08:42:24 -0600 Subject: [PATCH 072/128] Add recipe for setting up local gatsby-theme-blog --- .../src/recipes/mdx-src/gatsby-theme-blog | 28 +++++++++++++++++++ packages/gatsby/src/recipes/todo.md | 1 + 2 files changed, 29 insertions(+) create mode 100644 packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog b/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog new file mode 100644 index 0000000000000..626eb04df0678 --- /dev/null +++ b/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog @@ -0,0 +1,28 @@ +# Setup Gatsby Theme Blog + +[Gatsby theme blog](https://www.gatsbyjs.org/packages/gatsby-theme-blog/) is a great theme for adding blog functionality to your site. +--- + +Install necessary NPM packages + + + + +--- + +Install the gatsby-theme-blog plugin in gatsby-config.js + + + +--- +Now let's add a post! (this part isn't working) + + + +--- + +Sweet, now it's ready to go. + +Note that for the moment you'll need to delete your src/pages/index.js file. + +--- diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index fcc47ae1107e5..18395a5053d5a 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -40,6 +40,7 @@ - [ ] update shadow file resource - [ ] write tests for remote files src in File - [ ] Gatsby recipes list (design and implementation) +- [ ] print pretty error when there's parsing errors of mdx files - [ ] Move gatsby/src/recipes to its own package `gatsby-recipes` & pull them from unpkg w/ make-fetch-happen/file-system-cache - [ ] handle people pressing Y & quit if they press "n" (for now) - [ ] handle error states From 2a2802be8ee8c752d8f81ae51c94543fe8fbd7d7 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 09:34:21 -0600 Subject: [PATCH 073/128] Add todo around bundling --- packages/gatsby/src/recipes/todo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 18395a5053d5a..905bd89c6d1fc 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -37,6 +37,7 @@ - [ ] use yarn/npm based on the user config - [ ] test modifying gatsby-config.js from default starter - [ ] integration test for each resource (read, create, update, delete) +- [ ] spike on bundling recipes into one file - [ ] update shadow file resource - [ ] write tests for remote files src in File - [ ] Gatsby recipes list (design and implementation) From 6add89193e0da544a707b0343107300adcb35254 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 12:01:46 -0600 Subject: [PATCH 074/128] feat(recipes): Eliminate new lines from markdown (#23064) --- packages/gatsby/src/recipes/cli.js | 98 ++++++++++++++---------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index ce71d9f0f7a24..a5e0facc131a6 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -31,6 +31,23 @@ const Div = props => ( /> ) +// Markdown ignores new lines and so do we. +function elimiateNewLines(children) { + return React.Children.map(children, child => { + if (!React.isValidElement(child)) { + return child.replace(/(\r\n|\n|\r)/gm, ` `) + } + + if (child.props.children) { + child = React.cloneElement(child, { + children: elimiateNewLines(child.props.children), + }) + } + + return child + }) +} + const components = { inlineCode: props => , h1: props => ( @@ -44,17 +61,22 @@ const components = { h5: props => , h6: props => , a: ({ href, children }) => {children}, + br: () => null, strong: props => , em: props => , - p: props => ( - - ), + p: props => { + let children = elimiateNewLines(props.children) + return ( + + ) + }, ul: props =>
    {props.children}
    , li: props => * {props.children}, Config: () => null, @@ -104,32 +126,6 @@ module.exports = ({ recipe, projectRoot }) => { ], }) - class ErrorBoundary extends React.Component { - constructor(props) { - super(props) - this.state = { hasError: false } - } - - static getDerivedStateFromError(error) { - // Update state so the next render will show the fallback UI. - return { hasError: true } - } - - componentDidCatch(error, errorInfo) { - // You can also log the error to an error reporting service - log(`error`, { error, errorInfo }) - } - - render() { - if (this.state.hasError) { - // You can render any custom fallback UI - return

    Something went wrong.

    - } - - return this.props.children - } - } - const RecipeInterpreter = () => { const [lastKeyPress, setLastKeyPress] = useState(``) const { exit } = useApp() @@ -343,23 +339,21 @@ module.exports = ({ recipe, projectRoot }) => { ✅ {r._message} ))}
    - - {state.context.currentStep > 0 && state.value !== `done` && ( -
    - - Step {state.context.currentStep} /{` `} - {state.context.steps.length - 1} - -
    - )} - - - {state.context.stepsAsMdx[state.context.currentStep]} - - - - -
    + {state.context.currentStep > 0 && state.value !== `done` && ( +
    + + Step {state.context.currentStep} /{` `} + {state.context.steps.length - 1} + +
    + )} + + + {state.context.stepsAsMdx[state.context.currentStep]} + + + + ) } From a47d18831ca4f710166599af6d66430944fecfd5 Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 13 Apr 2020 13:01:43 -0600 Subject: [PATCH 075/128] feat(recipes): Implement shadow file resource and test it (#23063) * feat(recipes): Implement shadow file resource and test it * Call ensureFile in file resource * Use path.sep for cross-platform support * Update snapshots for jest-diff --- .../gatsby/src/recipes/providers/fs/file.js | 1 + .../gatsby/__snapshots__/plugin.test.js.snap | 334 ++++++++++++++++++ .../__snapshots__/shadow-file.test.js.snap | 95 +++++ .../gatsby/fixtures/gatsby-config.js | 68 ---- .../gatsby-starter-blog/gatsby-config.js | 52 +++ .../gatsby-config.js | 9 + .../src/components/author.js | 3 + .../recipes/providers/gatsby/plugin.test.js | 13 +- .../recipes/providers/gatsby/shadow-file.js | 111 ++++-- .../providers/gatsby/shadow-file.test.js | 32 +- 10 files changed, 615 insertions(+), 103 deletions(-) create mode 100644 packages/gatsby/src/recipes/providers/gatsby/__snapshots__/shadow-file.test.js.snap delete mode 100644 packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js create mode 100644 packages/gatsby/src/recipes/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js diff --git a/packages/gatsby/src/recipes/providers/fs/file.js b/packages/gatsby/src/recipes/providers/fs/file.js index 6394d2ffd6416..78cf45b056076 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.js +++ b/packages/gatsby/src/recipes/providers/fs/file.js @@ -41,6 +41,7 @@ const create = async ({ root }, { id, path: filePath, content }) => { if (isUrl(content)) { await downloadFile(content, fullPath) } else { + await fs.ensureFile(fullPath) await fs.writeFile(fullPath, content) } diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap index 3741030e0fa98..bbbe7d49cb0ae 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/plugin.test.js.snap @@ -64,3 +64,337 @@ Array [ }, ] `; + +exports[`gatsby-plugin resource e2e plugin resource test with hello world starter: GatsbyPlugin create 1`] = ` +Object { + "_message": "Installed gatsby-plugin-foo in gatsby-config.js", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test with hello world starter: GatsbyPlugin create plan 1`] = ` +Object { + "currentState": "/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ +module.exports = { + /* Your site config here */ + plugins: [] +};", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", + "diff": "- Original - 1 ++ Modified + 1 + +@@ -5,5 +5,5 @@ + */ + module.exports = { + /* Your site config here */ +- plugins: [] ++ plugins: [\\"gatsby-plugin-foo\\"] + };", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ +module.exports = { + /* Your site config here */ + plugins: [\\"gatsby-plugin-foo\\"] +};", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test with hello world starter: GatsbyPlugin destroy 1`] = `undefined`; + +exports[`gatsby-plugin resource e2e plugin resource test with hello world starter: GatsbyPlugin update 1`] = ` +Object { + "_message": "Installed gatsby-plugin-foo in gatsby-config.js", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test with hello world starter: GatsbyPlugin update plan 1`] = ` +Object { + "currentState": "/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ +module.exports = { + /* Your site config here */ + plugins: [\\"gatsby-plugin-foo\\"] +};", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", + "diff": "Compared values have no visual difference.", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ +module.exports = { + /* Your site config here */ + plugins: [\\"gatsby-plugin-foo\\"] +};", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create 1`] = ` +Object { + "_message": "Installed gatsby-plugin-foo in gatsby-config.js", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin create plan 1`] = ` +Object { + "currentState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`] +};", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", + "diff": "- Original - 1 ++ Modified + 1 + +@@ -48,5 +48,5 @@ + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, +- \`gatsby-plugin-react-helmet\`] ++ \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] + };", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin destroy 1`] = `undefined`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update 1`] = ` +Object { + "_message": "Installed gatsby-plugin-foo in gatsby-config.js", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", +} +`; + +exports[`gatsby-plugin resource e2e plugin resource test: GatsbyPlugin update plan 1`] = ` +Object { + "currentState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", + "describe": "Install gatsby-plugin-foo in gatsby-config.js", + "diff": "Compared values have no visual difference.", + "id": "gatsby-plugin-foo", + "name": "gatsby-plugin-foo", + "newState": "const redish = \`#c5484d\`; +module.exports = { + siteMetadata: { + title: \`Bricolage\`, + author: \`Kyle Mathews\`, + homeCity: \`San Francisco\` + }, + plugins: [{ + resolve: \`gatsby-source-filesystem\`, + options: { + path: \`\${__dirname}/src/pages\`, + name: \`pages\` + } + }, \`gatsby-transformer-sharp\`, \`gatsby-plugin-emotion\`, { + resolve: \`gatsby-plugin-typography\`, + options: { + pathToConfigModule: \`src/utils/typography\` + } + }, { + resolve: \`gatsby-transformer-remark\`, + options: { + plugins: [{ + resolve: \`gatsby-remark-images\`, + options: { + maxWidth: 590 + } + }, { + resolve: \`gatsby-remark-responsive-iframe\`, + options: { + wrapperStyle: \`margin-bottom: 1.0725rem\` + } + }, \`gatsby-remark-prismjs\`, \`gatsby-remark-copy-linked-files\`, \`gatsby-remark-smartypants\`] + } + }, \`gatsby-plugin-sharp\`, { + resolve: \`gatsby-plugin-google-analytics\`, + options: { + trackingId: \`UA-774017-3\` + } + }, { + resolve: \`gatsby-plugin-manifest\`, + options: { + name: \`Bricolage\`, + short_name: \`Bricolage\`, + icon: \`static/logo.png\`, + start_url: \`/\`, + background_color: redish, + theme_color: redish, + display: \`minimal-ui\` + } + }, \`gatsby-plugin-offline\`, // \`gatsby-plugin-preact\`, + \`gatsby-plugin-react-helmet\`, \\"gatsby-plugin-foo\\"] +};", +} +`; diff --git a/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/shadow-file.test.js.snap b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/shadow-file.test.js.snap new file mode 100644 index 0000000000000..fd498c820b6ff --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/__snapshots__/shadow-file.test.js.snap @@ -0,0 +1,95 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Shadow File resource e2e shadow file resource test: ShadowFile create 1`] = ` +Object { + "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/gatsby-theme-blog/components/author.js", + "theme": "gatsby-theme-blog", +} +`; + +exports[`Shadow File resource e2e shadow file resource test: ShadowFile create plan 1`] = ` +Object { + "currentState": Object {}, + "describe": "Shadow src/components/author.js from the theme gatsby-theme-blog", + "diff": "- Original - 0 ++ Modified + 4 + ++ import React from 'react' ++ ++ export default () =>

    F. Scott Fitzgerald

     ++", + "id": "src/gatsby-theme-blog/components/author.js", + "newState": Object { + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/components/author.js", + "theme": "gatsby-theme-blog", + }, + "path": "src/components/author.js", + "theme": "gatsby-theme-blog", +} +`; + +exports[`Shadow File resource e2e shadow file resource test: ShadowFile destroy 1`] = ` +Object { + "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/gatsby-theme-blog/components/author.js", + "theme": "gatsby-theme-blog", +} +`; + +exports[`Shadow File resource e2e shadow file resource test: ShadowFile update 1`] = ` +Object { + "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/gatsby-theme-blog/components/author.js", + "theme": "gatsby-theme-blog", +} +`; + +exports[`Shadow File resource e2e shadow file resource test: ShadowFile update plan 1`] = ` +Object { + "currentState": Object { + "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/gatsby-theme-blog/components/author.js", + "theme": "gatsby-theme-blog", + }, + "describe": "Shadow src/components/author.js from the theme gatsby-theme-blog", + "diff": "Compared values have no visual difference.", + "id": "src/gatsby-theme-blog/components/author.js", + "newState": Object { + "contents": "import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    +", + "id": "src/gatsby-theme-blog/components/author.js", + "path": "src/components/author.js", + "theme": "gatsby-theme-blog", + }, + "path": "src/components/author.js", + "theme": "gatsby-theme-blog", +} +`; diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js deleted file mode 100644 index 93f6420f76147..0000000000000 --- a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-config.js +++ /dev/null @@ -1,68 +0,0 @@ -const redish = `#c5484d` -module.exports = { - siteMetadata: { - title: `Bricolage`, - author: `Kyle Mathews`, - homeCity: `San Francisco`, - }, - plugins: [ - { - resolve: `gatsby-source-filesystem`, - options: { - path: `${__dirname}/src/pages`, - name: `pages`, - }, - }, - `gatsby-transformer-sharp`, - `gatsby-plugin-emotion`, - { - resolve: `gatsby-plugin-typography`, - options: { - pathToConfigModule: `src/utils/typography`, - }, - }, - { - resolve: `gatsby-transformer-remark`, - options: { - plugins: [ - { - resolve: `gatsby-remark-images`, - options: { - maxWidth: 590, - }, - }, - { - resolve: `gatsby-remark-responsive-iframe`, - options: { - wrapperStyle: `margin-bottom: 1.0725rem`, - }, - }, - `gatsby-remark-prismjs`, - `gatsby-remark-copy-linked-files`, - `gatsby-remark-smartypants`, - ], - }, - }, - `gatsby-plugin-sharp`, - { - resolve: `gatsby-plugin-google-analytics`, - options: { - trackingId: `UA-774017-3`, - }, - }, - { - resolve: `gatsby-plugin-manifest`, - options: { - name: `Bricolage`, - short_name: `Bricolage`, - icon: `static/logo.png`, - start_url: `/`, - background_color: redish, - theme_color: redish, - display: `minimal-ui`, - }, - }, - `gatsby-plugin-offline`, // `gatsby-plugin-preact`, - `gatsby-plugin-react-helmet`, - ], -} diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js new file mode 100644 index 0000000000000..f42813f001a90 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js @@ -0,0 +1,52 @@ +const redish = `#c5484d`; +module.exports = { + siteMetadata: { + title: `Bricolage`, + author: `Kyle Mathews`, + homeCity: `San Francisco` + }, + plugins: [{ + resolve: `gatsby-source-filesystem`, + options: { + path: `${__dirname}/src/pages`, + name: `pages` + } + }, `gatsby-transformer-sharp`, `gatsby-plugin-emotion`, { + resolve: `gatsby-plugin-typography`, + options: { + pathToConfigModule: `src/utils/typography` + } + }, { + resolve: `gatsby-transformer-remark`, + options: { + plugins: [{ + resolve: `gatsby-remark-images`, + options: { + maxWidth: 590 + } + }, { + resolve: `gatsby-remark-responsive-iframe`, + options: { + wrapperStyle: `margin-bottom: 1.0725rem` + } + }, `gatsby-remark-prismjs`, `gatsby-remark-copy-linked-files`, `gatsby-remark-smartypants`] + } + }, `gatsby-plugin-sharp`, { + resolve: `gatsby-plugin-google-analytics`, + options: { + trackingId: `UA-774017-3` + } + }, { + resolve: `gatsby-plugin-manifest`, + options: { + name: `Bricolage`, + short_name: `Bricolage`, + icon: `static/logo.png`, + start_url: `/`, + background_color: redish, + theme_color: redish, + display: `minimal-ui` + } + }, `gatsby-plugin-offline`, // `gatsby-plugin-preact`, + `gatsby-plugin-react-helmet`] +}; \ No newline at end of file diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js new file mode 100644 index 0000000000000..640b28a301b61 --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js @@ -0,0 +1,9 @@ +/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ +module.exports = { + /* Your site config here */ + plugins: [] +}; \ No newline at end of file diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js new file mode 100644 index 0000000000000..65dc38d11408d --- /dev/null +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js @@ -0,0 +1,3 @@ +import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 10d2d5c6d241e..077008b7af745 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -5,7 +5,8 @@ const plugin = require(`./plugin`) const { addPluginToConfig, getPluginsFromConfig } = require(`./plugin`) const resourceTestHelper = require(`../resource-test-helper`) -const root = path.join(__dirname, `./fixtures`) +const root = path.join(__dirname, `./fixtures/gatsby-starter-blog`) +const helloWorldRoot = path.join(__dirname, `./fixtures/gatsby-starter-hello-world`) const name = `gatsby-plugin-foo` const configPath = path.join(root, `gatsby-config.js`) @@ -20,6 +21,16 @@ describe(`gatsby-plugin resource`, () => { }) }) + test(`e2e plugin resource test with hello world starter`, async () => { + await resourceTestHelper({ + resourceModule: plugin, + resourceName: `GatsbyPlugin`, + context: { root: helloWorldRoot }, + initialObject: { id: name, name }, + partialUpdate: { id: name }, + }) + }) + test(`does not add the same plugin twice by default`, async () => { const configSrc = await fs.readFile(configPath, `utf8`) const newConfigSrc = addPluginToConfig( diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js index 541643bbf0b51..ad3b290e5bf49 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js @@ -1,11 +1,21 @@ const path = require(`path`) const fs = require(`fs-extra`) -const mkdirp = require(`mkdirp`) +const Joi = require('@hapi/joi') + +const resourceSchema = require('../resource-schema') +const getDiff = require(`../utils/get-diff`) +const fileExists = filePath => fs.existsSync(filePath) + +const relativePathForShadowedFile = ({ theme, filePath }) => { + const [_src, ...filePathParts] = filePath.split(path.sep) + const relativePath = path.join('src', theme, path.join(...filePathParts)) + return relativePath +} const create = async ({ root }, { theme, path: filePath }) => { - console.log(`hi ShadowFile create 2`, { theme, filePath }) - const relativePathInTheme = filePath.replace(theme + `/`, ``) - console.log(`boo`) + const id = relativePathForShadowedFile({ filePath, theme }) + + const relativePathInTheme = filePath.replace(theme + path.sep, ``) const fullFilePathToShadow = path.join( root, `node_modules`, @@ -13,44 +23,97 @@ const create = async ({ root }, { theme, path: filePath }) => { relativePathInTheme ) - console.log({ relativePathInTheme, fullFilePathToShadow }) - const contents = await fs.readFile(fullFilePathToShadow, `utf8`) - const fullPath = path.join(root, filePath) - const { dir } = path.parse(fullPath) + const fullPath = path.join(root, id) - await mkdirp(dir) + await fs.ensureFile(fullPath) await fs.writeFile(fullPath, contents) + + const result = await read({ root }, id) + return result } -const read = async ({ root }, { theme, path: filePath }) => { - const relativePathInTheme = filePath.replace(theme + `/`, ``) - const fullFilePathToShadow = path.join( - root, - `node_modules`, +const read = async ({ root }, id) => { + const [_src, theme, ..._filePathParts] = id.split(path.sep) + + const fullPath = path.join(root, id) + + if (!fileExists(fullPath)) { + return undefined + } + + const contents = await fs.readFile(fullPath, `utf8`) + + const resource = { + id, theme, - relativePathInTheme - ) + path: id, + contents + } - const contents = await fs.readFile(fullFilePathToShadow, `utf8`) - return contents + resource._message = message(resource) + + return resource +} + +const destroy = async ({ root }, { id }) => { + const resource = await read({ root }, id) + await fs.unlink(path.join(root, id)) + return resource } -const destroy = async ({ root }, { path: filePath }) => { - const fullPath = path.join(root, filePath) - await fs.unlink(fullPath) +const schema = { + theme: Joi.string(), + path: Joi.string(), + contents: Joi.string(), + ...resourceSchema } +module.exports.schema = schema +module.exports.validate = resource => + Joi.validate(resource, schema, { abortEarly: false }) module.exports.create = create module.exports.update = create module.exports.read = read module.exports.destroy = destroy -module.exports.plan = (_, { theme, path: filePath }) => { +const message = resource => `Shadowed ${resource.id || resource.path} from ${resource.theme}` + +module.exports.plan = async ({ root }, { theme, path: filePath, id }) => { + if (!id) { + const [_src, ...filePathParts] = filePath.split(path.sep) + id = path.join('src', theme, path.join(...filePathParts)) + } + + const currentResource = await read({ root }, id) || {} + + const [_src, _theme, ...shadowPathParts] = id.split(path.sep) + const fullFilePathToShadow = path.join( + root, + `node_modules`, + theme, + 'src', + path.join(...shadowPathParts) + ) + + const newContents = await fs.readFile(fullFilePathToShadow, 'utf8') + const newResource = { + id, + theme, + path: filePath, + contents: newContents + } + + const diff = await getDiff(currentResource.contents || '', newContents) + return { - currentState: [], - newState: [filePath], + id, + theme, + path: filePath, + diff, + currentState: currentResource, + newState: newResource, describe: `Shadow ${filePath} from the theme ${theme}`, } } diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js index d32e207ff50d8..f2b3c8060fed8 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js @@ -1,25 +1,37 @@ -const pkgDir = require(`pkg-dir`) -const os = require(`os`) const path = require(`path`) -const uuid = require(`uuid`) -const fs = require(`fs-extra`) +const rimraf = require(`rimraf`) const shadowFile = require(`./shadow-file`) const resourceTestHelper = require(`../resource-test-helper`) -// Make temp directory to run tests in. -const root = path.join(os.tmpdir(), uuid.v4()) -fs.mkdirSync(root) +const root = path.join(__dirname, 'fixtures') + +const cleanup = () => { + rimraf.sync(path.join(root, 'src')) +} + +beforeEach(() => { + cleanup() +}) + +afterEach(() => { + cleanup() +}) -// TODO finish this. Shadow File isn't yet updated. describe(`Shadow File resource`, () => { test(`e2e shadow file resource test`, async () => { await resourceTestHelper({ resourceModule: shadowFile, resourceName: `ShadowFile`, context: { root }, - // initialObject: { path: `file.txt`, content }, - // partialUpdate: { content: content + `1` }, + initialObject: { + theme: 'gatsby-theme-blog', + path: `src/components/author.js` + }, + partialUpdate: { + theme: 'gatsby-theme-blog', + path: `src/components/author.js` + } }) }) }) From 482399539f3b4773182ba5da3f3cecdb728a7ce1 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 12:13:10 -0600 Subject: [PATCH 076/128] update todos --- packages/gatsby/src/recipes/cli.js | 2 +- packages/gatsby/src/recipes/todo.md | 26 ++++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index a5e0facc131a6..f5e538845cb40 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -65,7 +65,7 @@ const components = { strong: props => , em: props => , p: props => { - let children = elimiateNewLines(props.children) + const children = elimiateNewLines(props.children) return ( Date: Mon, 13 Apr 2020 13:07:42 -0700 Subject: [PATCH 077/128] Update README.md --- packages/gatsby/src/recipes/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index 395f4181b5b79..ea38821885eb0 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -1,7 +1,7 @@ # Gatsby Recipes Gatsby Recipes is framework for automating common Gatsby tasks. Recipes are MDX -files which when run by our interpretor, perform common actions like installing +files which, when run by our interpretor, perform common actions like installing NPM packages, installing plugins, creating pages, etc. It's designed to be extensible so new capabilities can be added which allow @@ -29,11 +29,11 @@ Let's write our first Recipe to setup Emotion on a Gatsby site. [Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. ---- +--- // use three dashes to separate steps of the recipe Install necessary NPM packages - + // refer to the API in this doc to see what APIs are available, like `NPMPackage` From eb2acd75a249e79cb5e0dfd438814f615c918057 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 14:13:35 -0600 Subject: [PATCH 078/128] feat(recipes): detect if port is used and use a different one (#23076) * feat(recipes): detect if port is used and use a different one * Check task done * pass graphqlPort to client --- packages/gatsby/src/commands/recipes.ts | 9 +++++++-- packages/gatsby/src/recipes/cli.js | 6 +++--- packages/gatsby/src/recipes/graphql.js | 2 +- packages/gatsby/src/recipes/todo.md | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 657cbb6ea85a2..45529b40795a5 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -2,9 +2,13 @@ import telemetry from "gatsby-telemetry" import execa from "execa" import path from "path" import fs from "fs" +import detectPort from "detect-port" module.exports = async (program: IProgram): Promise => { const recipe = program._[1] + // We don't really care what port is used for GraphQL as it's + // generally only for code 2 code communication or debugging. + const graphqlPort = await detectPort(4000) telemetry.trackCli(`RECIPE_RUN`, { recipe }) // const runRecipe = require(`../recipes/index`) @@ -16,7 +20,8 @@ module.exports = async (program: IProgram): Promise => { program.directory, `node_modules/gatsby/dist/recipes/graphql.js` ) - subprocess = execa(`node`, [scriptPath], { + + subprocess = execa(`node`, [scriptPath, graphqlPort], { cwd: program.directory, all: true, env: { @@ -46,7 +51,7 @@ module.exports = async (program: IProgram): Promise => { subprocess.stdout.on("data", data => { if (!started) { const runRecipe = require(`../recipes/index`) - runRecipe({ recipe, projectRoot: program.directory }) + runRecipe({ recipe, graphqlPort, projectRoot: program.directory }) started = true } }) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index f5e538845cb40..03185152b678d 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -102,11 +102,11 @@ log( const PlanContext = React.createContext({}) -module.exports = ({ recipe, projectRoot }) => { - const GRAPHQL_ENDPOINT = `http://localhost:4000/graphql` +module.exports = ({ recipe, graphqlPort, projectRoot }) => { + const GRAPHQL_ENDPOINT = `http://localhost:${graphqlPort}/graphql` const subscriptionClient = new SubscriptionClient( - `ws://localhost:4000/graphql`, + `ws://localhost:${graphqlPort}/graphql`, { reconnect: true, }, diff --git a/packages/gatsby/src/recipes/graphql.js b/packages/gatsby/src/recipes/graphql.js index 7e4c0ce3786b4..b9290dd400670 100644 --- a/packages/gatsby/src/recipes/graphql.js +++ b/packages/gatsby/src/recipes/graphql.js @@ -20,7 +20,7 @@ const createTypes = require(`./create-types`) const SITE_ROOT = pkgDir.sync(process.cwd()) const pubsub = new PubSub() -const PORT = 4000 +const PORT = process.argv[2] || 4000 const emitOperation = state => { console.log(state) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index c853b4ed86a30..0a782e51065c4 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -38,7 +38,7 @@ Kyle -- [ ] Make port selection dynamic +- [x] Make port selection dynamic - [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config - [ ] write tests for remote files src in File From e5c9a3dd87d38a3ed365d58a5102d69207d34e73 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 14:52:16 -0600 Subject: [PATCH 079/128] feat(recipes): Tell people recipes is experimental & point them to the umbrella issue (#23079) --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/cli.js | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index abf0980f72fe6..faef3277e7180 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -98,6 +98,7 @@ "html-tag-names": "^1.1.5", "humanize-list": "^1.0.1", "import-jsx": "^4.0.0", + "ink-box": "^1.0.0", "ink-link": "^1.0.0", "invariant": "^2.2.4", "is-blank": "^2.1.0", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 03185152b678d..d4513457e0678 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,7 +1,8 @@ +const React = require(`react`) const fs = require(`fs`) const lodash = require(`lodash`) +import Boxen from "ink-box" -const React = require(`react`) const { useState } = require(`react`) const { render, Box, Text, Color, useInput, useApp, Static } = require(`ink`) const Spinner = require(`ink-spinner`).default @@ -334,6 +335,19 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { return ( <> + + Thank you for trying the experimental version of Gatsby Recipes! + +
    + Please ask questions, report bugs, and subscribe for updates in our + umbrella issue at https://github.com/gatsbyjs/gatsby/issues/22991 +
    {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( ✅ {r._message} @@ -341,7 +355,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { {state.context.currentStep > 0 && state.value !== `done` && (
    - + Step {state.context.currentStep} /{` `} {state.context.steps.length - 1} From 3fd10b4e63bdfc47ea8582cb347d624bf757f864 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 14:53:07 -0600 Subject: [PATCH 080/128] Update todo --- packages/gatsby/src/recipes/todo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 0a782e51065c4..aff8d687853de 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -39,7 +39,7 @@ Kyle - [x] Make port selection dynamic -- [ ] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions +- [x] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [ ] use yarn/npm based on the user config - [ ] write tests for remote files src in File - [ ] move back to "press enter to run" From 4d80e588d7d6b586c2595c774fa832e86411bfc6 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 16:52:34 -0600 Subject: [PATCH 081/128] feat(recipes): Use the package manager client the user specifies in their Gatsby config (#23083) * feat(recipes): Use the package manager client the user specifies in their Gatsby config * use actual package manager --- .../npm/__snapshots__/package.test.js.snap | 32 +++++++++++ .../src/recipes/providers/npm/package.js | 53 ++++++++++++------- .../src/recipes/providers/npm/package.test.js | 35 ++++++++++++ 3 files changed, 101 insertions(+), 19 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap index 6958d9ba0fffd..6d07fa4c173ce 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/package.test.js.snap @@ -42,3 +42,35 @@ Object { "newState": "is-sorted@1.0.2", } `; + +exports[`package manager client commands generates the correct commands for npm 1`] = ` +Array [ + "install", + "gatsby", +] +`; + +exports[`package manager client commands generates the correct commands for npm 2`] = ` +Array [ + "install", + "--save-dev", + "eslint", +] +`; + +exports[`package manager client commands generates the correct commands for yarn 1`] = ` +Array [ + "add", + "-W", + "gatsby", +] +`; + +exports[`package manager client commands generates the correct commands for yarn 2`] = ` +Array [ + "add", + "-W", + "--dev", + "eslint", +] +`; diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 5f8b0bab1fe71..8ae9e3acabe36 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -3,6 +3,10 @@ const _ = require(`lodash`) const Joi = require(`@hapi/joi`) const path = require(`path`) const fs = require(`fs-extra`) +const { getConfigStore } = require(`gatsby-core-utils`) + +const packageMangerConfigKey = `cli.packageManager` +const PACKAGE_MANGER = getConfigStore().get(packageMangerConfigKey) || `yarn` const resourceSchema = require(`../resource-schema`) @@ -14,6 +18,29 @@ const asyncForEach = async (array, callback) => { } } +// Generate install commands +const generateClientComands = ({ packageManager, depType, packageNames }) => { + let commands = [] + if (packageManager === `yarn`) { + commands.push(`add`) + // Needed for Yarn Workspaces and is a no-opt elsewhere. + commands.push(`-W`) + if (depType === `devDependency`) { + commands.push(`--dev`) + } + + return commands.concat(packageNames) + } else if (packageManager === `npm`) { + commands.push(`install`) + if (depType === `devDependency`) { + commands.push(`--save-dev`) + } + return commands.concat(packageNames) + } +} + +exports.generateClientComands = generateClientComands + let installs = [] const executeInstalls = async root => { const types = _.groupBy(installs, c => c.resource.dependencyType) @@ -28,27 +55,15 @@ const executeInstalls = async root => { ) const pkgs = packagesToInstall.map(p => p.resource) + const packageNames = getPackageNames(pkgs) - let typeFlag = `` - if (depType === `devDependency`) { - typeFlag = `--dev` - } - const command = [ - `yarn`, - [`add`, `-W`, typeFlag, ...getPackageNames(pkgs)], - { - cwd: root, - }, - ] - - let commands - if (typeFlag !== ``) { - commands = [`add`, `-W`, typeFlag, ...getPackageNames(pkgs)] - } else { - commands = [`add`, `-W`, ...getPackageNames(pkgs)] - } + const commands = generateClientComands({ + packageNames, + depType, + packageManager: PACKAGE_MANGER, + }) - const { stderr, stdout } = await execa(`yarn`, commands, { + const { stderr, stdout } = await execa(PACKAGE_MANGER, commands, { cwd: root, }) diff --git a/packages/gatsby/src/recipes/providers/npm/package.test.js b/packages/gatsby/src/recipes/providers/npm/package.test.js index 06fef678f10c8..a75f7a10af740 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.test.js +++ b/packages/gatsby/src/recipes/providers/npm/package.test.js @@ -28,3 +28,38 @@ describe(`npm package resource`, () => { }) }) }) + +describe(`package manager client commands`, () => { + it(`generates the correct commands for yarn`, () => { + const yarnInstall = pkg.generateClientComands({ + packageManager: `yarn`, + depType: ``, + packageNames: [`gatsby`], + }) + + const yarnDevInstall = pkg.generateClientComands({ + packageManager: `yarn`, + depType: `devDependency`, + packageNames: [`eslint`], + }) + + expect(yarnInstall).toMatchSnapshot() + expect(yarnDevInstall).toMatchSnapshot() + }) + it(`generates the correct commands for npm`, () => { + const yarnInstall = pkg.generateClientComands({ + packageManager: `npm`, + depType: ``, + packageNames: [`gatsby`], + }) + + const yarnDevInstall = pkg.generateClientComands({ + packageManager: `npm`, + depType: `devDependency`, + packageNames: [`eslint`], + }) + + expect(yarnInstall).toMatchSnapshot() + expect(yarnDevInstall).toMatchSnapshot() + }) +}) From 32edae3ec593c23ad1de290eb2993bc9478d7b50 Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 13 Apr 2020 17:03:50 -0600 Subject: [PATCH 082/128] feat(recipes): Improve error handling and validation for MDX files and structure (#23085) * feat(recipes): Validate the presence of an introduction step * feat(recipes): Improve error handling and validation --- .../__snapshots__/recipe-machine.test.js.snap | 63 ++++++++++++- .../parser/__snapshots__/parser.test.js.snap | 13 ++- packages/gatsby/src/recipes/parser/index.js | 74 ++++++++++----- .../gatsby/src/recipes/parser/jsx-to-json.js | 25 ++--- .../gatsby/src/recipes/parser/parser.test.js | 26 +++++- packages/gatsby/src/recipes/recipe-machine.js | 57 ++++++++++-- .../gatsby/src/recipes/recipe-machine.test.js | 91 ++++++++++++++++++- packages/gatsby/src/recipes/validate-steps.js | 17 ++++ .../gatsby/src/recipes/validate-steps.test.js | 19 ++++ 9 files changed, 325 insertions(+), 60 deletions(-) create mode 100644 packages/gatsby/src/recipes/validate-steps.js create mode 100644 packages/gatsby/src/recipes/validate-steps.test.js diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index cf07fa7487aa6..550793abc7ab1 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -1,6 +1,67 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`it should error if part of the recipe fails validation 1`] = `[TypeError: Cannot read property 'slice' of undefined]`; +exports[`it should error if invalid jsx is passed 1`] = ` +Object { + "location": Object { + "column": 4, + "line": 2, + }, + "validationError": "Could not parse \\" { const toJson = value => { const obj = {} - jsxToJson(value).forEach(([type, props = {}]) => { - if (type === `\n`) { - return - } - obj[type] = obj[type] || [] - obj[type].push(props) - }) + try { + const values = jsxToJson(value) + values.forEach(([type, props = {}]) => { + if (type === `\n`) { + return undefined + } + obj[type] = obj[type] || [] + obj[type].push(props) + }) + } catch (e) { + throw e + } return obj } @@ -72,6 +77,10 @@ const handleImports = tree => { const unwrapImports = async (tree, imports) => new Promise((resolve, reject) => { + if (!Object.keys(imports).length) { + return resolve() + } + let count = 0 visit(tree, `jsx`, () => { @@ -83,10 +92,15 @@ const unwrapImports = async (tree, imports) => } visit(tree, `jsx`, async (node, index, parent) => { - const names = toJson(node.value) - const _newValue = removeElementByName(node.value, { - names: Object.keys(imports), - }) + let names + try { + names = toJson(node.value) + removeElementByName(node.value, { + names: Object.keys(imports), + }) + } catch (e) { + throw e + } if (names) { Object.keys(names).map(async name => { @@ -112,7 +126,7 @@ const partitionSteps = ast => { ast.children.forEach(node => { if (node.type === `thematicBreak`) { index++ - return + return undefined } steps[index] = steps[index] || [] @@ -136,17 +150,22 @@ const toMdxWithoutJsx = nodes => { } const parse = async src => { - const ast = u.parse(src) - const imports = handleImports(ast) - await unwrapImports(ast, imports) - const steps = partitionSteps(ast) - - return { - ast, - steps, - commands: extractCommands(steps), - stepsAsMdx: steps.map(toMdx), - stepsAsMdxWithoutJsx: steps.map(toMdxWithoutJsx), + try { + const ast = u.parse(src) + const imports = handleImports(ast) + await unwrapImports(ast, imports) + const steps = partitionSteps(ast) + const commands = extractCommands(steps) + + return { + ast, + steps, + commands, + stepsAsMdx: steps.map(toMdx), + stepsAsMdxWithoutJsx: steps.map(toMdxWithoutJsx), + } + } catch (e) { + throw e } } @@ -180,8 +199,13 @@ const getSource = async (pathOrUrl, projectRoot) => { module.exports = async (recipePath, projectRoot) => { const src = await getSource(recipePath, projectRoot) - const result = await parse(src) - return result + try { + const result = await parse(src) + return result + } catch (e) { + console.log(e) + throw e + } } module.exports.parse = parse diff --git a/packages/gatsby/src/recipes/parser/jsx-to-json.js b/packages/gatsby/src/recipes/parser/jsx-to-json.js index e764ee2d80cb9..a6bac7e68c370 100644 --- a/packages/gatsby/src/recipes/parser/jsx-to-json.js +++ b/packages/gatsby/src/recipes/parser/jsx-to-json.js @@ -119,19 +119,22 @@ const jsxToJson = input => { throw new TypeError(`Expected a string`) } - const parsed = acorn.Parser.extend(jsx({ allowNamespaces: false })).parse( - `${input}` - ) - + let parsed = null try { - if (parsed.body[0]) { - return parsed.body[0].expression.children - .map(getNode) - .filter(child => child) - } + parsed = acorn.Parser.extend(jsx({ allowNamespaces: false })).parse( + `${input}` + ) } catch (e) { - console.log(input) - console.log(e) + throw new Error(JSON.stringify({ + location: e.loc, + validationError: `Could not parse "${input}"`, + })) + } + + if (parsed.body[0]) { + return parsed.body[0].expression.children + .map(getNode) + .filter(child => child) } return [] diff --git a/packages/gatsby/src/recipes/parser/parser.test.js b/packages/gatsby/src/recipes/parser/parser.test.js index d3be0a5fbe948..6176251ca44ac 100644 --- a/packages/gatsby/src/recipes/parser/parser.test.js +++ b/packages/gatsby/src/recipes/parser/parser.test.js @@ -3,7 +3,7 @@ const path = require(`path`) const parser = require(`.`) -const fixturePath = path.join(__dirname, `../prettier-git-hook.mdx`) +const fixturePath = path.join(__dirname, `../mdx-src/prettier-git-hook.mdx`) const fixtureSrc = fs.readFileSync(fixturePath, `utf8`) test(`returns a set of commands`, async () => { @@ -24,14 +24,34 @@ import TestRecipe from 'https://gist.githubusercontent.com/johno/20503d2a2c80529 # Here is an imported recipe from a url! +--- + `) -expect(result.stepsAsMdx).toMatchSnapshot() + expect(result.stepsAsMdx).toMatchSnapshot() }) test(`fetches MDX from a url`, async () => { - const result = await parser('https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx') + const result = await parser( + "https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/b082a2febcdb0b26d8a799b0c953c165d49b51b9/test-recipe.mdx" + ) expect(result.commands).toMatchSnapshot() }) + +test(`raises an error if JSX doesn't parse`, async () => { + try { + await parser.parse(`# Hello, world! + +--- + + { let parsed + if (context.src) { parsed = await parser.parse(context.src) - } else { + } else if (context.recipePath && context.projectRoot) { parsed = await parser(context.recipePath, context.projectRoot) + } else { + throw new Error(JSON.stringify({ + validationError: 'A recipe must be specified' + })) } return parsed }, onError: { target: `doneError`, - actions: assign({ error: (context, event) => event.data }) + actions: assign({ + error: (context, event) => { + try { + const msg = JSON.parse(event.data.message) + return msg + } catch (e) { + return { + error: 'Could not parse recipe', + e + } + } + }, + }), }, onDone: { - target: `validatePlan`, + target: `validateSteps`, actions: assign({ steps: (context, event) => event.data.commands, - stepsAsMdx: (context, event) => event.data.stepsAsMdx - }) - } - } + stepsAsMdx: (context, event) => event.data.stepsAsMdx, + }), + }, + }, + }, + validateSteps: { + invoke: { + id: `validateSteps`, + src: async (context, event) => { + const result = await validateSteps(context.steps) + if (result.length > 0) { + throw new Error(JSON.stringify(result)) + } + + return undefined + }, + onDone: `validatePlan`, + onError: { + target: `doneError`, + actions: assign({ + error: (context, event) => JSON.parse(event.data.message), + }), + }, + }, }, validatePlan: { invoke: { diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 8e90ddae1abaf..601b657f46760 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -29,6 +29,8 @@ it(`should create plan for File resources`, done => { src: ` # File! +--- + `, currentStep: 0, @@ -37,7 +39,40 @@ it(`should create plan for File resources`, done => { recipeMachine.withContext(initialContext) ).onTransition(state => { if (state.value === `present plan`) { - expect(state.context.plan).toMatchSnapshot() + if (state.context.currentStep === 0) { + service.send(`CONTINUE`) + } else { + expect(state.context.plan).toMatchSnapshot() + service.stop() + done() + } + } + }) + + service.start() +}) + +it(`it should error if part of the recipe fails schema validation`, done => { + const initialContext = { + src: ` +# Hello, world + +--- + + + +--- + +--- + `, + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `doneError`) { + expect(state.context.error).toBeTruthy() + expect(state.context.error).toMatchSnapshot() service.stop() done() } @@ -46,10 +81,54 @@ it(`should create plan for File resources`, done => { service.start() }) -it(`it should error if part of the recipe fails validation`, done => { - const filePath = `./hi.md` +it(`it should error if the introduction step has a command`, done => { + const initialContext = { + src: ` +# Hello, world + + + `, + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `doneError`) { + expect(state.context.error).toBeTruthy() + expect(state.context.error).toMatchSnapshot() + service.stop() + done() + } + }) + + service.start() +}) + +it(`it should error if no src or recipePath has been given`, done => { + const initialContext = { + currentStep: 0, + } + const service = interpret( + recipeMachine.withContext(initialContext) + ).onTransition(state => { + if (state.value === `doneError`) { + expect(state.context.error).toBeTruthy() + expect(state.context.error).toMatchSnapshot() + service.stop() + done() + } + }) + + service.start() +}) + +it(`it should error if invalid jsx is passed`, done => { const initialContext = { - steps: [{ File: [{ path: filePath, contentz: `#yo` }] }, {}, {}], + src: ` +# Hello, world + + { src: ` # File! +--- + `, currentStep: 0, @@ -104,6 +185,8 @@ it(`should store created/changed/deleted resources on the context after applying src: ` # File! +--- + diff --git a/packages/gatsby/src/recipes/validate-steps.js b/packages/gatsby/src/recipes/validate-steps.js new file mode 100644 index 0000000000000..29bb2c505303c --- /dev/null +++ b/packages/gatsby/src/recipes/validate-steps.js @@ -0,0 +1,17 @@ +const ALLOWED_STEP_O_COMMANDS = [`Config`] + +module.exports = steps => { + const commandKeys = Object.keys(steps[0]).filter( + cmd => !ALLOWED_STEP_O_COMMANDS.includes(cmd) + ) + + if (commandKeys.length) { + return commandKeys.map(key => ({ + step: 0, + resource: key, + validationError: `${key} should not be used in the introduction step` + })) + } else { + return [] + } +} diff --git a/packages/gatsby/src/recipes/validate-steps.test.js b/packages/gatsby/src/recipes/validate-steps.test.js new file mode 100644 index 0000000000000..a23e89a112ac1 --- /dev/null +++ b/packages/gatsby/src/recipes/validate-steps.test.js @@ -0,0 +1,19 @@ +const validateSteps = require('./validate-steps') +const parser = require('./parser') + +const getErrors = async mdx => { + const { commands } = await parser.parse(mdx) + return validateSteps(commands) +} + +test(`raises a validation error if commands are in step 0`, async () => { + const result = await getErrors('') + + expect(result).toHaveLength(1) +}) + +test(`does not raise a validation error if Config is in step 0`, async () => { + const result = await getErrors('') + + expect(result).toHaveLength(0) +}) From c0d111cf7475faf46b561cbfde4b479a8127cb98 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 17:04:18 -0600 Subject: [PATCH 083/128] chore(recipes): test File resouces with remote file content (#23084) --- .../fs/__snapshots__/file.test.js.snap | 172 ++++++++++++++++++ .../src/recipes/providers/fs/file.test.js | 11 ++ packages/gatsby/src/recipes/todo.md | 4 +- 3 files changed, 185 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap index fc7e94f26cae3..f1c27aab60ef9 100644 --- a/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap +++ b/packages/gatsby/src/recipes/providers/fs/__snapshots__/file.test.js.snap @@ -51,3 +51,175 @@ Object { "newState": "Hello, world!1", } `; + +exports[`file resource e2e remote file resource test: File create 1`] = ` +Object { + "_message": "Wrote file file.txt", + "content": "query { + allGatsbyPlugin { + nodes { + name + options + resolvedOptions + package { + version + } + ... on GatsbyTheme { + files { + nodes { + path + } + } + shadowedFiles { + nodes { + path + } + } + } + } + } +}", + "id": "file.txt", + "path": "file.txt", +} +`; + +exports[`file resource e2e remote file resource test: File create plan 1`] = ` +Object { + "currentState": "", + "describe": "Write file.txt", + "diff": "- Original - 0 ++ Modified + 24 + ++ query { ++ allGatsbyPlugin { ++ nodes { ++ name ++ options ++ resolvedOptions ++ package { ++ version ++ } ++ ... on GatsbyTheme { ++ files { ++ nodes { ++ path ++ } ++ } ++ shadowedFiles { ++ nodes { ++ path ++ } ++ } ++ } ++ } ++ }  ++ }", + "newState": "query { + allGatsbyPlugin { + nodes { + name + options + resolvedOptions + package { + version + } + ... on GatsbyTheme { + files { + nodes { + path + } + } + shadowedFiles { + nodes { + path + } + } + } + } + } +}", +} +`; + +exports[`file resource e2e remote file resource test: File destroy 1`] = ` +Object { + "_message": "Wrote file file.txt", + "content": "https://gist.githubusercontent.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce/raw/545120bfecbe7b0f97f6f021801bc8b6370b5b41/gistfile2.txt", + "id": "file.txt", + "path": "file.txt", +} +`; + +exports[`file resource e2e remote file resource test: File update 1`] = ` +Object { + "_message": "Wrote file file.txt", + "content": "https://gist.githubusercontent.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce/raw/545120bfecbe7b0f97f6f021801bc8b6370b5b41/gistfile2.txt", + "id": "file.txt", + "path": "file.txt", +} +`; + +exports[`file resource e2e remote file resource test: File update plan 1`] = ` +Object { + "currentState": "query { + allGatsbyPlugin { + nodes { + name + options + resolvedOptions + package { + version + } + ... on GatsbyTheme { + files { + nodes { + path + } + } + shadowedFiles { + nodes { + path + } + } + } + } + } +}", + "describe": "Write file.txt", + "diff": "- Original - 23 ++ Modified + 3 + +- query { +- allGatsbyPlugin { +- nodes { +- name +- options +- resolvedOptions +- package { +- version +- } +- ... on GatsbyTheme { +- files { +- nodes { +- path +- } +- } +- shadowedFiles { +- nodes { +- path +- } +- } +- } +- } +- }  ++ const options = { ++ key: process.env.WHATEVER ++  + }", + "newState": "const options = { + key: process.env.WHATEVER + +}", +} +`; diff --git a/packages/gatsby/src/recipes/providers/fs/file.test.js b/packages/gatsby/src/recipes/providers/fs/file.test.js index 971e776eee56b..1d7e89032c30c 100644 --- a/packages/gatsby/src/recipes/providers/fs/file.test.js +++ b/packages/gatsby/src/recipes/providers/fs/file.test.js @@ -3,6 +3,8 @@ const resourceTestHelper = require(`../resource-test-helper`) const root = __dirname const content = `Hello, world!` +const url = `https://gist.githubusercontent.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce/raw/545120bfecbe7b0f97f6f021801bc8b6370b5b41/gistfile1.txt` +const url2 = `https://gist.githubusercontent.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce/raw/545120bfecbe7b0f97f6f021801bc8b6370b5b41/gistfile2.txt` describe(`file resource`, () => { test(`e2e file resource test`, async () => { @@ -14,4 +16,13 @@ describe(`file resource`, () => { partialUpdate: { content: content + `1` }, }) }) + test(`e2e remote file resource test`, async () => { + await resourceTestHelper({ + resourceModule: file, + resourceName: `File`, + context: { root }, + initialObject: { path: `file.txt`, content: url }, + partialUpdate: { content: url2 }, + }) + }) }) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index aff8d687853de..e8920ccdf7e8c 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -40,8 +40,8 @@ Kyle - [x] Make port selection dynamic - [x] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions -- [ ] use yarn/npm based on the user config -- [ ] write tests for remote files src in File +- [x] use yarn/npm based on the user config +- [x] write tests for remote files src in File - [ ] move back to "press enter to run" - [ ] write blog post From 40b0cdcf4b3cf79826d107b1fdfd380d55df0624 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 13 Apr 2020 17:06:41 -0600 Subject: [PATCH 084/128] update todos --- packages/gatsby/src/recipes/cli.js | 2 +- packages/gatsby/src/recipes/todo.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d4513457e0678..d941681db83a5 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -260,7 +260,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => {
    ))}
    - Do you want to run this step? Y/n + Press enter to run this step
    ) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index e8920ccdf7e8c..6d2ed357e9d67 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -42,18 +42,18 @@ Kyle - [x] Add large warning to recipes output that this is an experimental feature & might change at any moment + link to docs / umbrella issue for bug reports & discussions - [x] use yarn/npm based on the user config - [x] write tests for remote files src in File -- [ ] move back to "press enter to run" +- [ ] Gatsby recipes list (design and implementation) +- [x] move back to "press enter to run" - [ ] write blog post John - [ ] spike on bundling recipes into one file -- [ ] Gatsby recipes list (design and implementation) -- [ ] print pretty error when there's parsing errors of mdx files +- [x] print pretty error when there's parsing errors of mdx files - [ ] Move mdx recipes to its own package `gatsby-recipes` & pull them from unpkg - [ ] add CODEOWNERS file for recipes -- [ ] validate that the first step of recipes don't have any resources. They should just be for the title/description -- [ ] handle not finding a recipe +- [x] validate that the first step of recipes don't have any resources. They should just be for the title/description +- [x] handle not finding a recipe - [ ] test modifying gatsby-config.js from default starter ## Near-ish future From 2ef02d1cca2af50e4203cb0b115d44b47963962d Mon Sep 17 00:00:00 2001 From: John Otander Date: Mon, 13 Apr 2020 19:44:57 -0600 Subject: [PATCH 085/128] Update todos --- packages/gatsby/src/recipes/todo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 6d2ed357e9d67..157c39d3c1ff0 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -54,7 +54,7 @@ John - [ ] add CODEOWNERS file for recipes - [x] validate that the first step of recipes don't have any resources. They should just be for the title/description - [x] handle not finding a recipe -- [ ] test modifying gatsby-config.js from default starter +- [x] test modifying gatsby-config.js from default starter ## Near-ish future From 27376b0569324df5d6988c960720862fcdb215b8 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 09:53:39 -0600 Subject: [PATCH 086/128] feat(Recipes): Show list of recipes when one isn't passed in (#23086) * feat(Recipes): Show list of recipes when one isn't passed in * Fixes to recipes + styling tweaks * Update packages/gatsby/src/recipes/README.md Co-Authored-By: John Otander * make broken example actually broken Co-authored-by: John Otander --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/README.md | 32 +++ packages/gatsby/src/recipes/cli.js | 200 ++++++++++++++---- .../gatsby/src/recipes/mdx-src/emotion.mdx | 2 +- .../recipes/mdx-src/gatsby-plugin-layout.mdx | 39 ++++ ...atsby-theme-blog => gatsby-theme-blog.mdx} | 3 +- packages/gatsby/src/recipes/mdx-src/jest.mdx | 10 +- .../src/recipes/mdx-src/prettier-git-hook.mdx | 4 +- packages/gatsby/src/recipes/mdx-src/sass.mdx | 2 +- .../gatsby/src/recipes/mdx-src/theme-ui.mdx | 2 +- .../parser/__snapshots__/parser.test.js.snap | 4 +- .../src/recipes/providers/npm/package-json.js | 2 +- packages/gatsby/src/recipes/recipe-machine.js | 15 +- packages/gatsby/src/recipes/todo.md | 4 +- packages/gatsby/src/recipes/validate-steps.js | 12 +- 15 files changed, 263 insertions(+), 69 deletions(-) create mode 100644 packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx rename packages/gatsby/src/recipes/mdx-src/{gatsby-theme-blog => gatsby-theme-blog.mdx} (93%) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index faef3277e7180..461e303f1b38b 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -100,6 +100,7 @@ "import-jsx": "^4.0.0", "ink-box": "^1.0.0", "ink-link": "^1.0.0", + "ink-select-input": "^3.1.2", "invariant": "^2.2.4", "is-blank": "^2.1.0", "is-newline": "^1.0.0", diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index ea38821885eb0..73a66cdcfd2a0 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -135,3 +135,35 @@ Soon will support options. - **path** path to the file that should be created. The path is local to the root of the Node.js project (where the package.json is) - **content** URL to the content that should be written to the path. Eventually we'll support directly putting content here after some fixees to MDX. + +## FAQ / common issues + +### Q) My recipe is combining steps instead of running them seperately! + +We use the `---` break syntax from Markdown to separate steps. + +One quirk with it is for it to work, it must have an empty line above it. + +So this will work: + +```mdx +# Recipes + +--- + +a step + + +``` + +But this won't + +```mdx +# Recipes + +--- + +a step + + +``` diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d941681db83a5..1fa5b921a3ac0 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,8 +1,7 @@ const React = require(`react`) const fs = require(`fs`) const lodash = require(`lodash`) -import Boxen from "ink-box" - +const Boxen = require(`ink-box`) const { useState } = require(`react`) const { render, Box, Text, Color, useInput, useApp, Static } = require(`ink`) const Spinner = require(`ink-spinner`).default @@ -19,18 +18,107 @@ const { const { SubscriptionClient } = require(`subscriptions-transport-ws`) const fetch = require(`node-fetch`) const ws = require(`ws`) +const SelectInput = require(`ink-select-input`).default + +const MAX_UI_WIDTH = 100 + +// TODO try this and write out success stuff & last message? +// const enterAltScreenCommand = "\x1b[?1049h" +// const leaveAltScreenCommand = "\x1b[?1049l" +// process.stdout.write(enterAltScreenCommand) +// process.on("exit", () => { +// process.stdout.write(leaveAltScreenCommand) +// }) + +const WelcomeMessage = () => ( + <> + + Thank you for trying the experimental version of Gatsby Recipes! + +
    + Please ask questions, share your recipes, report bugs, and subscribe for + updates in our umbrella issue at + https://github.com/gatsbyjs/gatsby/issues/22991 +
    + +) + +const RecipesList = ({ setRecipe }) => { + const items = [ + { + label: `Add a custom ESLint config`, + value: `eslint.mdx`, + }, + { + label: `Add Jest`, + value: `jest.mdx`, + }, + // Waiting on joi2graphql support for Joi.object().unknown() + // with a JSON type. + // { + // label: "Automatically run Prettier on commits", + // value: "prettier-git-hook.mdx", + // }, + { + label: `Add Gatsby Theme Blog`, + value: `gatsby-theme-blog`, + }, + { + label: `Add Emotion`, + value: `emotion.mdx`, + }, + { + label: `Add Sass`, + value: `sass.mdx`, + }, + { + label: `Add Theme UI`, + value: `theme-ui.mdx`, + }, + // TODO layouts from Jeremey + // TODO mdx pages like tweet + // TODO add styled components + // TODO remaining recipes + // TODO constrain width of UI + ] + + return ( + ( + + {item.isSelected ? `>>` : ` `} + {item.label} + + )} + itemComponent={props => ( + {props.label} + )} + /> + ) +} let renderCount = 1 -const Div = props => ( - -) +const Div = props => { + const width = Math.min(process.stdout.columns, MAX_UI_WIDTH) + return ( + + ) +} // Markdown ignores new lines and so do we. function elimiateNewLines(children) { @@ -114,6 +202,12 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { ws ) + let showRecipesList = false + + if (!recipe) { + showRecipesList = true + } + const client = createClient({ fetch, url: GRAPHQL_ENDPOINT, @@ -129,6 +223,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { const RecipeInterpreter = () => { const [lastKeyPress, setLastKeyPress] = useState(``) + const [localRecipe, setRecipe] = useState(recipe) const { exit } = useApp() const [subscriptionResponse] = useSubscription( @@ -155,10 +250,13 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { `) subscriptionClient.connectionCallback = async () => { - try { - await createOperation({ recipePath: recipe, projectRoot }) - } catch (e) { - log(`error creating operation`, e) + if (!showRecipesList) { + log(`createOperation`) + try { + await createOperation({ recipePath: localRecipe, projectRoot }) + } catch (e) { + log(`error creating operation`, e) + } } } @@ -167,8 +265,11 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { JSON.parse(subscriptionResponse.data.operation.state) useInput((_, key) => { + if (showRecipesList) { + return + } setLastKeyPress(key) - if (key.return && state.value === `SUCCESS`) { + if (key.return && state && state.value === `SUCCESS`) { subscriptionClient.close() exit() process.exit() @@ -179,6 +280,33 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { log(`subscriptionResponse.data`, subscriptionResponse.data) + if (showRecipesList) { + return ( + <> + + + Select a recipe to run + + { + log(`yo`, { recipeItem, projectRoot }) + showRecipesList = false + try { + await createOperation({ + recipePath: recipeItem.value, + projectRoot, + }) + } catch (e) { + log(`error creating operation`, e) + } + log(`sent recipe`) + // setRecipe(recipeItem.value) + }} + /> + + ) + } + if (!state) { return ( @@ -234,7 +362,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { if (!isPlan || !isPresetPlanState) { return (
    - Press enter to continue + >> Press enter to continue
    ) } @@ -260,7 +388,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => {
    ))}
    - Press enter to run this step + >> Press enter to run this step
    ) @@ -335,24 +463,14 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { return ( <> - - Thank you for trying the experimental version of Gatsby Recipes! - -
    - Please ask questions, report bugs, and subscribe for updates in our - umbrella issue at https://github.com/gatsbyjs/gatsby/issues/22991 +
    + + {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( + ✅ {r._message} + ))} +
    - - {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( - ✅ {r._message} - ))} - + {state.context.currentStep === 0 && } {state.context.currentStep > 0 && state.value !== `done` && (
    @@ -362,9 +480,11 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => {
    )} - - {state.context.stepsAsMdx[state.context.currentStep]} - +
    + + {state.context.stepsAsMdx[state.context.currentStep]} + +
    @@ -373,12 +493,12 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { } const Wrapper = () => ( -
    + <> {` `} -
    + ) const Recipe = () => diff --git a/packages/gatsby/src/recipes/mdx-src/emotion.mdx b/packages/gatsby/src/recipes/mdx-src/emotion.mdx index bf53c3a76b0a2..440cfc57b1aef 100644 --- a/packages/gatsby/src/recipes/mdx-src/emotion.mdx +++ b/packages/gatsby/src/recipes/mdx-src/emotion.mdx @@ -1,4 +1,4 @@ -# Setup Gatsby with Emotion +# Setup Emotion [Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx b/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx new file mode 100644 index 0000000000000..8710d8029325f --- /dev/null +++ b/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx @@ -0,0 +1,39 @@ +# Setup gatsby-plugin-layout +Setup [gatsby-plugin-layout](https://www.gatsbyjs.org/packages/gatsby-plugin-layout/?=gatsby%20layout) + +This plugin enables adding components which live above the page components and persist across page changes. + +This can be helpful for: + +- Persisting layout between page changes for e.g. animating navigation +- Storing state when navigating pages +- Custom error handling using componentDidCatch +- Inject additional data into pages using React Context. + +--- + +Install necessary NPM packages + + + +--- + +Install the Layout plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go! + +Let's also write out a sample component to get started with. + + + +--- + +Read more about the documentation for Gatsby Layout Component here: +https://www.gatsbyjs.org/packages/gatsby-plugin-lay diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog b/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog.mdx similarity index 93% rename from packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog rename to packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog.mdx index 626eb04df0678..9b6c0e88b9d66 100644 --- a/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog +++ b/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog.mdx @@ -1,6 +1,7 @@ # Setup Gatsby Theme Blog [Gatsby theme blog](https://www.gatsbyjs.org/packages/gatsby-theme-blog/) is a great theme for adding blog functionality to your site. + --- Install necessary NPM packages @@ -15,7 +16,7 @@ Install the gatsby-theme-blog plugin in gatsby-config.js --- -Now let's add a post! (this part isn't working) +Now let's add a post! diff --git a/packages/gatsby/src/recipes/mdx-src/jest.mdx b/packages/gatsby/src/recipes/mdx-src/jest.mdx index e5142bb1bc8f1..4618a6a79a2f3 100644 --- a/packages/gatsby/src/recipes/mdx-src/jest.mdx +++ b/packages/gatsby/src/recipes/mdx-src/jest.mdx @@ -18,18 +18,12 @@ Adding some jest test files for you to play with --- diff --git a/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx b/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx index 6cca5ea05af2f..95f2ad8f44df6 100644 --- a/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx +++ b/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx @@ -1,6 +1,6 @@ -# Prettier Git Hook +# Automaically run Prettier on commits -Make sure all of your code is run through prettier when you commit it to git. +Make sure all of your code is run through Prettier when you commit it to git. We achieve this by configuring prettier to run on git hooks using husky and lint-staged. diff --git a/packages/gatsby/src/recipes/mdx-src/sass.mdx b/packages/gatsby/src/recipes/mdx-src/sass.mdx index 58c01bfb7f444..d9689d0606a63 100644 --- a/packages/gatsby/src/recipes/mdx-src/sass.mdx +++ b/packages/gatsby/src/recipes/mdx-src/sass.mdx @@ -1,4 +1,4 @@ -# Setup Gatsby with Sass +# Setup Sass Sass is an extension of CSS, adding nested rules, variables, mixins, selector inheritance, and more. In Gatsby, Sass code can be translated to well-formatted, standard CSS using a plugin. diff --git a/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx b/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx index 005e67fdfbece..dae36405f47cb 100644 --- a/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx +++ b/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx @@ -1,4 +1,4 @@ -# Add Theme UI +# Setup Theme UI This recipe helps you start developing with the [Theme UI](https://theme-ui.com) styling library. diff --git a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap index 41252193e3dd5..1b53fcbbe13f9 100644 --- a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap +++ b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap @@ -34,9 +34,9 @@ Add a package.json config object. exports[`partitions the MDX into steps 1`] = ` Array [ - "# Prettier Git Hook + "# Automaically run Prettier on commits -Make sure all of your code is run through prettier when you commit it to git. +Make sure all of your code is run through Prettier when you commit it to git. We achieve this by configuring prettier to run on git hooks using husky and lint-staged. ", diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index 7460bf90dbcd6..dfb5561920d3f 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -69,7 +69,7 @@ module.exports.plan = async ({ root }, { id, name, value }) => { currentState: JSON.stringify(currentState, null, 2), newState: JSON.stringify(newState, null, 2), describe: `Add ${key} to package.json`, - diff: '' // TODO: Make diff + diff: ``, // TODO: Make diff } } diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index 6b71cc8d19bdb..6e0cedb54cc86 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -2,7 +2,7 @@ const { Machine, assign } = require(`xstate`) const createPlan = require(`./create-plan`) const applyPlan = require(`./apply-plan`) -const validateSteps = require('./validate-steps') +const validateSteps = require(`./validate-steps`) const validateRecipe = require(`./validate-recipe`) const parser = require(`./parser`) @@ -32,9 +32,11 @@ const recipeMachine = Machine( } else if (context.recipePath && context.projectRoot) { parsed = await parser(context.recipePath, context.projectRoot) } else { - throw new Error(JSON.stringify({ - validationError: 'A recipe must be specified' - })) + throw new Error( + JSON.stringify({ + validationError: `A recipe must be specified`, + }) + ) } return parsed @@ -43,13 +45,14 @@ const recipeMachine = Machine( target: `doneError`, actions: assign({ error: (context, event) => { + console.log(msg) try { const msg = JSON.parse(event.data.message) return msg } catch (e) { return { - error: 'Could not parse recipe', - e + error: `Could not parse recipe ${context.recipePath}`, + e, } } }, diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 157c39d3c1ff0..45313814a92ed 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -7,7 +7,7 @@ - [x] Boot up server as a process - [x] Then run the CLI - [x] Clean up server after -- [ ] show plan to create or that nothing is necessary & then show in `` what was done +- [x] show plan to create or that nothing is necessary & then show in `` what was done ## alpha @@ -58,6 +58,7 @@ John ## Near-ish future +- [ ] support Joi.any & Joi.alternatives in joi2graphql for prettier-git-hook.mdx - [ ] Make a proper "Config" provider to add recipes dir, store data, etc. - [ ] init.js for providers to setup clients - [ ] validate resource config @@ -72,3 +73,4 @@ John - [ ] Implement config object for GatsbyPlugin - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } - [ ] handle people pressing Y & quit if they press "n" (for now) +- [ ] Automatically create list of recipes from the recipes directory (recipes resource 🤔) diff --git a/packages/gatsby/src/recipes/validate-steps.js b/packages/gatsby/src/recipes/validate-steps.js index 29bb2c505303c..1dc4988d752e0 100644 --- a/packages/gatsby/src/recipes/validate-steps.js +++ b/packages/gatsby/src/recipes/validate-steps.js @@ -6,11 +6,13 @@ module.exports = steps => { ) if (commandKeys.length) { - return commandKeys.map(key => ({ - step: 0, - resource: key, - validationError: `${key} should not be used in the introduction step` - })) + return commandKeys.map(key => { + return { + step: 0, + resource: key, + validationError: `Resources e.g. ${key} should not be placed in the introduction step`, + } + }) } else { return [] } From 0e482a218aed3f9fa91056bdb47f9e29e23bba3d Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 12:07:36 -0600 Subject: [PATCH 087/128] update todos & add layout recipe to list" --- packages/gatsby/src/recipes/cli.js | 4 ++++ packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx | 2 +- packages/gatsby/src/recipes/todo.md | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 1fa5b921a3ac0..d3a34df26db75 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -69,6 +69,10 @@ const RecipesList = ({ setRecipe }) => { label: `Add Gatsby Theme Blog`, value: `gatsby-theme-blog`, }, + { + label: `Add persistent layout component with gatsby-plugin-layout`, + value: `gatsby-plugin-layout`, + }, { label: `Add Emotion`, value: `emotion.mdx`, diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx b/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx index 8710d8029325f..7e107d97fd0e0 100644 --- a/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx +++ b/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx @@ -26,7 +26,7 @@ Install the Layout plugin in gatsby-config.js Sweet, now it's ready to go! -Let's also write out a sample component to get started with. +Let's also write out a sample layout component to get started with. Date: Tue, 14 Apr 2020 13:08:51 -0600 Subject: [PATCH 088/128] feat(recipes): Move recipes to a standalone package (#23108) * feat(recipes): Move recipes to a standalone package * Update prettier-git-hook.mdx Co-authored-by: Kyle Mathews --- packages/gatsby-recipes/README.md | 5 ++ packages/gatsby-recipes/package.json | 10 ++++ .../recipes}/emotion.mdx | 0 .../recipes}/eslint.mdx | 0 .../recipes}/gatsby-plugin-layout.mdx | 0 .../gatsby-recipes/recipes/gatsby-theme-blog | 28 +++++++++ .../recipes}/gatsby-theme-blog.mdx | 0 .../recipes}/jest.mdx | 0 .../recipes}/prettier-git-hook.mdx | 0 .../recipes}/sass.mdx | 0 .../recipes}/theme-ui.mdx | 0 .../parser/__snapshots__/parser.test.js.snap | 45 +++++++++++++- .../parser/fixtures/prettier-git-hook.mdx | 59 +++++++++++++++++++ packages/gatsby/src/recipes/parser/index.js | 18 +++++- .../gatsby/src/recipes/parser/parser.test.js | 26 +++++++- packages/gatsby/src/recipes/todo.md | 3 +- 16 files changed, 185 insertions(+), 9 deletions(-) create mode 100644 packages/gatsby-recipes/README.md create mode 100644 packages/gatsby-recipes/package.json rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/emotion.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/eslint.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/gatsby-plugin-layout.mdx (100%) create mode 100644 packages/gatsby-recipes/recipes/gatsby-theme-blog rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/gatsby-theme-blog.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/jest.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/prettier-git-hook.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/sass.mdx (100%) rename packages/{gatsby/src/recipes/mdx-src => gatsby-recipes/recipes}/theme-ui.mdx (100%) create mode 100644 packages/gatsby/src/recipes/parser/fixtures/prettier-git-hook.mdx diff --git a/packages/gatsby-recipes/README.md b/packages/gatsby-recipes/README.md new file mode 100644 index 0000000000000..ab11f916a3882 --- /dev/null +++ b/packages/gatsby-recipes/README.md @@ -0,0 +1,5 @@ +# Gatsby Recipes + +Collection of the official Gatsby Recipes (alpha). + +For more details see [the umbrella issue](https://github.com/gatsbyjs/gatsby/issues/22991). diff --git a/packages/gatsby-recipes/package.json b/packages/gatsby-recipes/package.json new file mode 100644 index 0000000000000..258f3da20e6ef --- /dev/null +++ b/packages/gatsby-recipes/package.json @@ -0,0 +1,10 @@ +{ + "name": "gatsby-recipes", + "version": "0.0.3", + "description": "Official Gatsby recipes", + "main": "index.js", + "keywords": [ + "gatsby-recipes" + ], + "license": "MIT" +} diff --git a/packages/gatsby/src/recipes/mdx-src/emotion.mdx b/packages/gatsby-recipes/recipes/emotion.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/emotion.mdx rename to packages/gatsby-recipes/recipes/emotion.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/eslint.mdx b/packages/gatsby-recipes/recipes/eslint.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/eslint.mdx rename to packages/gatsby-recipes/recipes/eslint.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx b/packages/gatsby-recipes/recipes/gatsby-plugin-layout.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/gatsby-plugin-layout.mdx rename to packages/gatsby-recipes/recipes/gatsby-plugin-layout.mdx diff --git a/packages/gatsby-recipes/recipes/gatsby-theme-blog b/packages/gatsby-recipes/recipes/gatsby-theme-blog new file mode 100644 index 0000000000000..626eb04df0678 --- /dev/null +++ b/packages/gatsby-recipes/recipes/gatsby-theme-blog @@ -0,0 +1,28 @@ +# Setup Gatsby Theme Blog + +[Gatsby theme blog](https://www.gatsbyjs.org/packages/gatsby-theme-blog/) is a great theme for adding blog functionality to your site. +--- + +Install necessary NPM packages + + + + +--- + +Install the gatsby-theme-blog plugin in gatsby-config.js + + + +--- +Now let's add a post! (this part isn't working) + + + +--- + +Sweet, now it's ready to go. + +Note that for the moment you'll need to delete your src/pages/index.js file. + +--- diff --git a/packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog.mdx b/packages/gatsby-recipes/recipes/gatsby-theme-blog.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/gatsby-theme-blog.mdx rename to packages/gatsby-recipes/recipes/gatsby-theme-blog.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/jest.mdx b/packages/gatsby-recipes/recipes/jest.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/jest.mdx rename to packages/gatsby-recipes/recipes/jest.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx b/packages/gatsby-recipes/recipes/prettier-git-hook.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/prettier-git-hook.mdx rename to packages/gatsby-recipes/recipes/prettier-git-hook.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/sass.mdx b/packages/gatsby-recipes/recipes/sass.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/sass.mdx rename to packages/gatsby-recipes/recipes/sass.mdx diff --git a/packages/gatsby/src/recipes/mdx-src/theme-ui.mdx b/packages/gatsby-recipes/recipes/theme-ui.mdx similarity index 100% rename from packages/gatsby/src/recipes/mdx-src/theme-ui.mdx rename to packages/gatsby-recipes/recipes/theme-ui.mdx diff --git a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap index 1b53fcbbe13f9..315ea67494027 100644 --- a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap +++ b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap @@ -14,6 +14,45 @@ Array [ ] `; +exports[`fetches a recipe from unpkg when official short form 1`] = ` +Array [ + "# Add Theme UI + +This recipe helps you start developing with the [Theme UI](https://theme-ui.com) styling library. + + +", + "Install packages. + + + +", + "Add the plugin \`gatsby-plugin-theme-ui\` to your \`gatsby-config.js\`. + + +", + "Write out Theme UI configuration files. + + + + +", + "**Success**! + +You're ready to get started! + +- Read the docs: +- Learn about the theme specification: +", +] +`; + exports[`handles imports from urls 1`] = ` Array [ "# Here is an imported recipe from a url! @@ -34,9 +73,9 @@ Add a package.json config object. exports[`partitions the MDX into steps 1`] = ` Array [ - "# Automaically run Prettier on commits + "# Prettier Git Hook -Make sure all of your code is run through Prettier when you commit it to git. +Make sure all of your code is run through prettier when you commit it to git. We achieve this by configuring prettier to run on git hooks using husky and lint-staged. ", @@ -89,6 +128,8 @@ if you'd like to change your prettier configuration. ] `; +exports[`raises an error when the recipe isn't known 1`] = `[Error: {"fetchError":"Could not fetch theme-uiz from official recipes"}]`; + exports[`returns a set of commands 1`] = ` Array [ Object {}, diff --git a/packages/gatsby/src/recipes/parser/fixtures/prettier-git-hook.mdx b/packages/gatsby/src/recipes/parser/fixtures/prettier-git-hook.mdx new file mode 100644 index 0000000000000..c71100de3a5a7 --- /dev/null +++ b/packages/gatsby/src/recipes/parser/fixtures/prettier-git-hook.mdx @@ -0,0 +1,59 @@ +# Automatically run Prettier on Git commits + +Make sure all of your code is run through Prettier when you commit it to git. +We achieve this by configuring prettier to run on git hooks using husky and +lint-staged. + +--- + +Install packages. + + + + + +--- + +Implement git hooks for prettier. + + + + +--- + +Write prettier config files. + + + + +--- + +Prettier, husky, and lint-staged are now installed! You can edit your `.prettierrc` +if you'd like to change your prettier configuration. diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js index aeca02b6aa2cd..a0f58787f257d 100644 --- a/packages/gatsby/src/recipes/parser/index.js +++ b/packages/gatsby/src/recipes/parser/index.js @@ -180,14 +180,26 @@ const isRelative = path => { const getSource = async (pathOrUrl, projectRoot) => { let recipePath if (isUrl(pathOrUrl)) { - const result = await fetch(pathOrUrl) - const src = await result.text() + const res = await fetch(pathOrUrl) + const src = await res.text() return src } if (isRelative(pathOrUrl)) { recipePath = path.join(projectRoot, pathOrUrl) } else { - recipePath = path.join(__dirname, `../mdx-src`, pathOrUrl) + const url = `https://unpkg.com/gatsby-recipes/recipes/${pathOrUrl}` + const res = await fetch(url.endsWith('.mdx') ? url : url + '.mdx') + + if (res.status !== 200) { + throw new Error( + JSON.stringify({ + fetchError: `Could not fetch ${pathOrUrl} from official recipes`, + }) + ) + } + + const src = await res.text() + return src } if (recipePath.slice(-4) !== `.mdx`) { recipePath += `.mdx` diff --git a/packages/gatsby/src/recipes/parser/parser.test.js b/packages/gatsby/src/recipes/parser/parser.test.js index 6176251ca44ac..e4f906c4c461f 100644 --- a/packages/gatsby/src/recipes/parser/parser.test.js +++ b/packages/gatsby/src/recipes/parser/parser.test.js @@ -3,9 +3,29 @@ const path = require(`path`) const parser = require(`.`) -const fixturePath = path.join(__dirname, `../mdx-src/prettier-git-hook.mdx`) +const fixturePath = path.join(__dirname, `fixtures/prettier-git-hook.mdx`) const fixtureSrc = fs.readFileSync(fixturePath, `utf8`) +test(`fetches a recipe from unpkg when official short form`, async () => { + const result = await parser(`theme-ui`) + + expect(result.stepsAsMdx).toMatchSnapshot() +}) + +test(`fetches a recipe from unpkg when official short form and .mdx`, async () => { + const result = await parser(`theme-ui.mdx`) + + expect(result).toBeTruthy() +}) + +test(`raises an error when the recipe isn't known`, async () => { + try { + await parser(`theme-uiz`) + } catch (e) { + expect(e).toMatchSnapshot() + } +}) + test(`returns a set of commands`, async () => { const result = await parser.parse(fixtureSrc) @@ -34,7 +54,7 @@ import TestRecipe from 'https://gist.githubusercontent.com/johno/20503d2a2c80529 test(`fetches MDX from a url`, async () => { const result = await parser( - "https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/b082a2febcdb0b26d8a799b0c953c165d49b51b9/test-recipe.mdx" + `https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/b082a2febcdb0b26d8a799b0c953c165d49b51b9/test-recipe.mdx` ) expect(result.commands).toMatchSnapshot() @@ -51,7 +71,7 @@ test(`raises an error if JSX doesn't parse`, async () => { `) } catch (e) { expect(e).toMatchInlineSnapshot( - `[Error: {"location":{"line":1,"column":43},"validationError":"Could not parse \\" Date: Tue, 14 Apr 2020 13:17:00 -0600 Subject: [PATCH 089/128] Prettier color --- packages/gatsby/src/recipes/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d3a34df26db75..b28ec8312fde9 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -34,7 +34,7 @@ const WelcomeMessage = () => ( <> Date: Tue, 14 Apr 2020 13:39:12 -0600 Subject: [PATCH 090/128] feat(recipes): Format gatsby-config changes with Prettier (#23112) * Prettier color * feat(recipes): Format gatsby-config changes with Prettier --- packages/gatsby/package.json | 1 + packages/gatsby/src/recipes/cli.js | 2 +- .../gatsby/__snapshots__/plugin.test.js.snap | 489 ++++++++++++------ .../src/recipes/providers/gatsby/plugin.js | 19 +- packages/gatsby/src/recipes/todo.md | 1 + 5 files changed, 348 insertions(+), 164 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 461e303f1b38b..e3e25a8137c90 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -137,6 +137,7 @@ "pnp-webpack-plugin": "^1.6.4", "postcss-flexbugs-fixes": "^4.2.0", "postcss-loader": "^3.0.0", + "prettier": "^2.0.4", "prompts": "^2.3.1", "prop-types": "^15.7.2", "raw-loader": "^0.5.1", diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d3a34df26db75..b28ec8312fde9 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -34,7 +34,7 @@ const WelcomeMessage = () => ( <> { const configPath = path.join(root, `gatsby-config.js`) const configSrc = await fs.readFile(configPath, `utf8`) - const code = addPluginToConfig(configSrc, name) + const prettierConfig = await prettier.resolveConfig(root) + + let code = addPluginToConfig(configSrc, name) + code = prettier.format(code, { ...prettierConfig, parser: `babel` }) await fs.writeFile(configPath, code) @@ -244,8 +248,17 @@ exports.validate = validate module.exports.plan = async ({ root }, { id, name }) => { const fullName = id || name const configPath = path.join(root, `gatsby-config.js`) - const src = await fs.readFile(configPath, `utf8`) - const newContents = addPluginToConfig(src, fullName) + const prettierConfig = await prettier.resolveConfig(root) + let src = await fs.readFile(configPath, `utf8`) + src = prettier.format(src, { + ...prettierConfig, + parser: `babel`, + }) + let newContents = addPluginToConfig(src, fullName) + newContents = prettier.format(newContents, { + ...prettierConfig, + parser: `babel`, + }) const diff = await getDiff(src, newContents) return { diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 51d871d7ddec3..89f3af49cdf56 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -44,6 +44,7 @@ Kyle - [x] write tests for remote files src in File - [x] Gatsby recipes list (design and implementation) - [x] move back to "press enter to run" +- [x] Run gatsby-config.js changes through prettier to avoid weird diffs - [ ] write blog post John From 197f63969f98b127b0d090eddd8c1668cd8dcfd4 Mon Sep 17 00:00:00 2001 From: shannonbux <32467162+shannonbux@users.noreply.github.com> Date: Tue, 14 Apr 2020 15:21:28 -0700 Subject: [PATCH 091/128] Bigger changes (#23078) * Bigger changes I switched the order so a person can experience the example first, then see how it was written, and then try writing their own * update based on @jxnblk 's suggestion thx! * Restructuring of install instructions and headers * Add cd command * formatting * a couple small nits (#23117) Do these make sense @laurieontech? Co-authored-by: Laurie Barth Co-authored-by: Kyle Mathews --- packages/gatsby/src/recipes/README.md | 95 +++++++++++++++++++-------- 1 file changed, 66 insertions(+), 29 deletions(-) diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index 73a66cdcfd2a0..c633ac95b13c9 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -20,20 +20,70 @@ Follow the issue for updates! https://github.com/gatsbyjs/gatsby/issues/22991 -## How to write a recipe +## Recipe setup -Let's write our first Recipe to setup Emotion on a Gatsby site. +Upgrade the global gatsby-cli package to use the new recipes command. + +```shell +npm install -g gatsby-cli@recipes +``` + +To confirm that this worked, run `gatsby -v` in your terminal. The output should show the following: `Gatsby CLI version: 2.11.4-recipes.53`. + +### Running an example recipe + +Now you can test out recipes! Start with a recipe for installing `emotion` by following these steps: + +1. Create a new Hello World Gatsby site: + +```shell +gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world +``` + +1. Navigate into that project directory: + +```shell +cd try-emotion +``` + +1. Upgrade the version of Gatsby the project is using to a version that works with Recipes. + Note that you should use the package manager you've selected to work with Gatsby projects. + +- If it's yarn, type this command: + ```shell + yarn add gatsby@recipes + ``` +- For npm, type this command: + ```shell + npm install gatsby@recipes + ``` + +1. Now you can run the `emotion` recipe with this command: + +```shell +gatsby recipes emotion +``` + +## Developing Recipes + +### An example MDX recipe + +Here's how you would write the `gatsby recipes emotion` recipe you just ran: ```mdx # Setup Gatsby with Emotion [Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. ---- // use three dashes to separate steps of the recipe + + +--- Install necessary NPM packages - // refer to the API in this doc to see what APIs are available, like `NPMPackage` + + + @@ -62,37 +112,15 @@ Read more about Emotion on the official Emotion docs site: https://emotion.sh/docs/introduction ``` -Let's try running out this Recipe! - -First create a new Hello World Gatsby site: - -`gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world` - -Meanwhile also upgrade the global gatsby-cli package to use the one with new recipes command. - -`npm install -g gatsby-cli@recipes` - -Once the global finishes installing, running `gatsby -v` should show this as your version: `Gatsby CLI version: 2.11.4-recipes.53` - -Upgrade the version of Gatsby installed to use one with Recipes. +### How to run recipes -`yarn add gatsby@recipes` - -Now run the Emotion recipe and follow the commands. - -`gatsby recipes emotion` - -## Ways to run Recipes - -You can run built-in Recipes, ones you write locally, and ones people have posted online. +You can run built-in recipes, ones you write locally, and ones people have posted online. To run a local recipe, make sure to start the path to the recipe with a period like `gatsby recipes ./my-cool-recipe.mdx` To run a remote recipe, just paste in the path to the recipe e.g. `gatsby recipes https://example.com/sweet-recipe.mdx` -## How to write your own - -### API +### Recipe API #### `` @@ -136,6 +164,8 @@ Soon will support options. - **path** path to the file that should be created. The path is local to the root of the Node.js project (where the package.json is) - **content** URL to the content that should be written to the path. Eventually we'll support directly putting content here after some fixees to MDX. +> Note that this content is stored in a [GitHub gist](https://gist.github.com/). When linking to a gist you'll want to click on the "Raw" button and copy the URL from that page. + ## FAQ / common issues ### Q) My recipe is combining steps instead of running them seperately! @@ -167,3 +197,10 @@ a step ``` + +### Q) What kind of recipe should I write? + +If you’d like to write a recipe, there are two great places to get an idea: + +- Think of a task that took you more time than other tasks in the last Gatsby site you built. Is there a way to automate any part of that task? +- Look at this list of recipes in the Gatsby docs. Many of these can be partially or fully automated through creating a recipe `mdx` file. https://www.gatsbyjs.org/docs/recipes/ From 74350b08af9befb7152e388a6c01385ae8ab3249 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 16:56:11 -0600 Subject: [PATCH 092/128] feat(recipes): Add more recipes (#23119) * Add Typescript recipe * remove old duplicate * Add Styled Components Recipe * More bottom margin * Add Cypress recipe * Add recipe for animated page transitions * Update packages/gatsby-recipes/recipes/cypress.mdx Co-Authored-By: Dustin Schau * Update packages/gatsby-recipes/recipes/cypress.mdx Co-Authored-By: Dustin Schau Co-authored-by: Dustin Schau --- .../recipes/animated-page-transitions.mdx | 32 +++++++++ packages/gatsby-recipes/recipes/cypress.mdx | 70 +++++++++++++++++++ .../gatsby-recipes/recipes/gatsby-theme-blog | 28 -------- .../recipes/styled-components.mdx | 37 ++++++++++ packages/gatsby-recipes/recipes/theme-ui.mdx | 2 +- .../gatsby-recipes/recipes/typescript.mdx | 30 ++++++++ packages/gatsby/src/recipes/cli.js | 26 +++++-- .../recipes/providers/gatsby/shadow-file.js | 26 +++---- packages/gatsby/src/recipes/todo.md | 5 ++ 9 files changed, 208 insertions(+), 48 deletions(-) create mode 100644 packages/gatsby-recipes/recipes/animated-page-transitions.mdx create mode 100644 packages/gatsby-recipes/recipes/cypress.mdx delete mode 100644 packages/gatsby-recipes/recipes/gatsby-theme-blog create mode 100644 packages/gatsby-recipes/recipes/styled-components.mdx create mode 100644 packages/gatsby-recipes/recipes/typescript.mdx diff --git a/packages/gatsby-recipes/recipes/animated-page-transitions.mdx b/packages/gatsby-recipes/recipes/animated-page-transitions.mdx new file mode 100644 index 0000000000000..52af88500a487 --- /dev/null +++ b/packages/gatsby-recipes/recipes/animated-page-transitions.mdx @@ -0,0 +1,32 @@ +# Create animated transitions between Gatsby pages + +This recipe helps you create transitions for animating between entering and exiting Gatsby pages. + +--- + +The first step is installing the NPM packages you need: + + + + +--- + +Add the plugin to your Gatsby config. + + + +--- + +Now let's Create a few example pages to animate between: + + + + + +--- + +When you run your site you can navigate to http://localhost:8000/transition-paint-drip to try it out. + +See more examples about usage in the docs for the transition link plugin: https://transitionlink.tylerbarnes.ca/docs/ + +And your recipe is served! diff --git a/packages/gatsby-recipes/recipes/cypress.mdx b/packages/gatsby-recipes/recipes/cypress.mdx new file mode 100644 index 0000000000000..573d06290f4ef --- /dev/null +++ b/packages/gatsby-recipes/recipes/cypress.mdx @@ -0,0 +1,70 @@ +Gatsby and Cypress can be used together seamlessly (and should be!). [Cypress](https://cypress.io) enables you to run end-to-end tests on your client-side application, which is what Gatsby produces. + +First, we'll want to install Cypress and additional dependencies. + +--- + + + + + +--- + +Well look at that — we've added dependencies to your package.json and we also installed a useful package `gatsby-cypress`. `gatsby-cypress` exposes additional Cypress functionality which makes Gatsby and Cypress work together just a bit more nicely. We'll show that later with our first test, but hold tight for just a bit because first we need to scaffold out some boilerplate files for Cypress. + +--- + + + + + +--- + +Cool cool! So we created a local `cypress` folder with two sub-folders, `support` and `plugins`. We've also automatically included all the nice `gatsby-cypress` utilities, which we can now use in our first test. + +--- + + + +--- + +Our first test! You'll notice it's failing. This is intentional -- we'd like you to run the test and fix it. This raises a question -- how do you run a Cypress test? Easy peasy. + +--- + + + + + + + +--- + +Nifty! We've added two scripts: + +- `start-server-and-test`: This spins up a local Gatsby development server and "waits" until it's live so we can then run our tests +- `test:e2e`: This is the command you'll use to run your tests. + +Let's give it a try. Run the following command in your terminal. + +npm run test:e2e + +Now you'll have a way to run and validate your Cypress tests with the dream-team combo of Gatsby and Cypress. diff --git a/packages/gatsby-recipes/recipes/gatsby-theme-blog b/packages/gatsby-recipes/recipes/gatsby-theme-blog deleted file mode 100644 index 626eb04df0678..0000000000000 --- a/packages/gatsby-recipes/recipes/gatsby-theme-blog +++ /dev/null @@ -1,28 +0,0 @@ -# Setup Gatsby Theme Blog - -[Gatsby theme blog](https://www.gatsbyjs.org/packages/gatsby-theme-blog/) is a great theme for adding blog functionality to your site. ---- - -Install necessary NPM packages - - - - ---- - -Install the gatsby-theme-blog plugin in gatsby-config.js - - - ---- -Now let's add a post! (this part isn't working) - - - ---- - -Sweet, now it's ready to go. - -Note that for the moment you'll need to delete your src/pages/index.js file. - ---- diff --git a/packages/gatsby-recipes/recipes/styled-components.mdx b/packages/gatsby-recipes/recipes/styled-components.mdx new file mode 100644 index 0000000000000..861fdfcf5f4a3 --- /dev/null +++ b/packages/gatsby-recipes/recipes/styled-components.mdx @@ -0,0 +1,37 @@ +# Setup Styled Components + +[Styled Components](https://styled-components.com/) is visual primitives for the component age. +Use the best bits of ES6 and CSS to style your apps without stress 💅 + +--- + +Install necessary NPM packages + + + + + +--- + +Install the Styled Components plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go. + +Let's also write out an example page you can use to play +with Styled Components. + + + +--- + +Read more about Styled Components on the official docs site: + +https://styled-components.com/ + diff --git a/packages/gatsby-recipes/recipes/theme-ui.mdx b/packages/gatsby-recipes/recipes/theme-ui.mdx index dae36405f47cb..4d1ff983ab8be 100644 --- a/packages/gatsby-recipes/recipes/theme-ui.mdx +++ b/packages/gatsby-recipes/recipes/theme-ui.mdx @@ -23,7 +23,7 @@ Write out Theme UI configuration files. + + + + +--- + +Install the plugin `gatsby-plugin-typescript` in your `gatsby-config.js`. + + + +--- + +Add a tsconfig.json file to control how Typescript processes your code. + + + +--- + +Typescript is now setup! + +You can now add Typescript code, components, and pages in your sites `src` directory. diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index b28ec8312fde9..d2d34fc5e4432 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -73,23 +73,35 @@ const RecipesList = ({ setRecipe }) => { label: `Add persistent layout component with gatsby-plugin-layout`, value: `gatsby-plugin-layout`, }, + { + label: `Add Theme UI`, + value: `theme-ui.mdx`, + }, { label: `Add Emotion`, value: `emotion.mdx`, }, + { + label: `Add Styled Components`, + value: `styled-components.mdx`, + }, { label: `Add Sass`, value: `sass.mdx`, }, { - label: `Add Theme UI`, - value: `theme-ui.mdx`, + label: `Add Typescript`, + value: `typescript.mdx`, + }, + { + label: `Add Cypress testing`, + value: `cypress.mdx`, + }, + { + label: `Add animated page transition support`, + value: `animated-page-transitions.mdx`, }, - // TODO layouts from Jeremey - // TODO mdx pages like tweet - // TODO add styled components // TODO remaining recipes - // TODO constrain width of UI ] return ( @@ -162,7 +174,7 @@ const components = { return ( fs.existsSync(filePath) const relativePathForShadowedFile = ({ theme, filePath }) => { const [_src, ...filePathParts] = filePath.split(path.sep) - const relativePath = path.join('src', theme, path.join(...filePathParts)) + const relativePath = path.join(`src`, theme, path.join(...filePathParts)) return relativePath } @@ -49,7 +49,7 @@ const read = async ({ root }, id) => { id, theme, path: id, - contents + contents, } resource._message = message(resource) @@ -67,7 +67,7 @@ const schema = { theme: Joi.string(), path: Joi.string(), contents: Joi.string(), - ...resourceSchema + ...resourceSchema, } module.exports.schema = schema module.exports.validate = resource => @@ -78,34 +78,36 @@ module.exports.update = create module.exports.read = read module.exports.destroy = destroy -const message = resource => `Shadowed ${resource.id || resource.path} from ${resource.theme}` +const message = resource => + `Shadowed ${resource.id || resource.path} from ${resource.theme}` module.exports.plan = async ({ root }, { theme, path: filePath, id }) => { + let currentResource = `` if (!id) { const [_src, ...filePathParts] = filePath.split(path.sep) - id = path.join('src', theme, path.join(...filePathParts)) + id = path.join(`src`, theme, path.join(...filePathParts)) } - const currentResource = await read({ root }, id) || {} + currentResource = (await read({ root }, id)) || {} const [_src, _theme, ...shadowPathParts] = id.split(path.sep) const fullFilePathToShadow = path.join( root, `node_modules`, theme, - 'src', + `src`, path.join(...shadowPathParts) ) - const newContents = await fs.readFile(fullFilePathToShadow, 'utf8') + const newContents = await fs.readFile(fullFilePathToShadow, `utf8`) const newResource = { id, theme, path: filePath, - contents: newContents + contents: newContents, } - const diff = await getDiff(currentResource.contents || '', newContents) + const diff = await getDiff(currentResource.contents || ``, newContents) return { id, diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 89f3af49cdf56..d91976c2a1a40 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -45,6 +45,8 @@ Kyle - [x] Gatsby recipes list (design and implementation) - [x] move back to "press enter to run" - [x] Run gatsby-config.js changes through prettier to avoid weird diffs +- [ ] document ShadowFile +- [ ] Remove mention of canary release before merging - [ ] write blog post John @@ -76,3 +78,6 @@ John - [ ] Handle JS in config objects? { **\_javascript: "`\${**dirname}/foo/bar`" } - [ ] handle people pressing Y & quit if they press "n" (for now) - [ ] Automatically create list of recipes from the recipes directory (recipes resource 🤔) +- [ ] ShadowFile needs more validation — validate the file to shadow exists. +- [ ] Add eslint support & add Typescript eslint plugins to the typescript recipe. +- [ ] add recipe mdx-pages once we can write out options https://gist.github.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce From 0ca5abb75e4d8fdf729f97f31d31246a87777a9f Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 17:08:51 -0600 Subject: [PATCH 093/128] Fix name of and document it --- packages/gatsby-recipes/recipes/theme-ui.mdx | 2 +- packages/gatsby/src/recipes/README.md | 9 +++++++++ packages/gatsby/src/recipes/cli.js | 2 +- .../parser/__snapshots__/parser.test.js.snap | 2 +- .../recipes/providers/gatsby/shadow-file.test.js | 16 ++++++++-------- packages/gatsby/src/recipes/resources.js | 6 +++--- packages/gatsby/src/recipes/todo.md | 3 ++- 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/gatsby-recipes/recipes/theme-ui.mdx b/packages/gatsby-recipes/recipes/theme-ui.mdx index 4d1ff983ab8be..8ad0fe1cff2cb 100644 --- a/packages/gatsby-recipes/recipes/theme-ui.mdx +++ b/packages/gatsby-recipes/recipes/theme-ui.mdx @@ -21,7 +21,7 @@ Add the plugin `gatsby-plugin-theme-ui` to your `gatsby-config.js`. Write out Theme UI configuration files. - diff --git a/packages/gatsby/src/recipes/README.md b/packages/gatsby/src/recipes/README.md index c633ac95b13c9..e13c7aa151efc 100644 --- a/packages/gatsby/src/recipes/README.md +++ b/packages/gatsby/src/recipes/README.md @@ -136,6 +136,15 @@ Soon will support options. - **name** name of the plugin +#### `` + + + +##### props + +- **theme** the name of the theme (or plugin) which provides the file you'd like to shadow +- **path** the path to the file within the theme. E.g. the example file above lives at `node_modules/gatsby-theme-blog/src/components/seo.js` + #### `` diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index d2d34fc5e4432..b2ba02a7b6b60 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -189,7 +189,7 @@ const components = { NPMPackageJson: () => null, NPMPackage: () => null, File: () => null, - ShadowFile: () => null, + GatsbyShadowFile: () => null, NPMScript: () => null, } diff --git a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap index 315ea67494027..eb9350c0304cb 100644 --- a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap +++ b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap @@ -33,7 +33,7 @@ This recipe helps you start developing with the [Theme UI](https://theme-ui.com) ", "Write out Theme UI configuration files. - diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js index f2b3c8060fed8..4306fc3d8edfa 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.test.js @@ -4,10 +4,10 @@ const rimraf = require(`rimraf`) const shadowFile = require(`./shadow-file`) const resourceTestHelper = require(`../resource-test-helper`) -const root = path.join(__dirname, 'fixtures') +const root = path.join(__dirname, `fixtures`) const cleanup = () => { - rimraf.sync(path.join(root, 'src')) + rimraf.sync(path.join(root, `src`)) } beforeEach(() => { @@ -22,16 +22,16 @@ describe(`Shadow File resource`, () => { test(`e2e shadow file resource test`, async () => { await resourceTestHelper({ resourceModule: shadowFile, - resourceName: `ShadowFile`, + resourceName: `GatsbyShadowFile`, context: { root }, initialObject: { - theme: 'gatsby-theme-blog', - path: `src/components/author.js` + theme: `gatsby-theme-blog`, + path: `src/components/author.js`, }, partialUpdate: { - theme: 'gatsby-theme-blog', - path: `src/components/author.js` - } + theme: `gatsby-theme-blog`, + path: `src/components/author.js`, + }, }) }) }) diff --git a/packages/gatsby/src/recipes/resources.js b/packages/gatsby/src/recipes/resources.js index e0bc5c2756ff3..9d0660fc9325d 100644 --- a/packages/gatsby/src/recipes/resources.js +++ b/packages/gatsby/src/recipes/resources.js @@ -4,7 +4,7 @@ const gatsbyShadowFileResource = require(`./providers/gatsby/shadow-file`) const npmPackageResource = require(`./providers/npm/package`) const npmPackageScriptResource = require(`./providers/npm/script`) const npmPackageJsonResource = require(`./providers/npm/package-json`) -const gitIgnoreResource = require('./providers/git/ignore') +const gitIgnoreResource = require(`./providers/git/ignore`) const configResource = { create: () => {}, @@ -17,12 +17,12 @@ const configResource = { const componentResourceMapping = { File: fileResource, GatsbyPlugin: gatsbyPluginResource, - ShadowFile: gatsbyShadowFileResource, + GatsbyShadowFile: gatsbyShadowFileResource, Config: configResource, NPMPackage: npmPackageResource, NPMScript: npmPackageScriptResource, NPMPackageJson: npmPackageJsonResource, - GitIgnore: gitIgnoreResource + GitIgnore: gitIgnoreResource, } module.exports = componentResourceMapping diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index d91976c2a1a40..9d73ec869147e 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -45,7 +45,7 @@ Kyle - [x] Gatsby recipes list (design and implementation) - [x] move back to "press enter to run" - [x] Run gatsby-config.js changes through prettier to avoid weird diffs -- [ ] document ShadowFile +- [x] document ShadowFile - [ ] Remove mention of canary release before merging - [ ] write blog post @@ -81,3 +81,4 @@ John - [ ] ShadowFile needs more validation — validate the file to shadow exists. - [ ] Add eslint support & add Typescript eslint plugins to the typescript recipe. - [ ] add recipe mdx-pages once we can write out options https://gist.github.com/KyleAMathews/3d763491e5c4c6396e1a6a626b2793ce +- [ ] Add PWA recipe once we can write options https://gist.githubusercontent.com/gillkyle/9e4fa3d019c525aef2f4bd431c806879/raw/f4d42a81190d2cada59688e6acddc6b5e97fe586/make-your-site-a-pwa.mdx From feddd5ab274cf06874ff99e9d8f600934d607d5f Mon Sep 17 00:00:00 2001 From: John Otander Date: Tue, 14 Apr 2020 21:37:29 -0600 Subject: [PATCH 094/128] feat(recipes): Bundle react libraries into the cli (#23122) * Begin bundling cli with react using webpack * Use proper imports for gql things * Mark proper libraries for bundling the cli --- packages/gatsby/package.json | 6 +- packages/gatsby/src/commands/recipes.ts | 2 +- packages/gatsby/src/recipes/cli.js | 573 ++++++++++++------------ packages/gatsby/src/recipes/index.js | 8 +- packages/gatsby/src/recipes/todo.md | 2 +- packages/gatsby/webpack.config.js | 32 ++ 6 files changed, 332 insertions(+), 291 deletions(-) create mode 100644 packages/gatsby/webpack.config.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index e3e25a8137c90..b65f1673acda9 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -173,7 +173,6 @@ "util.promisify": "^1.0.1", "uuid": "^3.4.0", "v8-compile-cache": "^1.1.2", - "webpack": "~4.42.0", "webpack-dev-middleware": "^3.7.2", "webpack-dev-server": "^3.10.3", "webpack-hot-middleware": "^2.25.0", @@ -196,6 +195,8 @@ "react": "^16.12.0", "react-dom": "^16.12.0", "rimraf": "^3.0.2", + "webpack": "^4.42.1", + "webpack-node-externals": "^1.7.2", "xhr-mock": "^2.5.1", "zipkin": "^0.19.2", "zipkin-javascript-opentracing": "^2.1.0", @@ -243,8 +244,7 @@ "postbuild": "node scripts/output-api-file.js", "build:internal-plugins": "copyfiles -u 1 src/internal-plugins/**/package.json dist", "build:rawfiles": "copyfiles -u 1 src/internal-plugins/**/raw_* dist", - "build:recipes": "copyfiles -u 1 src/recipes/mdx-src/*.mdx dist", - "watch:recipes": "copy-and-watch src/recipes/mdx-src/*.mdx dist/recipes/mdx-src", + "build:recipes": "webpack", "build:cjs": "babel cache-dir --out-dir cache-dir/commonjs --ignore **/__tests__", "build:src": "babel src --out-dir dist --source-maps --verbose --ignore **/gatsby-cli.js,src/internal-plugins/dev-404-page/raw_dev-404-page.js,**/__tests__ --extensions \".ts,.js\"", "clean-test-bundles": "find test/ -type f -name bundle.js* -exec rm -rf {} +", diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 45529b40795a5..d830b1c8a6b42 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -50,7 +50,7 @@ module.exports = async (program: IProgram): Promise => { let started = false subprocess.stdout.on("data", data => { if (!started) { - const runRecipe = require(`../recipes/index`) + const runRecipe = require(`../recipes`).default runRecipe({ recipe, graphqlPort, projectRoot: program.directory }) started = true } diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index b2ba02a7b6b60..46813639ddc05 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -1,24 +1,23 @@ -const React = require(`react`) -const fs = require(`fs`) -const lodash = require(`lodash`) -const Boxen = require(`ink-box`) -const { useState } = require(`react`) -const { render, Box, Text, Color, useInput, useApp, Static } = require(`ink`) -const Spinner = require(`ink-spinner`).default -const Link = require(`ink-link`) -const MDX = require(`@mdx-js/runtime`) -const { +import fs from "fs" +import lodash from "lodash" +import React, { useState } from "react" +import { render, Box, Text, Color, useInput, useApp, Static } from "ink" +import Spinner from "ink-spinner" +import Link from "ink-link" +import MDX from "@mdx-js/runtime" +import { createClient, useMutation, useSubscription, Provider, defaultExchanges, subscriptionExchange, -} = require(`urql`) -const { SubscriptionClient } = require(`subscriptions-transport-ws`) -const fetch = require(`node-fetch`) -const ws = require(`ws`) -const SelectInput = require(`ink-select-input`).default +} from "urql" +import { SubscriptionClient } from "subscriptions-transport-ws" +import fetch from "node-fetch" +import ws from "ws" +import SelectInput from "ink-select-input" +import Boxen from "ink-box" const MAX_UI_WIDTH = 100 @@ -205,320 +204,332 @@ log( `======================================= ${new Date().toJSON()}` ) +log(`butts`, `!!!!!!!`) + const PlanContext = React.createContext({}) -module.exports = ({ recipe, graphqlPort, projectRoot }) => { - const GRAPHQL_ENDPOINT = `http://localhost:${graphqlPort}/graphql` +log(`created context`, `ewww`) - const subscriptionClient = new SubscriptionClient( - `ws://localhost:${graphqlPort}/graphql`, - { - reconnect: true, - }, - ws - ) +module.exports = ({ recipe, graphqlPort, projectRoot }) => { + try { + const GRAPHQL_ENDPOINT = `http://localhost:${graphqlPort}/graphql` - let showRecipesList = false + const subscriptionClient = new SubscriptionClient( + `ws://localhost:${graphqlPort}/graphql`, + { + reconnect: true, + }, + ws + ) - if (!recipe) { - showRecipesList = true - } + let showRecipesList = false - const client = createClient({ - fetch, - url: GRAPHQL_ENDPOINT, - exchanges: [ - ...defaultExchanges, - subscriptionExchange({ - forwardSubscription(operation) { - return subscriptionClient.request(operation) - }, - }), - ], - }) + if (!recipe) { + showRecipesList = true + } - const RecipeInterpreter = () => { - const [lastKeyPress, setLastKeyPress] = useState(``) - const [localRecipe, setRecipe] = useState(recipe) - const { exit } = useApp() + const client = createClient({ + fetch, + url: GRAPHQL_ENDPOINT, + exchanges: [ + ...defaultExchanges, + subscriptionExchange({ + forwardSubscription(operation) { + return subscriptionClient.request(operation) + }, + }), + ], + }) - const [subscriptionResponse] = useSubscription( - { - query: ` - subscription { - operation { - state + const RecipeInterpreter = () => { + const [lastKeyPress, setLastKeyPress] = useState(``) + const [localRecipe, setRecipe] = useState(recipe) + const { exit } = useApp() + + const [subscriptionResponse] = useSubscription( + { + query: ` + subscription { + operation { + state + } } + `, + }, + (_prev, now) => now + ) + const [_, createOperation] = useMutation(` + mutation ($recipePath: String!, $projectRoot: String!) { + createOperation(recipePath: $recipePath, projectRoot: $projectRoot) } - `, - }, - (_prev, now) => now - ) - const [_, createOperation] = useMutation(` - mutation ($recipePath: String!, $projectRoot: String!) { - createOperation(recipePath: $recipePath, projectRoot: $projectRoot) - } - `) - const [__, sendEvent] = useMutation(` - mutation($event: String!) { - sendEvent(event: $event) - } - `) - - subscriptionClient.connectionCallback = async () => { - if (!showRecipesList) { - log(`createOperation`) - try { - await createOperation({ recipePath: localRecipe, projectRoot }) - } catch (e) { - log(`error creating operation`, e) + `) + const [__, sendEvent] = useMutation(` + mutation($event: String!) { + sendEvent(event: $event) + } + `) + + subscriptionClient.connectionCallback = async () => { + if (!showRecipesList) { + log(`createOperation`) + try { + await createOperation({ recipePath: localRecipe, projectRoot }) + } catch (e) { + log(`error creating operation`, e) + } } } - } - const state = - subscriptionResponse.data && - JSON.parse(subscriptionResponse.data.operation.state) + log(`state`, subscriptionResponse) + log(`!!!!!`) + const state = + subscriptionResponse.data && + JSON.parse(subscriptionResponse.data.operation.state) + + useInput((_, key) => { + if (showRecipesList) { + return + } + setLastKeyPress(key) + if (key.return && state && state.value === `SUCCESS`) { + subscriptionClient.close() + exit() + process.exit() + } else if (key.return) { + sendEvent({ event: `CONTINUE` }) + } + }) + + log(`subscriptionResponse.data`, subscriptionResponse.data) - useInput((_, key) => { if (showRecipesList) { - return - } - setLastKeyPress(key) - if (key.return && state && state.value === `SUCCESS`) { - subscriptionClient.close() - exit() - process.exit() - } else if (key.return) { - sendEvent({ event: `CONTINUE` }) + return ( + <> + + + Select a recipe to run + + { + log(`yo`, { recipeItem, projectRoot }) + showRecipesList = false + try { + await createOperation({ + recipePath: recipeItem.value, + projectRoot, + }) + } catch (e) { + log(`error creating operation`, e) + } + log(`sent recipe`) + // setRecipe(recipeItem.value) + }} + /> + + ) } - }) - - log(`subscriptionResponse.data`, subscriptionResponse.data) - if (showRecipesList) { - return ( - <> - - - Select a recipe to run + if (!state) { + return ( + + Loading recipe - { - log(`yo`, { recipeItem, projectRoot }) - showRecipesList = false - try { - await createOperation({ - recipePath: recipeItem.value, - projectRoot, - }) - } catch (e) { - log(`error creating operation`, e) - } - log(`sent recipe`) - // setRecipe(recipeItem.value) - }} - /> - - ) - } - - if (!state) { - return ( - - Loading recipe - - ) - } - /* - * TODOs - * Listen to "y" to continue (in addition to enter) - */ + ) + } + /* + * TODOs + * Listen to "y" to continue (in addition to enter) + */ - log(`render`, `${renderCount} ${new Date().toJSON()}`) - renderCount += 1 + log(`render`, `${renderCount} ${new Date().toJSON()}`) + renderCount += 1 - // If we're done, exit. - if (state.value === `done`) { - process.nextTick(() => process.exit()) - } - if (state.value === `doneError`) { - process.nextTick(() => process.exit()) - } + // If we're done, exit. + if (state.value === `done`) { + process.nextTick(() => process.exit()) + } + if (state.value === `doneError`) { + process.nextTick(() => process.exit()) + } - if (process.env.DEBUG) { - log(`state`, state) - log(`plan`, state.context.plan) - log(`stepResources`, state.context.stepResources) - } + if (process.env.DEBUG) { + log(`state`, state) + log(`plan`, state.context.plan) + log(`stepResources`, state.context.stepResources) + } - const PresentStep = ({ state }) => { - const isPlan = state.context.plan && state.context.plan.length > 0 - const isPresetPlanState = state.value === `present plan` - const isRunningStep = state.value === `applyingPlan` - const isDone = state.value === `done` - const isLastStep = - state.context.steps && - state.context.steps.length - 1 === state.context.currentStep + const PresentStep = ({ state }) => { + const isPlan = state.context.plan && state.context.plan.length > 0 + const isPresetPlanState = state.value === `present plan` + const isRunningStep = state.value === `applyingPlan` + const isDone = state.value === `done` + const isLastStep = + state.context.steps && + state.context.steps.length - 1 === state.context.currentStep + + if (isRunningStep) { + return null + } - if (isRunningStep) { - return null - } + if (isDone) { + return null + } - if (isDone) { - return null - } + // If there's no plan on the last step, just return. + if (!isPlan && isLastStep) { + process.nextTick(() => process.exit()) + return null + } - // If there's no plan on the last step, just return. - if (!isPlan && isLastStep) { - process.nextTick(() => process.exit()) - return null - } + if (!isPlan || !isPresetPlanState) { + return ( +
    + >> Press enter to continue +
    + ) + } - if (!isPlan || !isPresetPlanState) { return ( -
    - >> Press enter to continue +
    +
    + + Proposed changes + +
    + {state.context.plan.map((p, i) => ( +
    + {p.resourceName}: + * {p.describe} + {p.diff && p.diff !== `` && ( + <> + --- + {p.diff} + --- + + )} +
    + ))} +
    + >> Press enter to run this step +
    ) } - return ( -
    + const RunningStep = ({ state }) => { + const isPlan = state.context.plan && state.context.plan.length > 0 + const isRunningStep = state.value === `applyingPlan` + + if (!isPlan || !isRunningStep) { + return null + } + + return (
    - - Proposed changes - -
    - {state.context.plan.map((p, i) => ( -
    - {p.resourceName}: - * {p.describe} - {p.diff && p.diff !== `` && ( - <> - --- - {p.diff} - --- - - )} -
    - ))} -
    - >> Press enter to run this step + {state.context.plan.map((p, i) => ( +
    + {p.resourceName}: + + {` `} + {p.describe} + +
    + ))}
    -
    - ) - } + ) + } - const RunningStep = ({ state }) => { - const isPlan = state.context.plan && state.context.plan.length > 0 - const isRunningStep = state.value === `applyingPlan` + const Error = ({ state }) => { + log(`errors`, state) + if (state && state.context && state.context.error) { + if (false) { + return ( +
    + + The following resources failed validation + + {state.context.error.map((err, i) => { + log(`recipe er`, { err }) + return ( +
    + Type: {err.resource} + + Resource:{` `} + {JSON.stringify(err.resourceDeclaration, null, 4)} + + Recipe step: {err.step} + + Error{err.validationError.details.length > 1 && `s`}: + + {err.validationError.details.map((d, v) => ( + + {` `}‣ {d.message} + + ))} +
    + ) + })} +
    + ) + } else { + return ( + {JSON.stringify(state.context.error, null, 2)} + ) + } + } - if (!isPlan || !isRunningStep) { return null } + if (state.value === `doneError`) { + return + } + return ( -
    - {state.context.plan.map((p, i) => ( -
    - {p.resourceName}: - - {` `} - {p.describe} + <> +
    + + {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( + ✅ {r._message} + ))} + +
    + {state.context.currentStep === 0 && } + {state.context.currentStep > 0 && state.value !== `done` && ( +
    + + Step {state.context.currentStep} /{` `} + {state.context.steps.length - 1}
    - ))} -
    - ) - } - - const Error = ({ state }) => { - log(`errors`, state) - if (state && state.context && state.context.error) { - if (false) { - return ( + )} +
    - - The following resources failed validation - - {state.context.error.map((err, i) => { - log(`recipe er`, { err }) - return ( -
    - Type: {err.resource} - - Resource:{` `} - {JSON.stringify(err.resourceDeclaration, null, 4)} - - Recipe step: {err.step} - - Error{err.validationError.details.length > 1 && `s`}: - - {err.validationError.details.map((d, v) => ( - ‣ {d.message} - ))} -
    - ) - })} + + {state.context.stepsAsMdx[state.context.currentStep]} +
    - ) - } else { - return ( - {JSON.stringify(state.context.error, null, 2)} - ) - } - } - - return null - } - - if (state.value === `doneError`) { - return + + +
    + + ) } - return ( + const Wrapper = () => ( <> -
    - - {lodash.flattenDeep(state.context.stepResources).map((r, i) => ( - ✅ {r._message} - ))} - -
    - {state.context.currentStep === 0 && } - {state.context.currentStep > 0 && state.value !== `done` && ( -
    - - Step {state.context.currentStep} /{` `} - {state.context.steps.length - 1} - -
    - )} - -
    - - {state.context.stepsAsMdx[state.context.currentStep]} - -
    - - -
    + + {` `} + + ) - } - const Wrapper = () => ( - <> - - {` `} - - - - ) - - const Recipe = () => + const Recipe = () => - // Enable experimental mode for more efficient reconciler and renderer - render(, { experimental: true }) + // Enable experimental mode for more efficient reconciler and renderer + render(, { experimental: true }) + } catch (e) { + log(e) + } } diff --git a/packages/gatsby/src/recipes/index.js b/packages/gatsby/src/recipes/index.js index e6c5c46522394..242d3b18095b4 100644 --- a/packages/gatsby/src/recipes/index.js +++ b/packages/gatsby/src/recipes/index.js @@ -1,5 +1,3 @@ -const path = require(`path`) -module.exports = recipe => { - const cli = require(`import-jsx`)(require.resolve(`./cli`)) - cli(recipe) -} +import cli from './cli' + +export default recipe => cli(recipe) diff --git a/packages/gatsby/src/recipes/todo.md b/packages/gatsby/src/recipes/todo.md index 9d73ec869147e..0ac992ee56b57 100644 --- a/packages/gatsby/src/recipes/todo.md +++ b/packages/gatsby/src/recipes/todo.md @@ -51,7 +51,7 @@ Kyle John -- [ ] spike on bundling recipes into one file +- [x] spike on bundling recipes into one file - [x] print pretty error when there's parsing errors of mdx files - [x] Move mdx recipes to its own package `gatsby-recipes` & pull them from unpkg - [ ] add CODEOWNERS file for recipes diff --git a/packages/gatsby/webpack.config.js b/packages/gatsby/webpack.config.js new file mode 100644 index 0000000000000..271af29fde608 --- /dev/null +++ b/packages/gatsby/webpack.config.js @@ -0,0 +1,32 @@ +const path = require('path') +const nodeExternals = require('webpack-node-externals') + +module.exports = { + entry: './src/recipes/index.js', + target: 'node', + mode: 'production', + externals: [ + nodeExternals({ + whitelist: ['react', 'graphql', 'urql', '@urql/core', '@mdx-js/react'] + }) + ], + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'recipes.js', + libraryTarget: 'commonjs' + }, + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', '@babel/react'] + } + } + } + ] + } +} From ca5876fe990305335dca44e0bd70e82eec490648 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 21:44:34 -0600 Subject: [PATCH 095/128] Format --- packages/gatsby/src/commands/recipes.ts | 18 +-- packages/gatsby/src/recipes/index.js | 2 +- .../src/recipes/parser/extract-imports.js | 14 +-- packages/gatsby/src/recipes/parser/index.js | 2 +- .../gatsby/src/recipes/parser/jsx-to-json.js | 12 +- .../recipes/parser/remove-element-by-name.js | 19 ++- .../gatsby-starter-blog/gatsby-config.js | 110 ++++++++++-------- .../gatsby-config.js | 4 +- .../recipes/providers/gatsby/plugin.test.js | 5 +- .../src/recipes/providers/git/ignore.js | 19 ++- .../src/recipes/providers/git/ignore.test.js | 14 +-- .../gatsby/src/recipes/recipe-machine.test.js | 2 +- .../gatsby/src/recipes/validate-steps.test.js | 8 +- 13 files changed, 123 insertions(+), 106 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index d830b1c8a6b42..66cb6f998870b 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -11,8 +11,8 @@ module.exports = async (program: IProgram): Promise => { const graphqlPort = await detectPort(4000) telemetry.trackCli(`RECIPE_RUN`, { recipe }) - // const runRecipe = require(`../recipes/index`) - // runRecipe({ recipe, projectRoot: program.directory }) + // const runRecipe = require(`../recipes/index`) + // runRecipe({ recipe, projectRoot: program.directory }) // Start GraphQL serve let subprocess @@ -29,26 +29,26 @@ module.exports = async (program: IProgram): Promise => { // as it (correctly) thinks it's not in a normal terminal environemnt. // Since we're just returning data, we'll override that. FORCE_COLOR: `true`, - } + }, }) - subprocess.stderr.on("data", data => { + subprocess.stderr.on(`data`, data => { console.log(data.toString()) }) - process.on("exit", () => - subprocess.kill("SIGTERM", { + process.on(`exit`, () => + subprocess.kill(`SIGTERM`, { forceKillAfterTimeout: 2000, }) ) // Log server output to a file. if (process.env.DEBUG) { - const logFile = path.join(program.directory, "./recipe-server.log") + const logFile = path.join(program.directory, `./recipe-server.log`) fs.writeFileSync(logFile, `\n-----\n${new Date().toJSON()}\n`) - const writeStream = fs.createWriteStream(logFile, { flags: "a" }) + const writeStream = fs.createWriteStream(logFile, { flags: `a` }) subprocess.stdout.pipe(writeStream) } let started = false - subprocess.stdout.on("data", data => { + subprocess.stdout.on(`data`, data => { if (!started) { const runRecipe = require(`../recipes`).default runRecipe({ recipe, graphqlPort, projectRoot: program.directory }) diff --git a/packages/gatsby/src/recipes/index.js b/packages/gatsby/src/recipes/index.js index 242d3b18095b4..ffb2b4ed62df5 100644 --- a/packages/gatsby/src/recipes/index.js +++ b/packages/gatsby/src/recipes/index.js @@ -1,3 +1,3 @@ -import cli from './cli' +import cli from "./cli" export default recipe => cli(recipe) diff --git a/packages/gatsby/src/recipes/parser/extract-imports.js b/packages/gatsby/src/recipes/parser/extract-imports.js index 6ff9876371549..115d7e57de710 100644 --- a/packages/gatsby/src/recipes/parser/extract-imports.js +++ b/packages/gatsby/src/recipes/parser/extract-imports.js @@ -1,5 +1,5 @@ -const {declare} = require('@babel/helper-plugin-utils') -const babel = require('@babel/standalone') +const { declare } = require(`@babel/helper-plugin-utils`) +const babel = require(`@babel/standalone`) class BabelPluginExtractImportNames { constructor() { @@ -15,13 +15,13 @@ class BabelPluginExtractImportNames { const source = path.node.source.value path.traverse({ Identifier(path) { - if (path.key === 'local') { + if (path.key === `local`) { names[path.node.name] = source } - } + }, }) - } - } + }, + }, } }) } @@ -32,7 +32,7 @@ module.exports = src => { const plugin = new BabelPluginExtractImportNames() babel.transform(src, { configFile: false, - plugins: [plugin.plugin] + plugins: [plugin.plugin], }) return plugin.state } catch (e) { diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js index a0f58787f257d..92ce36e795281 100644 --- a/packages/gatsby/src/recipes/parser/index.js +++ b/packages/gatsby/src/recipes/parser/index.js @@ -188,7 +188,7 @@ const getSource = async (pathOrUrl, projectRoot) => { recipePath = path.join(projectRoot, pathOrUrl) } else { const url = `https://unpkg.com/gatsby-recipes/recipes/${pathOrUrl}` - const res = await fetch(url.endsWith('.mdx') ? url : url + '.mdx') + const res = await fetch(url.endsWith(`.mdx`) ? url : url + `.mdx`) if (res.status !== 200) { throw new Error( diff --git a/packages/gatsby/src/recipes/parser/jsx-to-json.js b/packages/gatsby/src/recipes/parser/jsx-to-json.js index a6bac7e68c370..d6af9689dd640 100644 --- a/packages/gatsby/src/recipes/parser/jsx-to-json.js +++ b/packages/gatsby/src/recipes/parser/jsx-to-json.js @@ -55,7 +55,7 @@ const getAttributeValue = expression => { return entries } - if (expression.type === 'Identifier') { + if (expression.type === `Identifier`) { return expression.name } @@ -125,10 +125,12 @@ const jsxToJson = input => { `${input}` ) } catch (e) { - throw new Error(JSON.stringify({ - location: e.loc, - validationError: `Could not parse "${input}"`, - })) + throw new Error( + JSON.stringify({ + location: e.loc, + validationError: `Could not parse "${input}"`, + }) + ) } if (parsed.body[0]) { diff --git a/packages/gatsby/src/recipes/parser/remove-element-by-name.js b/packages/gatsby/src/recipes/parser/remove-element-by-name.js index 3d805caa3ec4b..d8126aaf0e4a5 100644 --- a/packages/gatsby/src/recipes/parser/remove-element-by-name.js +++ b/packages/gatsby/src/recipes/parser/remove-element-by-name.js @@ -1,9 +1,9 @@ -const {declare} = require('@babel/helper-plugin-utils') -const babel = require('@babel/standalone') -const jsxSyntax = require('@babel/plugin-syntax-jsx') +const { declare } = require(`@babel/helper-plugin-utils`) +const babel = require(`@babel/standalone`) +const jsxSyntax = require(`@babel/plugin-syntax-jsx`) const BabelPluginRemoveElementByName = (api, { names }) => { - const {types: t} = api + const { types: t } = api return { visitor: { @@ -11,8 +11,8 @@ const BabelPluginRemoveElementByName = (api, { names }) => { if (names.includes(path.node.openingElement.name.name)) { path.remove() } - } - } + }, + }, } } @@ -20,13 +20,10 @@ module.exports = (src, options) => { try { const { code } = babel.transform(`<>${src}`, { configFile: false, - plugins: [ - [BabelPluginRemoveElementByName, options], - jsxSyntax - ] + plugins: [[BabelPluginRemoveElementByName, options], jsxSyntax], }) - return code.replace(/^<>/, '').replace(/<\/>;$/, '') + return code.replace(/^<>/, ``).replace(/<\/>;$/, ``) } catch (e) { console.log(e) } diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js index f42813f001a90..93f6420f76147 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-blog/gatsby-config.js @@ -1,52 +1,68 @@ -const redish = `#c5484d`; +const redish = `#c5484d` module.exports = { siteMetadata: { title: `Bricolage`, author: `Kyle Mathews`, - homeCity: `San Francisco` + homeCity: `San Francisco`, }, - plugins: [{ - resolve: `gatsby-source-filesystem`, - options: { - path: `${__dirname}/src/pages`, - name: `pages` - } - }, `gatsby-transformer-sharp`, `gatsby-plugin-emotion`, { - resolve: `gatsby-plugin-typography`, - options: { - pathToConfigModule: `src/utils/typography` - } - }, { - resolve: `gatsby-transformer-remark`, - options: { - plugins: [{ - resolve: `gatsby-remark-images`, - options: { - maxWidth: 590 - } - }, { - resolve: `gatsby-remark-responsive-iframe`, - options: { - wrapperStyle: `margin-bottom: 1.0725rem` - } - }, `gatsby-remark-prismjs`, `gatsby-remark-copy-linked-files`, `gatsby-remark-smartypants`] - } - }, `gatsby-plugin-sharp`, { - resolve: `gatsby-plugin-google-analytics`, - options: { - trackingId: `UA-774017-3` - } - }, { - resolve: `gatsby-plugin-manifest`, - options: { - name: `Bricolage`, - short_name: `Bricolage`, - icon: `static/logo.png`, - start_url: `/`, - background_color: redish, - theme_color: redish, - display: `minimal-ui` - } - }, `gatsby-plugin-offline`, // `gatsby-plugin-preact`, - `gatsby-plugin-react-helmet`] -}; \ No newline at end of file + plugins: [ + { + resolve: `gatsby-source-filesystem`, + options: { + path: `${__dirname}/src/pages`, + name: `pages`, + }, + }, + `gatsby-transformer-sharp`, + `gatsby-plugin-emotion`, + { + resolve: `gatsby-plugin-typography`, + options: { + pathToConfigModule: `src/utils/typography`, + }, + }, + { + resolve: `gatsby-transformer-remark`, + options: { + plugins: [ + { + resolve: `gatsby-remark-images`, + options: { + maxWidth: 590, + }, + }, + { + resolve: `gatsby-remark-responsive-iframe`, + options: { + wrapperStyle: `margin-bottom: 1.0725rem`, + }, + }, + `gatsby-remark-prismjs`, + `gatsby-remark-copy-linked-files`, + `gatsby-remark-smartypants`, + ], + }, + }, + `gatsby-plugin-sharp`, + { + resolve: `gatsby-plugin-google-analytics`, + options: { + trackingId: `UA-774017-3`, + }, + }, + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `Bricolage`, + short_name: `Bricolage`, + icon: `static/logo.png`, + start_url: `/`, + background_color: redish, + theme_color: redish, + display: `minimal-ui`, + }, + }, + `gatsby-plugin-offline`, // `gatsby-plugin-preact`, + `gatsby-plugin-react-helmet`, + ], +} diff --git a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js index 640b28a301b61..ccf4e9671b419 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js +++ b/packages/gatsby/src/recipes/providers/gatsby/fixtures/gatsby-starter-hello-world/gatsby-config.js @@ -5,5 +5,5 @@ */ module.exports = { /* Your site config here */ - plugins: [] -}; \ No newline at end of file + plugins: [], +} diff --git a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js index 077008b7af745..6e823f6b675cf 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js +++ b/packages/gatsby/src/recipes/providers/gatsby/plugin.test.js @@ -6,7 +6,10 @@ const { addPluginToConfig, getPluginsFromConfig } = require(`./plugin`) const resourceTestHelper = require(`../resource-test-helper`) const root = path.join(__dirname, `./fixtures/gatsby-starter-blog`) -const helloWorldRoot = path.join(__dirname, `./fixtures/gatsby-starter-hello-world`) +const helloWorldRoot = path.join( + __dirname, + `./fixtures/gatsby-starter-hello-world` +) const name = `gatsby-plugin-foo` const configPath = path.join(root, `gatsby-config.js`) diff --git a/packages/gatsby/src/recipes/providers/git/ignore.js b/packages/gatsby/src/recipes/providers/git/ignore.js index 3541a9135d7e9..a22513a982d00 100644 --- a/packages/gatsby/src/recipes/providers/git/ignore.js +++ b/packages/gatsby/src/recipes/providers/git/ignore.js @@ -1,13 +1,13 @@ const fs = require(`fs-extra`) const path = require(`path`) const Joi = require(`@hapi/joi`) -const isBlank = require('is-blank') -const singleTrailingNewline = require('single-trailing-newline') +const isBlank = require(`is-blank`) +const singleTrailingNewline = require(`single-trailing-newline`) const getDiff = require(`../utils/get-diff`) const resourceSchema = require(`../resource-schema`) -const makePath = root => path.join(root, '.gitignore') +const makePath = root => path.join(root, `.gitignore`) const gitignoresAsArray = async root => { const fullPath = makePath(root) @@ -17,7 +17,7 @@ const gitignoresAsArray = async root => { } const ignoresStr = await fs.readFile(fullPath, `utf8`) - const ignores = ignoresStr.split('\n') + const ignores = ignoresStr.split(`\n`) const last = ignores.pop() if (isBlank(last)) { @@ -27,9 +27,8 @@ const gitignoresAsArray = async root => { } } -const ignoresToString = ignores => { - return singleTrailingNewline(ignores.map(n => n.name).join('\n')) -} +const ignoresToString = ignores => + singleTrailingNewline(ignores.map(n => n.name).join(`\n`)) const fileExists = fullPath => { try { @@ -105,12 +104,12 @@ const all = async context => { const destroy = async (context, { id, name }) => { const fullPath = makePath(context.root) - + const ignores = await all(context) const newIgnores = ignores.filter(n => n.id !== id) await fs.writeFile(fullPath, ignoresToString(newIgnores)) - + return { id, name } } @@ -118,7 +117,7 @@ const destroy = async (context, { id, name }) => { module.exports.plan = async (context, args) => { const name = args.id || args.name - const currentResource = await all(context, args) || [] + const currentResource = (await all(context, args)) || [] const alreadyIgnored = currentResource.find(n => n.id === name) const contents = ignoresToString(currentResource) diff --git a/packages/gatsby/src/recipes/providers/git/ignore.test.js b/packages/gatsby/src/recipes/providers/git/ignore.test.js index aa9fa46089c93..d06bf1ee17703 100644 --- a/packages/gatsby/src/recipes/providers/git/ignore.test.js +++ b/packages/gatsby/src/recipes/providers/git/ignore.test.js @@ -1,22 +1,22 @@ -const path = require("path") -const ignore = require("./ignore") +const path = require(`path`) +const ignore = require(`./ignore`) const resourceTestHelper = require(`../resource-test-helper`) -const root = path.join(__dirname, "fixtures") +const root = path.join(__dirname, `fixtures`) -describe("git ignore resource", () => { +describe(`git ignore resource`, () => { test(`e2e test`, async () => { await resourceTestHelper({ resourceModule: ignore, resourceName: `GitIgnore`, context: { root }, - initialObject: { name: ".cache" }, - partialUpdate: { id: ".cache", name: ".cache" }, + initialObject: { name: `.cache` }, + partialUpdate: { id: `.cache`, name: `.cache` }, }) }) test(`does not add duplicate entries`, async () => { - const name = "node_modules" + const name = `node_modules` await ignore.create({ root }, { name }) diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index 601b657f46760..ea3aec5bfef60 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -220,7 +220,7 @@ it(`should store created/changed/deleted resources on the context after applying }) it.skip(`should create a plan from a url`, () => { - const url = 'https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx' + const url = `https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx` const initialContext = { recipePath: url, currentStep: 0, diff --git a/packages/gatsby/src/recipes/validate-steps.test.js b/packages/gatsby/src/recipes/validate-steps.test.js index a23e89a112ac1..4d06cae7217e2 100644 --- a/packages/gatsby/src/recipes/validate-steps.test.js +++ b/packages/gatsby/src/recipes/validate-steps.test.js @@ -1,5 +1,5 @@ -const validateSteps = require('./validate-steps') -const parser = require('./parser') +const validateSteps = require(`./validate-steps`) +const parser = require(`./parser`) const getErrors = async mdx => { const { commands } = await parser.parse(mdx) @@ -7,13 +7,13 @@ const getErrors = async mdx => { } test(`raises a validation error if commands are in step 0`, async () => { - const result = await getErrors('') + const result = await getErrors(``) expect(result).toHaveLength(1) }) test(`does not raise a validation error if Config is in step 0`, async () => { - const result = await getErrors('') + const result = await getErrors(``) expect(result).toHaveLength(0) }) From 4b2d5f5e9e637c75be1f640f0ef547e4e11cd343 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 21:47:46 -0600 Subject: [PATCH 096/128] Fix linting errors --- .../index.md | 4 ++- packages/gatsby/src/recipes/parser/index.js | 26 +++++++++---------- .../recipes/parser/remove-element-by-name.js | 5 ++-- .../gatsby/src/recipes/recipe-machine.test.js | 2 +- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/docs/blog/2019-11-14-announcing-gatsby-cloud/index.md b/docs/blog/2019-11-14-announcing-gatsby-cloud/index.md index c456f2af4c4fa..ea52be69c1aad 100644 --- a/docs/blog/2019-11-14-announcing-gatsby-cloud/index.md +++ b/docs/blog/2019-11-14-announcing-gatsby-cloud/index.md @@ -3,7 +3,9 @@ title: "Announcing Gatsby Cloud" date: 2019-11-14 author: "Kyle Mathews" excerpt: "I'm excited to announce that we're launching our commercial platform, Gatsby Cloud, which will provide a growing suite of tools for web creators" -tags: ["gatsby-inc"] +tags: ["gatsby-inc", "releases", "gatsby-cloud"] +--- + --- We're excited to announce the launch of [Gatsby Cloud](https://www.gatsbyjs.com/): a commercial platform of stable, trusted tools that enable web creators to build better websites. diff --git a/packages/gatsby/src/recipes/parser/index.js b/packages/gatsby/src/recipes/parser/index.js index 92ce36e795281..c5651f2b6d72b 100644 --- a/packages/gatsby/src/recipes/parser/index.js +++ b/packages/gatsby/src/recipes/parser/index.js @@ -21,18 +21,15 @@ const asRoot = nodes => { const toJson = value => { const obj = {} - try { - const values = jsxToJson(value) - values.forEach(([type, props = {}]) => { - if (type === `\n`) { - return undefined - } - obj[type] = obj[type] || [] - obj[type].push(props) - }) - } catch (e) { - throw e - } + const values = jsxToJson(value) + values.forEach(([type, props = {}]) => { + if (type === `\n`) { + return undefined + } + obj[type] = obj[type] || [] + obj[type].push(props) + return undefined + }) return obj } @@ -91,7 +88,7 @@ const unwrapImports = async (tree, imports) => return resolve() } - visit(tree, `jsx`, async (node, index, parent) => { + return visit(tree, `jsx`, async (node, index, parent) => { let names try { names = toJson(node.value) @@ -114,7 +111,7 @@ const unwrapImports = async (tree, imports) => const nodes = u.parse(mdx).children parent.children.splice(index, 1, nodes) parent.children = parent.children.flat() - resolve() + return resolve() }) } }) @@ -131,6 +128,7 @@ const partitionSteps = ast => { steps[index] = steps[index] || [] steps[index].push(node) + return undefined }) return steps diff --git a/packages/gatsby/src/recipes/parser/remove-element-by-name.js b/packages/gatsby/src/recipes/parser/remove-element-by-name.js index d8126aaf0e4a5..8d3cd884334ec 100644 --- a/packages/gatsby/src/recipes/parser/remove-element-by-name.js +++ b/packages/gatsby/src/recipes/parser/remove-element-by-name.js @@ -1,10 +1,7 @@ -const { declare } = require(`@babel/helper-plugin-utils`) const babel = require(`@babel/standalone`) const jsxSyntax = require(`@babel/plugin-syntax-jsx`) const BabelPluginRemoveElementByName = (api, { names }) => { - const { types: t } = api - return { visitor: { JSXElement(path) { @@ -27,6 +24,8 @@ module.exports = (src, options) => { } catch (e) { console.log(e) } + + return null } module.exports.BabelPluginRemoveElementByName = BabelPluginRemoveElementByName diff --git a/packages/gatsby/src/recipes/recipe-machine.test.js b/packages/gatsby/src/recipes/recipe-machine.test.js index ea3aec5bfef60..136659c597770 100644 --- a/packages/gatsby/src/recipes/recipe-machine.test.js +++ b/packages/gatsby/src/recipes/recipe-machine.test.js @@ -219,7 +219,7 @@ it(`should store created/changed/deleted resources on the context after applying service.start() }) -it.skip(`should create a plan from a url`, () => { +it.skip(`should create a plan from a url`, done => { const url = `https://gist.githubusercontent.com/johno/20503d2a2c80529096e60cd70260c9d8/raw/0145da93c17dcbf5d819a1ef3c97fa8713fad490/test-recipe.mdx` const initialContext = { recipePath: url, From d725570edd1edf569267aec76814e0e33e153906 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 21:59:52 -0600 Subject: [PATCH 097/128] Fix more linting --- packages/gatsby/src/recipes/cli.js | 80 +++++++++---------- packages/gatsby/src/recipes/create-types.js | 1 - .../src/recipes/joi-to-graphql/index.js | 4 +- .../{composeSchema.js => compose-schema.js} | 0 .../{composeType.js => compose-type.js} | 0 .../recipes/providers/gatsby/shadow-file.js | 4 + .../src/recipes/providers/npm/package-json.js | 1 - .../src/recipes/providers/npm/package.js | 20 +---- .../src/recipes/providers/npm/package.test.js | 1 - packages/gatsby/src/recipes/recipe-machine.js | 5 +- .../gatsby/src/recipes/validate-recipe.js | 3 +- 11 files changed, 55 insertions(+), 64 deletions(-) rename packages/gatsby/src/recipes/joi-to-graphql/methods/{composeSchema.js => compose-schema.js} (100%) rename packages/gatsby/src/recipes/joi-to-graphql/methods/{composeType.js => compose-type.js} (100%) diff --git a/packages/gatsby/src/recipes/cli.js b/packages/gatsby/src/recipes/cli.js index 46813639ddc05..7243f47095b57 100644 --- a/packages/gatsby/src/recipes/cli.js +++ b/packages/gatsby/src/recipes/cli.js @@ -177,8 +177,9 @@ const components = { flexDirection="row" textWrap="wrap" {...props} - children={children} - /> + > + {children} + ) }, ul: props =>
    {props.children}
    , @@ -242,7 +243,7 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { }) const RecipeInterpreter = () => { - const [lastKeyPress, setLastKeyPress] = useState(``) + // eslint-disable-next-line const [localRecipe, setRecipe] = useState(recipe) const { exit } = useApp() @@ -258,11 +259,13 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { }, (_prev, now) => now ) + // eslint-disable-next-line const [_, createOperation] = useMutation(` mutation ($recipePath: String!, $projectRoot: String!) { createOperation(recipePath: $recipePath, projectRoot: $projectRoot) } `) + // eslint-disable-next-line const [__, sendEvent] = useMutation(` mutation($event: String!) { sendEvent(event: $event) @@ -290,7 +293,6 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { if (showRecipesList) { return } - setLastKeyPress(key) if (key.return && state && state.value === `SUCCESS`) { subscriptionClient.close() exit() @@ -321,8 +323,6 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { } catch (e) { log(`error creating operation`, e) } - log(`sent recipe`) - // setRecipe(recipeItem.value) }} /> @@ -442,40 +442,40 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { const Error = ({ state }) => { log(`errors`, state) if (state && state.context && state.context.error) { - if (false) { - return ( -
    - - The following resources failed validation - - {state.context.error.map((err, i) => { - log(`recipe er`, { err }) - return ( -
    - Type: {err.resource} - - Resource:{` `} - {JSON.stringify(err.resourceDeclaration, null, 4)} - - Recipe step: {err.step} - - Error{err.validationError.details.length > 1 && `s`}: - - {err.validationError.details.map((d, v) => ( - - {` `}‣ {d.message} - - ))} -
    - ) - })} -
    - ) - } else { - return ( - {JSON.stringify(state.context.error, null, 2)} - ) - } + // if (false) { + // return ( + //
    + // + // The following resources failed validation + // + // {state.context.error.map((err, i) => { + // log(`recipe er`, { err }) + // return ( + //
    + // Type: {err.resource} + // + // Resource:{` `} + // {JSON.stringify(err.resourceDeclaration, null, 4)} + // + // Recipe step: {err.step} + // + // Error{err.validationError.details.length > 1 && `s`}: + // + // {err.validationError.details.map((d, v) => ( + // + // {` `}‣ {d.message} + // + // ))} + //
    + // ) + // })} + //
    + // ) + // } else { + return ( + {JSON.stringify(state.context.error, null, 2)} + ) + // } } return null diff --git a/packages/gatsby/src/recipes/create-types.js b/packages/gatsby/src/recipes/create-types.js index 17129e55ac658..6d9735242c519 100644 --- a/packages/gatsby/src/recipes/create-types.js +++ b/packages/gatsby/src/recipes/create-types.js @@ -4,7 +4,6 @@ const { GraphQLString, GraphQLObjectType, GraphQLList } = require(`graphql`) const _ = require(`lodash`) const resources = require(`./resources`) -const resourceSchema = require(`./providers/resource-schema`) const typeNameToHumanName = name => { if (name.endsWith(`Connection`)) { diff --git a/packages/gatsby/src/recipes/joi-to-graphql/index.js b/packages/gatsby/src/recipes/joi-to-graphql/index.js index c03a004fc1415..3ff692d4944fa 100644 --- a/packages/gatsby/src/recipes/joi-to-graphql/index.js +++ b/packages/gatsby/src/recipes/joi-to-graphql/index.js @@ -1,2 +1,2 @@ -exports.transmuteType = exports.type = require(`./methods/composeType`) -exports.transmuteSchema = exports.schema = require(`./methods/composeSchema`) +exports.transmuteType = exports.type = require(`./methods/compose-type`) +exports.transmuteSchema = exports.schema = require(`./methods/compose-schema`) diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/compose-schema.js similarity index 100% rename from packages/gatsby/src/recipes/joi-to-graphql/methods/composeSchema.js rename to packages/gatsby/src/recipes/joi-to-graphql/methods/compose-schema.js diff --git a/packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js b/packages/gatsby/src/recipes/joi-to-graphql/methods/compose-type.js similarity index 100% rename from packages/gatsby/src/recipes/joi-to-graphql/methods/composeType.js rename to packages/gatsby/src/recipes/joi-to-graphql/methods/compose-type.js diff --git a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js index 8ea4421ff0634..651d01a4f12a4 100644 --- a/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js +++ b/packages/gatsby/src/recipes/providers/gatsby/shadow-file.js @@ -7,6 +7,7 @@ const getDiff = require(`../utils/get-diff`) const fileExists = filePath => fs.existsSync(filePath) const relativePathForShadowedFile = ({ theme, filePath }) => { + // eslint-disable-next-line const [_src, ...filePathParts] = filePath.split(path.sep) const relativePath = path.join(`src`, theme, path.join(...filePathParts)) return relativePath @@ -35,6 +36,7 @@ const create = async ({ root }, { theme, path: filePath }) => { } const read = async ({ root }, id) => { + // eslint-disable-next-line const [_src, theme, ..._filePathParts] = id.split(path.sep) const fullPath = path.join(root, id) @@ -84,12 +86,14 @@ const message = resource => module.exports.plan = async ({ root }, { theme, path: filePath, id }) => { let currentResource = `` if (!id) { + // eslint-disable-next-line const [_src, ...filePathParts] = filePath.split(path.sep) id = path.join(`src`, theme, path.join(...filePathParts)) } currentResource = (await read({ root }, id)) || {} + // eslint-disable-next-line const [_src, _theme, ...shadowPathParts] = id.split(path.sep) const fullFilePathToShadow = path.join( root, diff --git a/packages/gatsby/src/recipes/providers/npm/package-json.js b/packages/gatsby/src/recipes/providers/npm/package-json.js index dfb5561920d3f..3a3f58f4e09d6 100644 --- a/packages/gatsby/src/recipes/providers/npm/package-json.js +++ b/packages/gatsby/src/recipes/providers/npm/package-json.js @@ -1,6 +1,5 @@ const fs = require(`fs-extra`) const path = require(`path`) -const { promisify } = require(`util`) const Joi = require(`@hapi/joi`) const resourceSchema = require(`../resource-schema`) diff --git a/packages/gatsby/src/recipes/providers/npm/package.js b/packages/gatsby/src/recipes/providers/npm/package.js index 8ae9e3acabe36..a4aa1785adcac 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.js +++ b/packages/gatsby/src/recipes/providers/npm/package.js @@ -12,12 +12,6 @@ const resourceSchema = require(`../resource-schema`) const getPackageNames = packages => packages.map(n => `${n.name}@${n.version}`) -const asyncForEach = async (array, callback) => { - for (let index = 0; index < array.length; index++) { - await callback(array[index], index, array) - } -} - // Generate install commands const generateClientComands = ({ packageManager, depType, packageNames }) => { let commands = [] @@ -37,6 +31,8 @@ const generateClientComands = ({ packageManager, depType, packageNames }) => { } return commands.concat(packageNames) } + + return undefined } exports.generateClientComands = generateClientComands @@ -63,7 +59,7 @@ const executeInstalls = async root => { packageManager: PACKAGE_MANGER, }) - const { stderr, stdout } = await execa(PACKAGE_MANGER, commands, { + await execa(PACKAGE_MANGER, commands, { cwd: root, }) @@ -100,13 +96,6 @@ const create = async ({ root }, resource) => { await createInstall({ root }, value) return read({ root }, value.name) - - return new Promise(resolve => { - setTimeout(async () => { - const resources = await read({ root }, { packages }) - resolve(resources) - }, 1) - }) } const read = async ({ root }, id) => { @@ -144,7 +133,7 @@ const validate = resource => exports.validate = validate const destroy = async ({ root }, resource) => { - const { stderr, stdout } = await execa(`yarn`, [`remove`, resource.name], { + await execa(`yarn`, [`remove`, resource.name], { cwd: root, }) return resource @@ -159,7 +148,6 @@ module.exports.config = {} module.exports.plan = async (context, resource) => { const { - err, value: { name, version }, } = validate(resource) diff --git a/packages/gatsby/src/recipes/providers/npm/package.test.js b/packages/gatsby/src/recipes/providers/npm/package.test.js index a75f7a10af740..a4581fdf18c1a 100644 --- a/packages/gatsby/src/recipes/providers/npm/package.test.js +++ b/packages/gatsby/src/recipes/providers/npm/package.test.js @@ -1,4 +1,3 @@ -const pkgDir = require(`pkg-dir`) const os = require(`os`) const path = require(`path`) const uuid = require(`uuid`) diff --git a/packages/gatsby/src/recipes/recipe-machine.js b/packages/gatsby/src/recipes/recipe-machine.js index 6e0cedb54cc86..e1201ad3ae539 100644 --- a/packages/gatsby/src/recipes/recipe-machine.js +++ b/packages/gatsby/src/recipes/recipe-machine.js @@ -45,9 +45,9 @@ const recipeMachine = Machine( target: `doneError`, actions: assign({ error: (context, event) => { - console.log(msg) + let msg try { - const msg = JSON.parse(event.data.message) + msg = JSON.parse(event.data.message) return msg } catch (e) { return { @@ -199,6 +199,7 @@ const recipeMachine = Machine( stepResources: stepResources.concat([event.data]), } } + return undefined }), }, guards: { diff --git a/packages/gatsby/src/recipes/validate-recipe.js b/packages/gatsby/src/recipes/validate-recipe.js index e489547abe136..304de2d43b833 100644 --- a/packages/gatsby/src/recipes/validate-recipe.js +++ b/packages/gatsby/src/recipes/validate-recipe.js @@ -9,7 +9,7 @@ module.exports = plan => { step[key].map(resourceDeclaration => { if (!resources[key].validate) { console.log(`${key} is missing an exported validate function`) - return + return undefined } const result = resources[key].validate(resourceDeclaration) if (result.error) { @@ -20,6 +20,7 @@ module.exports = plan => { validationError: result.error, } } + return undefined }) ) ) From ae658e831d8c4f4b3e3e7812dc0afde56b4c95fa Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 22:05:02 -0600 Subject: [PATCH 098/128] update snapshots --- .../__snapshots__/create-types.test.js.snap | 9 + .../__snapshots__/recipe-machine.test.js.snap | 2 +- .../parser/__snapshots__/parser.test.js.snap | 6 +- .../gatsby/src/recipes/parser/parser.test.js | 2 +- .../gatsby/__snapshots__/plugin.test.js.snap | 256 ++++++------------ .../__snapshots__/shadow-file.test.js.snap | 10 +- .../npm/__snapshots__/script.test.js.snap | 4 +- 7 files changed, 102 insertions(+), 187 deletions(-) diff --git a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap index e32a7876d1033..f456c3b6a0b94 100644 --- a/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/create-types.test.js.snap @@ -36,6 +36,15 @@ Object { "resolve": [Function], "type": "GatsbyPlugin", }, + "gatsbyShadowFile": Object { + "args": Object { + "id": Object { + "type": "String", + }, + }, + "resolve": [Function], + "type": "GatsbyShadowFile", + }, "gitIgnore": Object { "args": Object { "id": Object { diff --git a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap index 550793abc7ab1..981cae7a49169 100644 --- a/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap +++ b/packages/gatsby/src/recipes/__snapshots__/recipe-machine.test.js.snap @@ -58,7 +58,7 @@ Array [ Object { "resource": "File", "step": 0, - "validationError": "File should not be used in the introduction step", + "validationError": "Resources e.g. File should not be placed in the introduction step", }, ] `; diff --git a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap index eb9350c0304cb..c7c5a13692710 100644 --- a/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap +++ b/packages/gatsby/src/recipes/parser/__snapshots__/parser.test.js.snap @@ -33,7 +33,7 @@ This recipe helps you start developing with the [Theme UI](https://theme-ui.com) ", "Write out Theme UI configuration files. - @@ -73,9 +73,9 @@ Add a package.json config object. exports[`partitions the MDX into steps 1`] = ` Array [ - "# Prettier Git Hook + "# Automatically run Prettier on Git commits -Make sure all of your code is run through prettier when you commit it to git. +Make sure all of your code is run through Prettier when you commit it to git. We achieve this by configuring prettier to run on git hooks using husky and lint-staged. ", diff --git a/packages/gatsby/src/recipes/parser/parser.test.js b/packages/gatsby/src/recipes/parser/parser.test.js index e4f906c4c461f..d93c7af4f27f0 100644 --- a/packages/gatsby/src/recipes/parser/parser.test.js +++ b/packages/gatsby/src/recipes/parser/parser.test.js @@ -71,7 +71,7 @@ test(`raises an error if JSX doesn't parse`, async () => { `) } catch (e) { expect(e).toMatchInlineSnapshot( - `[Error: {"location":{"line":1,"column":43},"validationError":"Could not parse /"

    F. Scott Fitzgerald

    } `; -exports[`Shadow File resource e2e shadow file resource test: ShadowFile create plan 1`] = ` +exports[`Shadow File resource e2e shadow file resource test: GatsbyShadowFile create plan 1`] = ` Object { "currentState": Object {}, "describe": "Shadow src/components/author.js from the theme gatsby-theme-blog", @@ -39,7 +39,7 @@ export default () =>

    F. Scott Fitzgerald

    } `; -exports[`Shadow File resource e2e shadow file resource test: ShadowFile destroy 1`] = ` +exports[`Shadow File resource e2e shadow file resource test: GatsbyShadowFile destroy 1`] = ` Object { "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", "contents": "import React from 'react' @@ -52,7 +52,7 @@ export default () =>

    F. Scott Fitzgerald

    } `; -exports[`Shadow File resource e2e shadow file resource test: ShadowFile update 1`] = ` +exports[`Shadow File resource e2e shadow file resource test: GatsbyShadowFile update 1`] = ` Object { "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", "contents": "import React from 'react' @@ -65,7 +65,7 @@ export default () =>

    F. Scott Fitzgerald

    } `; -exports[`Shadow File resource e2e shadow file resource test: ShadowFile update plan 1`] = ` +exports[`Shadow File resource e2e shadow file resource test: GatsbyShadowFile update plan 1`] = ` Object { "currentState": Object { "_message": "Shadowed src/gatsby-theme-blog/components/author.js from gatsby-theme-blog", diff --git a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap index b7bafe2c57b2f..98f6b74986706 100644 --- a/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap +++ b/packages/gatsby/src/recipes/providers/npm/__snapshots__/script.test.js.snap @@ -16,9 +16,7 @@ Object { "diff": "- Original - 1 + Modified + 3 -@@ -3,5 +3,7 @@ - \\"hooks\\": Object {}, - }, + Object {  \\"name\\": \\"test\\", - \\"scripts\\": Object {}, + \\"scripts\\": Object { From ba566231d607ff1e397d4a33eaeeb234c068405e Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Tue, 14 Apr 2020 22:09:04 -0600 Subject: [PATCH 099/128] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit d29585b77cde186eeb3cd2a297effba34a56fa8b Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Tue Apr 14 16:08:02 2020 -0700 Fix translated aria-label for expand buttons (#23113) commit 6d4c664eb5e8044a20099330d0315ea06318f7ff Author: Michelle Gienow Date: Tue Apr 14 15:56:23 2020 -0400 blog post urging Gatsby community members to meet virtually, not in p… (#23111) * blog post urging Gatsby community members to meet virtually, not in person, until pandemic ends * add bold bullet points * Add bold bullet points * chore: format Co-authored-by: gatsbybot commit 7a686ede986142518d2601350b9236704664975f Author: Vladimir Razuvaev Date: Wed Apr 15 01:28:05 2020 +0700 chore(release): Publish - gatsby-source-graphql@2.4.0 commit c7b0f703add9b676fa9cacd3f9063c9e21fea555 Author: Kamil Kisiela Date: Tue Apr 14 20:09:53 2020 +0200 chore(gatsby-source-graphql): Use GraphQL Tools again (#23103) * Use GraphQL Tools again GraphQL Tools Fork was merged into GraphQL Tools v5 * Update packages/gatsby-source-graphql/src/__tests__/gatsby-node.js Co-Authored-By: Vladimir Razuvaev Co-authored-by: Vladimir Razuvaev commit 89567674c3e91f356cbf318883a0217ae7f4c220 Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 14 18:09:33 2020 +0200 fix(blog): MagMutual - brand names (#23072) * fix brand names * apply https commit c803288120a7f800083301c0ed0d0f8463bced9a Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 14 17:36:53 2020 +0200 fix(docs): security in Gatsby - remove domain from internal links (#23100) * fix local links * fix remove local domain commit e9c89310106e45557682366ae9f7133a6d652a74 Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 14 16:40:46 2020 +0200 fix format (#23073) commit b9e931a9f469323bb999129474d1df07983be7bf Author: Vladimir Razuvaev Date: Tue Apr 14 21:01:19 2020 +0700 chore(gatsby): Test sift filtering on date instances (skipped for now) (#23096) commit 900f31c127461d93d0025fd5972af10f74982bf1 Author: LB Date: Tue Apr 14 09:58:45 2020 -0400 Remove upcoming events (#23080) * Remove upcoming events * skip test * between the two of us we'll get this right, skip another test Co-authored-by: Laurie Barth commit 85e3580c695260c1322e03a13bf1fd8783e3806e Author: Peter van der Zee Date: Tue Apr 14 15:07:30 2020 +0200 chore(release): Publish - gatsby-theme-blog-core@1.3.22 - gatsby-theme-blog@1.4.22 - gatsby-theme-notes@1.2.21 - gatsby@2.20.20 commit d9bf48aa4beacd67a41ec255a1d96956afbc3652 Author: Mikhail Novikov Date: Tue Apr 14 15:17:07 2020 +0300 Revert "fix(gatsby): Set a timeout of 15 seconds on queries" (#23095) This reverts commit 1e81c76be653cadda933a7ed2e4ca0ca2d8742de. commit f864e88c74ecda1a2a59f308d98cf53c5421b8b9 Author: Andrew Fairlie Date: Tue Apr 14 13:09:36 2020 +0100 Add The Cares Family to Showcase (#23043) * Add The Cares Family to Showcase * Fix extra space on sites.yml * Remove incompatible categories Co-authored-by: LB commit fd57224888a9ab1e92bc0cbe786665cbf9ca6ead Author: Peter van der Zee <209817+pvdz@users.noreply.github.com> Date: Tue Apr 14 13:49:24 2020 +0200 perf(gatsby): Support `lte` for indexed fast filters (#22932) * Rename function to better fit what it returns * Use `filterCacheKey` more consistently * Consistency around `nodesPerValue` * Fix the name and typing of array of sets of nodes * Fix typing, fix perf bug The typing of the array of caches was incorrect (see previous commit too). The sort, affected in this commit, was sorting by `.length`, but the value is a `Set` so the intention was to sort by `.size` since its `.length` will always be `undefined`. This won't change semantics, just meant that the sort didn't do anything, leading to a sub-optimal performance. * Extend the `FilterCache` type to support op-specific meta data * Replace wild usage of `FilterType` * Refactor some old comments / naming to be consistent with current code / types * Suggested changes Followup commits suggested by @vladar in https://github.com/gatsbyjs/gatsby/pull/22742 * Enable `lte` for fast filters * Mandatory lint/type fix commit * And the loki commit * Enable/disable query and eleeMatch ops in one place * Fix tests, fix lte binary search lookup * Support `null` properly and handle not found binary search case The binary search should not return an arbitrary node, but rather a signal value (`undefined` in this case) that it failed somehow. It shouldn't, but who knows. The `null` case was a bit more work because it affects typign and all kinds of weird comparing edge cases. There's also a distinction between how `eq` treats `null` target values versus how `lte` treats them. So I had to encode them differently in the cache. Hence the type update. * Sigh, this is why I had to introduce that type in the first place * Forgot to remove an argument from followup work * Apply suggestions commit 65cfc811f7774e47d8e0e2b5379b939cd964d67e Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 14 13:47:24 2020 +0200 fix brand names (#23075) commit 408240b0a309abe2b4f1042f4adc324f18091b5f Author: Michael <184316+muescha@users.noreply.github.com> Date: Tue Apr 14 13:46:27 2020 +0200 fix code block language (#23074) commit b8a9b607ee97f25408bb1e509bb0f410ddeec2b8 Author: LekoArts Date: Tue Apr 14 13:25:05 2020 +0200 chore(release): Publish - gatsby-plugin-fullstory@2.2.2 commit 843cf3aee014debdc7eaf59009aa75e33025befd Author: Akash Arora Date: Tue Apr 14 16:51:45 2020 +0530 fix(gatsby-plugin-fullstory): Updated to Edge URL + Add Update… (#23089) * Updated to Edge URL + Add Updated JS Code Refer to issue #23088 * update snapshots Co-authored-by: LekoArts commit d32baaea10d036c09a36f1efcbfdfd3098561723 Author: Ward Peeters Date: Tue Apr 14 08:55:10 2020 +0200 chore(release): Publish - gatsby-cli@2.11.8 - gatsby-plugin-sitemap@2.3.2 - gatsby-theme-blog-core@1.3.21 - gatsby-theme-blog@1.4.21 - gatsby-theme-notes@1.2.20 - gatsby@2.20.19 commit 64627e700bafd03c17b435784ca87425ae1455a1 Author: Tyler Barnes Date: Mon Apr 13 14:01:10 2020 -0700 chore(benchmarks): upgrade wordpress benchmark (#23065) * upgrade to latest and remove unneeded packages * bump wp source version commit 36cb89057ee774ddff103ed7967742e51ab0a9a4 Author: LB Date: Mon Apr 13 16:23:07 2020 -0400 Make a note about duplicate behavior in theme authoring (#23055) Co-authored-by: Laurie Barth commit b969dc4c93842040a9e68e05fe0f666bdb4b2751 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Mon Apr 13 13:20:07 2020 -0700 docs: Docs sync behavior (#23022) * try a few languages to check perf * Add section on the sync behavior * Update docs/contributing/translation/sync-guide.md Co-Authored-By: Aisha Blake * Update docs/contributing/translation/sync-guide.md Co-Authored-By: Aisha Blake * Update docs/contributing/translation/sync-guide.md Co-Authored-By: Aisha Blake * Update i18n.js * chore: format Co-authored-by: Aisha Blake Co-authored-by: gatsbybot commit 4983d2067473b2bbff32742095f2dba2fff9662f Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Mon Apr 13 12:33:34 2020 -0700 Fix mobile nav bar text (#23069) commit 63b9dd67d421d6e64f5f74574d23d2628d0d41c9 Author: Michael <184316+muescha@users.noreply.github.com> Date: Mon Apr 13 20:56:35 2020 +0200 fix code block language (#23070) commit 0ede4c8ad14f33ffab1d4aa14c502b16eb1a6260 Author: Michael <184316+muescha@users.noreply.github.com> Date: Mon Apr 13 20:56:05 2020 +0200 fix casing in Image Captions (#23068) commit b67891a50ba37309d99c84f7cc92ead7fd56f358 Author: Michael <184316+muescha@users.noreply.github.com> Date: Mon Apr 13 20:24:22 2020 +0200 fix links (#23066) commit 13d3898a18faa43bc306a6cc0618e9e432b9a7b6 Author: Michael <184316+muescha@users.noreply.github.com> Date: Mon Apr 13 20:20:06 2020 +0200 fix brand names (#23067) commit bd5ca8e42fcfa5a6f41ecc9bbd71845076d676dd Author: João Pedro Schmitz Date: Mon Apr 13 15:03:35 2020 -0300 chore(starters): add gatsby-starter-ts (#22954) Co-authored-by: Kyle Gill commit a367a8885ff4b3c1cfa89111a3639fb107bacaaf Author: Masoud <50676388+masoudkarimif@users.noreply.github.com> Date: Mon Apr 13 12:03:01 2020 -0600 chore(sites): add whilenext.com (#22883) Co-authored-by: Kyle Gill commit 6f909b1f8b5818df4168b1628cc51cb47abd413f Author: Amadeus <38767929+Mozart409@users.noreply.github.com> Date: Mon Apr 13 20:02:14 2020 +0200 chore(starters): add gatsby-custom-tailwind (#22858) Co-authored-by: Kyle Gill commit a63b42ba8b1203a9ad8367bcc3951063b4dc402c Author: SaimirKapaj Date: Mon Apr 13 19:59:14 2020 +0200 chore(starters): add gatsby-redux-toolkit-typescript-starter (#22788) * Add starter to starter list * fixed formatting Co-authored-by: Saimir Kapaj Co-authored-by: Kyle Gill commit 41f1cc5e70ad61184a1acee2a3cbec234c486ce6 Author: Michelle Gienow Date: Mon Apr 13 12:01:11 2020 -0400 Add Virtual Gatsby Days registration blog post (#23060) * Add Virtual Gatsby Days registration blog post * Fix image path * Update index.md commit 74114a4103748b74733a900b9a9e492d9699c56b Author: Alejandro Ñáñez Ortiz Date: Mon Apr 13 10:58:32 2020 -0500 Update tailwind-css.md (#23028) CSS-in-JS section was referring to `Styled Components`, but in reality, it was using `Emotion`. I updated the documentation to reflect that. Co-authored-by: gatsbybot commit f9929bee7bb2642ebff4824aa295e3e44322bcf2 Author: Michelle Gienow Date: Mon Apr 13 11:32:22 2020 -0400 Update tagging (#23056) commit 66a1b7f443d7d2067163528693344f686ba6ed71 Author: Blaine Kasten Date: Mon Apr 13 09:11:46 2020 -0500 fix(gatsby-cli): Fix console methods incorrectly handling falsy values (#23021) * fix(gatsby-cli): Fix console.* methods incorectly handling falsy values * handle more situations commit 854241bb467d49adac8160fc594b7ff347fcf398 Author: caitlinthefirst Date: Mon Apr 13 09:51:23 2020 -0400 fix-typo commit 8d4c96dcd648772dff22f51425e59a5b30f849c7 Author: Andrew Louis Date: Mon Apr 13 09:20:16 2020 -0400 Adds duetocovid19.com to sites.yml (#23048) * Adds duetocovid19.com to sites.yml * chore: format Co-authored-by: gatsbybot commit ddde4f9848ac49822faa5b4c4223c1efe7c8a233 Author: Jeremy Le François Date: Mon Apr 13 14:01:07 2020 +0100 chore(docs): fix e-commerce showcase link (#23053) Access the page in question: https://www.gatsbyjs.org/docs/building-an-e-commerce-site/ commit 1cef9296a37ad1badfab487fc8ad60cb42138690 Author: Jongwoo Han <44025432+jongwooo@users.noreply.github.com> Date: Mon Apr 13 21:52:56 2020 +0900 chore(starters): update gatsby-starter-typescript (#23042) commit 34defce9ac13240282be95587b570826932536fe Author: Rolwin Reevan Monteiro Date: Mon Apr 13 18:15:57 2020 +0530 Update starters.yml (#22960) commit cb224bb49f4a3cffa758da62ede0f720b94af52d Author: Blaine Kasten Date: Mon Apr 13 07:17:01 2020 -0500 chore(scripts): Add conversion metrics to typecheck command (#23025) commit 21d0e5b52121b2516eb97667d185e50796ec7e7b Author: Tyler Barnes Date: Sun Apr 12 13:02:04 2020 -0700 chore(wordpress-benchmark): upgrade to latest packages and rem… (#23046) commit 8493de86e4a4dd780afc8d289eaf723c52c6de61 Author: Vladimir Razuvaev Date: Sun Apr 12 22:23:48 2020 +0700 fix(gatsby): call schema rebuild manually on __refresh (#23009) * fix(gatsby): call schema rebuild manually on __refresh * Avoid collisions between schema hot reloader and __refresh commit df870aba0888b1885309151ed473be70a1f0245f Author: Nicholas Duffy Date: Sun Apr 12 08:05:54 2020 -0600 chore(circleci): Remove benchmark configuration (#23034) commit 1e81c76be653cadda933a7ed2e4ca0ca2d8742de Author: Kyle Mathews Date: Sun Apr 12 08:03:49 2020 -0600 fix(gatsby): Set a timeout of 15 seconds on queries (#23036) Query resolvers can hang indefinitely right now which can be confusing to debug as there's no indication of what's happening. With a timeout set, eventually the hanging query will fail with an error like this which should help people figure out where to investigate commit 94267be6c11fd23db4a6a881b2964f0045d4725a Author: Peteris Bikis Date: Sat Apr 11 16:02:30 2020 +0100 fix: Ensure component order is deterministic (#22965) * Ensure component order is deterministic Ensure component order - and therefore hash - is deterministic when writing out .cache/async-requires.js * Add test for getComponents commit cff1d7f35c0cb81fa192336eee046cb83550af12 Author: Alex Moon Date: Sat Apr 11 23:01:39 2020 +0800 fix(plugin-sitemap): missing data in query results (#22843) * fix: #22703 missing data in serialize funciton * fix: revert a couple changes for url resolution to not change and get whole query * refactor: move otherData spread to top so site is overritten by propper url if needed * test: add test to confirm non standard data is passed commit eacffd99e1306603761b594329719ea2db91733d Author: Peter van der Zee Date: Sat Apr 11 14:36:40 2020 +0200 chore(release): Publish - gatsby-remark-embed-snippet@4.2.2 - gatsby-theme-blog-core@1.3.20 - gatsby-theme-blog@1.4.20 - gatsby-theme-notes@1.2.19 - gatsby@2.20.18 commit 96f8d4b28c47e6833a057e1bcce41ceb5e54ca45 Author: Peter van der Zee <209817+pvdz@users.noreply.github.com> Date: Sat Apr 11 14:33:10 2020 +0200 fix(gatsby): Use `moveSync` over `renameSync` to fix cross mount cases (#23029) commit 2fcb978c3b294660c55e912e6146b2c9e79b0e31 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Fri Apr 10 14:32:25 2020 -0700 Set the script to run at Friday 6pm PST (#23017) commit 17d7ba23c985283af35af935f7a2897678364914 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Fri Apr 10 14:17:29 2020 -0700 update time commit eb660bd3b0186839365fc4382bec564bd7d96469 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Fri Apr 10 14:10:11 2020 -0700 Add label to the sync PR even if no conflicts (#23014) commit 1cc34980a557d83db2480d635d2fbdcd89098953 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Fri Apr 10 14:06:50 2020 -0700 test run-all (#23016) commit f27bcadda1ab41ed012d1e0802217b2969fbe69f Author: Shane Thomas Date: Fri Apr 10 15:54:29 2020 -0500 docs: Update spelling error in 2020-04-05 blog post (#23015) commit 17d5f5d2bfab3a944dc0d0466140cd13eea9b12d Author: Michelle Gienow Date: Fri Apr 10 16:47:20 2020 -0400 Add blog post Agility CMS upgrades to Gatsby with author avatar (#22985) * Add blog post Agility CMS upgrades to Gatsby with author avatar * chore: format * Fix indent on Joel Varty newly added author ID * fix syntax that was making MDX choke Co-authored-by: gatsbybot Co-authored-by: Laurie Barth commit 109b905dd02c36177d537078663c5408828564e7 Author: Dan Bovey <41577056+danpoq@users.noreply.github.com> Date: Fri Apr 10 21:34:56 2020 +0100 feat(remark-embed-snippet): embed specific lines (#21907) * feat(remark-embed-snippet): embed specific lines * refactor(remark-embed-snippet): util file names * fix(remark-embed-snippet): language of snippet * feat(remark-embed-snippet): parse numeric range Co-authored-by: gatsbybot commit 0b0f5f3fb9e38d12cf45911f18b615652044d23d Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Fri Apr 10 13:25:26 2020 -0700 update weekly sync script (#23008) commit 5ca794d80468c702b53eba6d071fd4755d862142 Author: Ashutosh Hathidara Date: Sat Apr 11 01:41:24 2020 +0530 Added doc for absolute import from gatsby eslint rules or other tools (#22750) * Added doc for absolute import from gatsby eslint rules or other tools * Added doc for absolute import from gatsby eslint rules or other tools * Prettier * Prettier * Added new section for importing non-webpack tools * Update docs/docs/add-custom-webpack-config.md Co-Authored-By: LB * Update docs/docs/add-custom-webpack-config.md Co-Authored-By: LB * Update docs/docs/add-custom-webpack-config.md Co-Authored-By: LB * Prettier run * Undone other changes Co-authored-by: LB commit 1bfd02291250aafb1b49ddbc04c48b312a297d3e Author: Michelle Gienow Date: Fri Apr 10 15:52:10 2020 -0400 Update index.md (#23007) commit 250611abdb9905411281d4444265b57cbd129978 Author: John Bampton Date: Sat Apr 11 05:29:44 2020 +1000 chore(docs): 🧹 Remove whitespace from Markdown link (#23001) commit 45d2a629f794f3325b4b7abf5af3b4aa1ea5d014 Author: IMRAN KHAN <30754328+strongSoda@users.noreply.github.com> Date: Sat Apr 11 00:46:16 2020 +0530 Update sites.yml (#22881) commit 3ac14e86d96190e6a28e1b2ad458bc6a1161d94a Author: Blaine Kasten Date: Fri Apr 10 12:51:09 2020 -0500 chore(release): Publish - gatsby-cli@2.11.7 - gatsby-plugin-mdx@1.1.7 - gatsby-plugin-react-helmet@3.2.2 - gatsby-theme-blog-core@1.3.19 - gatsby-theme-blog@1.4.19 - gatsby-theme-notes@1.2.18 - gatsby@2.20.17 commit be85f2e51515582cef4dd140cd263b6c61c3a7e1 Author: Blaine Kasten Date: Fri Apr 10 12:50:10 2020 -0500 fix(gatsby-cli): Address an issue that caused empty logs to print undefined (#23000) * fix(gatsby-cli): Address an issue that caused empty logs to print undefined * fix lint commit ec806717db88d22e83679221dff83e2d85f98c49 Author: Kirill Vasiltsov <38713361+jlkiri@users.noreply.github.com> Date: Fri Apr 10 21:23:09 2020 +0900 fix(gatsby-plugin-mdx): Truncate non-latin language excerpts correctly (#22638) * Truncate option for non-latin languages * Add mention of truncate to docs commit 84a37d2ce1c5043ffcd6c817cc2467ed710c5790 Author: Phumrapee Limpianchop Date: Fri Apr 10 18:47:17 2020 +0700 chore(gatsby): properly typed return types of replaceHydrateFunction (#22854) * feat: properly typed return types of replaceHydrateFunction * refactor: use renderer type in react-dom instead of manually define commit ed2762fbfb1c18c5c25b3ae386b9654a22b36a8d Author: Steven Occhipinti Date: Fri Apr 10 21:30:48 2020 +1000 fix(gatsby-plugin-react-helmet): allow the use of `react-helmet@6` (#22993) Adjusts peerDependencies constraint. No code changes needed commit 93b821342f386333ab3fbd2982e227026fa529e0 Author: Vladimir Razuvaev Date: Fri Apr 10 18:04:05 2020 +0700 chore(release): Publish - gatsby-cli@2.11.6 - gatsby-source-drupal@3.4.3 - gatsby-theme-blog-core@1.3.18 - gatsby-theme-blog@1.4.18 - gatsby-theme-notes@1.2.17 - gatsby-transformer-documentationjs@4.2.2 - gatsby@2.20.16 commit f4da7560553457ce0c23050c1a05e3a67a843544 Author: Nicholas Capo Date: Fri Apr 10 03:34:42 2020 -0500 Benchmarks tune circleci (#22872) * circleci: Set GATSBY_CPU_COUNT on benchmarks to get them to run * Without this they (e.g. MDX) fail with ENOMEM * circleci: Remove incorrect second npm install * A second npm install would invalidate the second WARM_START build numbers * benchmarks/source-wordpress: Standardize dotenv configs Co-authored-by: Peter van der Zee <209817+pvdz@users.noreply.github.com> commit 5a2c0cf110f19c00cab4a588cd8998b06fb8e957 Author: Nicholas Duffy Date: Fri Apr 10 00:59:38 2020 -0600 chore: Add benchmarks and environment variables for CMS sources (#22893) * Add Contenful and DatoCMS benchmarks * Update WordPress environment loading * Update CircleCI environment variable loading * Add WordPress benchmarks * Split set environment variables into separate command commit ccaf075ba7c454cdbf0bd131ad6b4df2fdebdbc2 Author: Kyle Mathews Date: Thu Apr 9 22:55:35 2020 -0700 Update gatsby-config.js (#22992) Add empty plugin array commit 1272037a30cb3a88cf85b64bcea7e8cd9dd4853c Author: 1natsu <1natsu172@users.noreply.github.com> Date: Fri Apr 10 13:11:06 2020 +0900 chore(gatsby): Migrate redux/actions/types and redux/actions/restricted to TypeScript (#22297) * chore: restricted.js to TypeScript * fix: require to import statement * chore: enhance payload types Co-authored-by: Blaine Kasten commit 90afde3836042d1fe42dc62a4c2a25facb651c78 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Thu Apr 9 14:51:25 2020 -0700 fix(scripts/i18n) Add better error logging + dedupe logic of sync script (#22984) * Make the sync script work better for integration * process.exit when promises error * process.exit when promises error commit 405964e8380fa6dca1bad515ead0dc7a82bc2b04 Author: Tiffany Brown Date: Thu Apr 9 14:30:15 2020 -0700 Adds NPM article. (#22942) * Adds NPM article. Update glossary.md, doc-links.yaml with links to new entry. * Update docs/docs/glossary.md Follow capitalization of "Node package manager" from npmjs.com. Co-Authored-By: Aisha Blake * Update docs/docs/glossary/npm.md Update document title to use capitalization preferred by npm, Inc. Co-Authored-By: Aisha Blake * Update docs/docs/glossary/npm.md Change capitalization of "Node Package Manager" to "Node package manager" * Update docs/docs/glossary/npm.md Update directions for installing plugins to remove the `--save` flag since npm now does this by default. Change tutorial link to be relative instead of absolute. * Update docs/docs/glossary/npm.md: Clarify global installation Remove language about Gatsby "needing" to be installed globally. Instead call it the recommended way. Explain npx a little more. Added a clarifying note about plugins, npx and npm install. * Update docs/docs/glossary.md Capitalization of npm Co-Authored-By: Aisha Blake * Update docs/docs/glossary/npm.md Use active voice re: installing Gatsby globally. Co-Authored-By: Aisha Blake * Update docs/docs/glossary/npm.md Change NPM to npm for style, consistency. Co-Authored-By: Aisha Blake Co-authored-by: Aisha Blake commit 6b8aa5a7eb49337f4604cd9ab236d4347430e698 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Thu Apr 9 13:12:04 2020 -0700 Make the sync script work better for integration (#22981) commit f1a96165abf95936c3cdce4d8fef6949f6076038 Author: Aisha Blake Date: Thu Apr 9 14:56:38 2020 -0400 Automate i18n sync (#22967) * Automate test translation PR * Fix YAML spacing commit ee97e05cb91aface398dcc3529925d84ab5bca56 Author: Rosário Pereira Fernandes Date: Thu Apr 9 20:24:02 2020 +0200 docs: update docs/docs/deploying-to-firebase.md (#22966) * docs: fill out "static folder" stub article * docs: update docs/docs/deploying-to-firebase.md * chore: format Co-authored-by: gatsbybot commit 6a4adf1cd8541e667093fb87971da411f68b8d52 Author: Danilo Bürger Date: Thu Apr 9 19:52:44 2020 +0200 chore(gatsby): Improve graphql type definitions in BuildArgs (#22544) Copied from https://github.com/gatsbyjs/gatsby/commit/5bedc01e0fce12c4d7fb3f0d7df4ab1fba058530 commit ecc1ac06ae307b4e72ce76802f9f2b17e4b17844 Author: Apoorv Vardhan Date: Thu Apr 9 23:11:51 2020 +0530 Add Dgraph GraphQL API example under third party (#22696) Added [Dgraph](https://github.com/dgraph-io/dgraph) usage example in docs/docs/third-party-graphql.md. commit f4198e2f8a05ba247310f35a249f2fe201a0afad Author: Jérémy Barbet Date: Thu Apr 9 17:18:36 2020 +0000 feat(gatsby-cli): allow --recursive git url (#22747) commit 1381a0b155b978adabcb08ccdb4266c5671458c8 Author: Jason Quense Date: Thu Apr 9 12:59:19 2020 -0400 fix: create unique Nodes (#22774) * fix: create unique Nodes this used the same parent for every doc node, leading to `id` collisions for overloads with the same path. Also `lineNumber` seems broken from documentationjs, in a few cases it confusing different nodes for each other. * fix test commit 6c336d07b4ff0d66e9a47a024a99ca0b8dbbccf0 Author: Connor Mulqueen Date: Thu Apr 9 12:19:41 2020 -0400 chore(scripts): Fix grammar in comment (#22929) commit cdbe734d52a0b09667dc4418ba4132702dddaae5 Author: Shane Thomas Date: Thu Apr 9 11:11:46 2020 -0500 fix(gatsby-source-drupal): Verify nodes exist before looping through them (#22898) * Verify nodes exist before looping through them * Update to push nodes directly inside loop Co-Authored-By: Peter van der Zee <209817+pvdz@users.noreply.github.com> Co-authored-by: Peter van der Zee <209817+pvdz@users.noreply.github.com> commit c83b85ab531f4f17aa3624a2f144e03960d2e1d4 Author: Kyle Gill Date: Thu Apr 9 10:00:58 2020 -0600 docs: update creating source plugins guide & add example repo (#22943) * add example monorepo, make initial updates for source plugin guide and move some content to the transformer guide * update sample code in guide for proactive fetching * update READMEs and remove unused files * remove more unused files * Apply suggestions from code review Co-Authored-By: LB * split terminal comments up * Apply suggestions from code review Co-Authored-By: LB * code suggestions * more review suggestions Co-authored-by: LB commit f0ec0b53580ebe16a4dce44655e5e1a86bdbd839 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Thu Apr 9 06:15:59 2020 -0700 maintenance (scripts/i18n) Create run-all i18n script (#22873) * Create run-all i18n script * error checking * add more documentation commit d6ac25508b9385a76610494c4a2bb526a9e4d802 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Thu Apr 9 06:15:35 2020 -0700 feature: (scripts/i18n) Check if an existing sync PR exists before creating a new one. (#22617) * do not create a new pull request if a label exists * Add the labels to the created PRs * remove todo * spelling error * remove debug code * aliases in getRepository for clarity * whoops commit 0c3b3d3b899699b5abda04a6746fc01e6e1943c7 Author: Obinna Ekwuno Date: Thu Apr 9 14:12:22 2020 +0100 chore(doc): Add using cloudinary plugin for images to reference guides. (#22798) * Add guide to using cloudinary plugins * chore: format * Update link to using-gatsby-image * Add guide to using cloudinary plugins * Corrected my awful mistakes 😳 and updated this doc * Remove extra Cloudinary link * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update doc on cloudinary plugins * few fixes * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Updated Doc * chore: format * Updated doc * Update docs/docs/using-cloudinary-image-service.md Co-Authored-By: LB * Add additional information on parameters * Update docs/docs/using-cloudinary-image-service.md * chore: format Co-authored-by: gatsbybot Co-authored-by: LB commit 7f6b27fba7a4c5c47720e5900e80bee65ccd8579 Author: Nat Alison <1278991+tesseralis@users.noreply.github.com> Date: Thu Apr 9 05:41:57 2020 -0700 value to check if i18n is enabled for this build (#22956) commit 5037e9d427b585158b40b94ea5ce441bc3044928 Author: Phumrapee Limpianchop Date: Thu Apr 9 19:30:58 2020 +0700 chore(gatsby): Migrate graphql-runner into TypeScript (#22860) * feat: typed graphql-runner * fix: anything else context can also be boolean (graphql-runner.ts:L55) * refactor: format * fix: caling default export from ts * fix: defining default in test suite * cleanup PR * fix ci * fix lint again * fix ci again * update snapshot Co-authored-by: Blaine Kasten commit 246c39cf2dc419fc2bc55ff95812598d90e97789 Author: fartinmartin <30564420+fartinmartin@users.noreply.github.com> Date: Thu Apr 9 05:04:58 2020 -0700 Update programmatically-creating-pages.md (#22944) There is a slight inconsistency in the docs for the final steps of the `Make a template for your posts` section. The docs have separated this section into two steps (creating an MDX layout component + adding a GraphQL query) but when showing the completed component code (`src/components/posts-page-layout.js`) the component is missing some imports and the `` component that were present in the first step of this section. commit ddc759cde0a96b2be2f0ec8564900f64d1210c85 Author: Michelle Gienow Date: Thu Apr 9 07:35:19 2020 -0400 Add video blog post 10 for April 14th (#22946) * Add video blog post 10 for April 14th * chore: format Co-authored-by: gatsbybot commit 1872c2739cf25b968a34c28de39e6cab64196349 Author: Michelle Gienow Date: Thu Apr 9 07:34:53 2020 -0400 Add Gatsby Days LA video 11 (#22947) * Add Gatsby Days LA video 11 * chore: format Co-authored-by: gatsbybot commit 317da55266d31fb7794e453fdf37ae0578ee5da1 Author: Obinna Ekwuno Date: Thu Apr 9 12:10:11 2020 +0100 Replace "Sisphean labour" for readability reasons (#22961) While this really nice use of grammar , I feel like maybe just saying “ Feels like a task that can never be completed” in place of “ Sisyphean” would reduce the cognitive load in this part of the Doc commit 86cf9207b00c8bc53267f7c81ff7ae10e37163fb Author: Peter van der Zee <209817+pvdz@users.noreply.github.com> Date: Thu Apr 9 11:00:16 2020 +0200 fix(gatsby): Use tmp dir for tmp redux cache folder (#22959) commit a10382d022f34382cd1ba589e992782e59bd5a65 Author: Akshit Kr Nagpal Date: Thu Apr 9 14:19:42 2020 +0530 chore(gatsby): Convert redux/reducers/redirects to typescript (#22810) * Convert redux/reducer/redirects to typescript * Fix Tests * Fix Test * Fix * address PR feedback * fix issues in test Co-authored-by: Blaine Kasten commit d07c7b1b04cc8c806d7320e6df578843baa0595f Author: Blaine Kasten Date: Thu Apr 9 03:45:19 2020 -0500 chore(gatsby-cli): Migrate reporter to TypeScript (#22869) * chore(gatsby-cli): Migrate reporter to TypeScript * Complete changes from Matts review * fix tests * fix enumeration of class commit e691d769def92553332e2c0d7d8a9bb72f5c7aa7 Author: Ward Peeters Date: Thu Apr 9 10:12:40 2020 +0200 chore(release): Publish - gatsby-theme-blog-core@1.3.17 - gatsby-theme-blog@1.4.17 - gatsby-theme-notes@1.2.16 - gatsby@2.20.15 commit 7cf056ff9120cd9e07b19a2dacd8e92a2f86f286 Author: Ward Peeters Date: Thu Apr 9 10:07:37 2020 +0200 fix(gatsby): improve async commons chunking (#22879) --- .circleci/config.yml | 264 +-------- benchmarks/source-wordpress/gatsby-config.js | 2 +- benchmarks/source-wordpress/package.json | 6 +- .../index.md | 14 +- docs/blog/2020-04-02-LA-2020-Schau/index.md | 2 +- .../blog/2020-04-05-LA-2020-Gladwell/index.md | 6 +- .../index.md | 286 ++++++++++ .../post-image-1.png | Bin 0 -> 30677 bytes .../post-image-2.png | Bin 0 -> 9728 bytes .../post-image-3.png | Bin 0 -> 8931 bytes .../post-image-4.png | Bin 0 -> 15842 bytes .../post-image-5.png | Bin 0 -> 739545 bytes .../post-image-6.png | Bin 0 -> 13710 bytes .../post-image-7.png | Bin 0 -> 20830 bytes docs/blog/2020-04-14-LA-2020-Kim/index.md | 23 + .../index.md | 22 + .../virutalGatsbyDays.jpg | Bin 0 -> 84583 bytes docs/blog/2020-04-15-LA-2020-estevez/index.md | 20 + .../index.md | 35 ++ docs/blog/author.yaml | 4 + docs/blog/avatars/joel-varty.jpg | Bin 0 -> 9736 bytes docs/contributing/organize-a-gatsby-event.md | 2 +- docs/contributing/translation/sync-guide.md | 6 +- docs/docs/add-custom-webpack-config.md | 13 + docs/docs/building-an-e-commerce-site.md | 2 +- docs/docs/creating-a-source-plugin.md | 488 ++++++++++++++--- docs/docs/creating-a-transformer-plugin.md | 52 +- docs/docs/deploying-to-firebase.md | 110 ++-- docs/docs/glossary.md | 4 +- docs/docs/glossary/npm.md | 59 ++ .../mdx/programmatically-creating-pages.md | 6 +- docs/docs/security-in-gatsby.md | 55 +- docs/docs/tailwind-css.md | 4 +- docs/docs/third-party-graphql.md | 1 + docs/docs/using-cloudinary-image-service.md | 156 ++++++ docs/docs/using-gatsby-image.md | 2 +- docs/sites.yml | 43 ++ docs/starters.yml | 73 ++- docs/tutorial/building-a-theme.md | 2 + .../index.md | 28 +- examples/creating-source-plugins/README.md | 83 +++ .../creating-source-plugins/api/README.md | 3 + .../creating-source-plugins/api/package.json | 43 ++ .../creating-source-plugins/api/src/index.js | 138 +++++ .../api/src/schema.graphql | 30 + .../example-site/README.md | 3 + .../example-site/gatsby-config.js | 22 + .../example-site/package.json | 34 ++ .../example-site/src/pages/index.js | 72 +++ .../example-site/static/favicon.ico | Bin 0 -> 2813 bytes examples/creating-source-plugins/package.json | 14 + .../source-plugin/README.md | 3 + .../source-plugin/gatsby-node.js | 274 ++++++++++ .../source-plugin/index.js | 1 + .../source-plugin/package.json | 28 + package.json | 3 + packages/gatsby-cli/CHANGELOG.md | 18 + packages/gatsby-cli/package.json | 2 +- packages/gatsby-cli/src/index.ts | 2 +- packages/gatsby-cli/src/init-starter.ts | 11 +- .../src/reporter/__tests__/index.js | 2 +- .../src/reporter/__tests__/patch-console.ts | 60 ++ .../src/reporter/catch-exit-signals.ts | 42 ++ packages/gatsby-cli/src/reporter/index.js | 430 --------------- packages/gatsby-cli/src/reporter/index.ts | 11 + .../gatsby-cli/src/reporter/patch-console.ts | 24 + .../src/reporter/reporter-phantom.ts | 42 ++ .../src/reporter/reporter-progress.ts | 122 +++++ .../gatsby-cli/src/reporter/reporter-timer.ts | 88 +++ packages/gatsby-cli/src/reporter/reporter.ts | 259 +++++++++ .../gatsby-cli/src/reporter/start-logger.ts | 40 ++ packages/gatsby-cli/src/reporter/types.js | 31 -- packages/gatsby-cli/src/reporter/types.ts | 12 + packages/gatsby-plugin-fullstory/CHANGELOG.md | 6 + packages/gatsby-plugin-fullstory/package.json | 2 +- .../__snapshots__/gatsby-ssr.js.snap | 8 +- .../gatsby-plugin-fullstory/src/gatsby-ssr.js | 8 +- packages/gatsby-plugin-mdx/CHANGELOG.md | 6 + packages/gatsby-plugin-mdx/README.md | 16 + .../gatsby-plugin-mdx/gatsby/source-nodes.js | 16 +- packages/gatsby-plugin-mdx/package.json | 2 +- .../gatsby-plugin-react-helmet/CHANGELOG.md | 6 + .../gatsby-plugin-react-helmet/package.json | 4 +- packages/gatsby-plugin-sitemap/CHANGELOG.md | 6 + packages/gatsby-plugin-sitemap/package.json | 2 +- .../src/__tests__/internals.js | 11 + .../gatsby-plugin-sitemap/src/internals.js | 5 +- .../gatsby-remark-embed-snippet/CHANGELOG.md | 6 + .../gatsby-remark-embed-snippet/README.md | 46 +- .../gatsby-remark-embed-snippet/package.json | 2 +- .../src/__tests__/index.js | 50 ++ .../gatsby-remark-embed-snippet/src/index.js | 27 +- packages/gatsby-source-drupal/CHANGELOG.md | 6 + packages/gatsby-source-drupal/package.json | 2 +- packages/gatsby-source-drupal/src/utils.js | 8 +- packages/gatsby-source-graphql/CHANGELOG.md | 4 + packages/gatsby-source-graphql/package.json | 4 +- .../src/__tests__/gatsby-node.js | 2 +- .../gatsby-source-graphql/src/gatsby-node.js | 2 +- .../gatsby-source-graphql/src/transforms.js | 2 +- packages/gatsby-theme-blog-core/CHANGELOG.md | 24 + packages/gatsby-theme-blog-core/package.json | 6 +- packages/gatsby-theme-blog/CHANGELOG.md | 24 + packages/gatsby-theme-blog/package.json | 8 +- packages/gatsby-theme-notes/CHANGELOG.md | 24 + packages/gatsby-theme-notes/package.json | 6 +- .../CHANGELOG.md | 6 + .../package.json | 2 +- .../__snapshots__/gatsby-node.js.snap | 6 +- .../src/gatsby-node.js | 2 +- packages/gatsby/CHANGELOG.md | 36 ++ packages/gatsby/index.d.ts | 11 +- packages/gatsby/package.json | 4 +- ....js.snap => create-graphql-runner.js.snap} | 0 ...hql-runner.js => create-graphql-runner.js} | 8 +- .../bootstrap/__tests__/requires-writer.js | 25 + ...hql-runner.js => create-graphql-runner.ts} | 43 +- packages/gatsby/src/bootstrap/index.js | 4 +- .../gatsby/src/bootstrap/requires-writer.js | 2 + .../src/bootstrap/schema-hot-reloader.ts | 44 +- packages/gatsby/src/commands/develop.ts | 13 +- packages/gatsby/src/redux/__tests__/index.js | 2 +- packages/gatsby/src/redux/actions/internal.ts | 17 +- .../gatsby/src/redux/actions/restricted.js | 459 ---------------- .../gatsby/src/redux/actions/restricted.ts | 517 ++++++++++++++++++ packages/gatsby/src/redux/actions/types.js | 6 - packages/gatsby/src/redux/nodes.ts | 256 +++++++-- packages/gatsby/src/redux/persist.ts | 9 +- .../__tests__/{redirects.js => redirects.ts} | 15 +- packages/gatsby/src/redux/reducers/index.js | 3 +- .../gatsby/src/redux/reducers/redirects.js | 44 -- .../gatsby/src/redux/reducers/redirects.ts | 46 ++ packages/gatsby/src/redux/run-sift.js | 153 +++--- packages/gatsby/src/redux/types.ts | 93 +++- .../gatsby/src/schema/__tests__/node-model.js | 61 ++- .../gatsby/src/schema/__tests__/run-query.js | 133 ++++- packages/gatsby/src/schema/node-model.js | 4 +- packages/gatsby/src/types.ts | 2 +- packages/gatsby/src/utils/webpack.config.js | 7 +- scripts/check-ts.js | 42 +- scripts/e2e-test.sh | 2 +- scripts/i18n/README.md | 10 + scripts/i18n/package.json | 1 + scripts/i18n/run-all.js | 21 + scripts/i18n/sync.js | 118 +++- starters/hello-world/gatsby-config.js | 1 + www/gatsby-config.js | 10 +- www/gatsby-node.js | 3 +- www/src/components/I18nContext.js | 4 +- .../components/events/__tests__/event-list.js | 5 +- www/src/components/events/event-list.js | 11 +- www/src/components/navigation-mobile.js | 2 +- www/src/components/sidebar/section-title.js | 8 +- www/src/data/locales/en/messages.po | 6 +- www/src/data/locales/ja/messages.po | 6 +- www/src/data/sidebars/doc-links.yaml | 4 + www/src/utils/i18n.js | 3 + yarn.lock | 98 +++- 158 files changed, 4721 insertions(+), 1755 deletions(-) create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/index.md create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-1.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-2.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-3.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-4.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-5.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-6.png create mode 100644 docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-7.png create mode 100644 docs/blog/2020-04-14-LA-2020-Kim/index.md create mode 100644 docs/blog/2020-04-14-virtual-gatsby-days-registration/index.md create mode 100644 docs/blog/2020-04-14-virtual-gatsby-days-registration/virutalGatsbyDays.jpg create mode 100644 docs/blog/2020-04-15-LA-2020-estevez/index.md create mode 100644 docs/blog/2020-04-15-get-together-by-staying-apart-for-now/index.md create mode 100644 docs/blog/avatars/joel-varty.jpg create mode 100644 docs/docs/glossary/npm.md create mode 100644 docs/docs/using-cloudinary-image-service.md create mode 100644 examples/creating-source-plugins/README.md create mode 100644 examples/creating-source-plugins/api/README.md create mode 100644 examples/creating-source-plugins/api/package.json create mode 100644 examples/creating-source-plugins/api/src/index.js create mode 100644 examples/creating-source-plugins/api/src/schema.graphql create mode 100644 examples/creating-source-plugins/example-site/README.md create mode 100644 examples/creating-source-plugins/example-site/gatsby-config.js create mode 100644 examples/creating-source-plugins/example-site/package.json create mode 100644 examples/creating-source-plugins/example-site/src/pages/index.js create mode 100644 examples/creating-source-plugins/example-site/static/favicon.ico create mode 100644 examples/creating-source-plugins/package.json create mode 100644 examples/creating-source-plugins/source-plugin/README.md create mode 100644 examples/creating-source-plugins/source-plugin/gatsby-node.js create mode 100644 examples/creating-source-plugins/source-plugin/index.js create mode 100644 examples/creating-source-plugins/source-plugin/package.json create mode 100644 packages/gatsby-cli/src/reporter/__tests__/patch-console.ts create mode 100644 packages/gatsby-cli/src/reporter/catch-exit-signals.ts delete mode 100644 packages/gatsby-cli/src/reporter/index.js create mode 100644 packages/gatsby-cli/src/reporter/index.ts create mode 100644 packages/gatsby-cli/src/reporter/patch-console.ts create mode 100644 packages/gatsby-cli/src/reporter/reporter-phantom.ts create mode 100644 packages/gatsby-cli/src/reporter/reporter-progress.ts create mode 100644 packages/gatsby-cli/src/reporter/reporter-timer.ts create mode 100644 packages/gatsby-cli/src/reporter/reporter.ts create mode 100644 packages/gatsby-cli/src/reporter/start-logger.ts delete mode 100644 packages/gatsby-cli/src/reporter/types.js create mode 100644 packages/gatsby-cli/src/reporter/types.ts rename packages/gatsby/src/bootstrap/__tests__/__snapshots__/{graphql-runner.js.snap => create-graphql-runner.js.snap} (100%) rename packages/gatsby/src/bootstrap/__tests__/{graphql-runner.js => create-graphql-runner.js} (88%) rename packages/gatsby/src/bootstrap/{graphql-runner.js => create-graphql-runner.ts} (54%) delete mode 100644 packages/gatsby/src/redux/actions/restricted.js create mode 100644 packages/gatsby/src/redux/actions/restricted.ts delete mode 100644 packages/gatsby/src/redux/actions/types.js rename packages/gatsby/src/redux/reducers/__tests__/{redirects.js => redirects.ts} (86%) delete mode 100644 packages/gatsby/src/redux/reducers/redirects.js create mode 100644 packages/gatsby/src/redux/reducers/redirects.ts create mode 100644 scripts/i18n/run-all.js diff --git a/.circleci/config.yml b/.circleci/config.yml index fedf2b4bd6090..cff7048af7b10 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -130,58 +130,6 @@ commands: - slack/status: channel: eng-react-integration-status - run-benchmark: - parameters: - working_directory: - type: string - NUM_PAGES: - type: string - BENCHMARK_CONTENT_SOURCE: - type: string - BENCHMARK_REPO_NAME: - type: string - default: gatsbyjs/gatsby - BENCHMARK_SITE_TYPE: - type: string - default: BLOG - BENCHMARK_BRANCH: - type: string - default: master - steps: - - checkout - - run: - command: npm install - working_directory: << parameters.working_directory >> - environment: - NUM_PAGES: << parameters.NUM_PAGES >> - - run: - command: npm run build - working_directory: << parameters.working_directory >> - environment: - BENCHMARK_BUILD_TYPE: COLD_START - NUM_PAGES: << parameters.NUM_PAGES >> - BENCHMARK_CONTENT_SOURCE: << parameters.BENCHMARK_CONTENT_SOURCE >> - BENCHMARK_REPO_NAME: << parameters.BENCHMARK_REPO_NAME >> - BENCHMARK_SITE_TYPE: << parameters.BENCHMARK_SITE_TYPE >> - BENCHMARK_BRANCH: << parameters.BENCHMARK_BRANCH >> - CI_NAME: circleci - - run: - command: npm install - working_directory: << parameters.working_directory >> - environment: - NUM_PAGES: << parameters.NUM_PAGES >> - - run: - command: npm run build - working_directory: << parameters.working_directory >> - environment: - BENCHMARK_BUILD_TYPE: WARM_START - NUM_PAGES: << parameters.NUM_PAGES >> - BENCHMARK_CONTENT_SOURCE: << parameters.BENCHMARK_CONTENT_SOURCE >> - BENCHMARK_REPO_NAME: << parameters.BENCHMARK_REPO_NAME >> - BENCHMARK_SITE_TYPE: << parameters.BENCHMARK_SITE_TYPE >> - BENCHMARK_BRANCH: << parameters.BENCHMARK_BRANCH >> - CI_NAME: circleci - e2e-test: parameters: skip_file_change_test: @@ -399,6 +347,19 @@ jobs: command: yarn run update-source working_directory: ~/project/scripts/i18n + sync_translation_repo: + executor: node + steps: + - checkout + - run: git config --global user.name "GatsbyJS Bot" + - run: git config --global user.email "core-team@gatsbyjs.com" + - run: + command: yarn + working_directory: ~/project/scripts/i18n + - run: + command: yarn run-all sync + working_directory: ~/project/scripts/i18n + windows_unit_tests: executor: name: win/vs2019 @@ -439,210 +400,19 @@ jobs: paths: - "*" - benchmark_markdown_id_512: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_id - NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_id_4096: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_id - NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_id_8192: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_id - NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_id_32768: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_id - NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_id - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_slug_512: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_slug - NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_slug_4096: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_slug - NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_slug_8192: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_slug - NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_slug_32768: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_slug - NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_slug - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_table_512: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_table - NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_table_4096: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_table - NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_table_8192: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_table - NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table - BENCHMARK_SITE_TYPE: BLOG - - benchmark_markdown_table_32768: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/markdown_table - NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MARKDOWN - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/markdown_table - BENCHMARK_SITE_TYPE: BLOG - - benchmark_mdx_512: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/mdx - NUM_PAGES: "512" - BENCHMARK_CONTENT_SOURCE: MDX - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx - BENCHMARK_SITE_TYPE: BLOG - - benchmark_mdx_4096: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/mdx - NUM_PAGES: "4096" - BENCHMARK_CONTENT_SOURCE: MDX - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx - BENCHMARK_SITE_TYPE: BLOG - - benchmark_mdx_8192: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/mdx - NUM_PAGES: "8192" - BENCHMARK_CONTENT_SOURCE: MDX - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx - BENCHMARK_SITE_TYPE: BLOG - - benchmark_mdx_32768: - docker: - - image: "circleci/node:12" - steps: - - run-benchmark: - working_directory: benchmarks/mdx - NUM_PAGES: "32768" - BENCHMARK_CONTENT_SOURCE: MDX - BENCHMARK_REPO_NAME: gatsbyjs/gatsby/benchmarks/mdx - BENCHMARK_SITE_TYPE: BLOG - workflows: version: 2 - benchmark: - jobs: - - benchmark_markdown_id_512 - - benchmark_markdown_id_4096 - - benchmark_markdown_id_8192 - - benchmark_markdown_id_32768 - - benchmark_markdown_slug_512 - - benchmark_markdown_slug_4096 - - benchmark_markdown_slug_8192 - - benchmark_markdown_slug_32768 - - benchmark_markdown_table_512 - - benchmark_markdown_table_4096 - - benchmark_markdown_table_8192 - - benchmark_markdown_table_32768 - - benchmark_mdx_512 - - benchmark_mdx_4096 - - benchmark_mdx_8192 - - benchmark_mdx_32768 + weekly-i18n-sync: triggers: - schedule: - cron: 22 16 * * * + cron: "0 1 * * 6" filters: branches: only: - master + jobs: + - sync_translation_repo nightly-react-next: triggers: diff --git a/benchmarks/source-wordpress/gatsby-config.js b/benchmarks/source-wordpress/gatsby-config.js index 525ca36d03827..18756833d2749 100644 --- a/benchmarks/source-wordpress/gatsby-config.js +++ b/benchmarks/source-wordpress/gatsby-config.js @@ -1,5 +1,5 @@ require("dotenv").config({ - path: `.env`, + path: `.env.${process.env.NODE_ENV}`, }) module.exports = { diff --git a/benchmarks/source-wordpress/package.json b/benchmarks/source-wordpress/package.json index 6a539b989e503..b47a5b6fb5fe0 100644 --- a/benchmarks/source-wordpress/package.json +++ b/benchmarks/source-wordpress/package.json @@ -12,18 +12,14 @@ "serve": "gatsby serve", "start": "npm run develop" }, - "resolutions": { - "sharp": "0.25.1" - }, "dependencies": { "dotenv": "^8.2.0", "gatsby": "^2.19.35", "gatsby-image": "^2.2.40", "gatsby-plugin-sharp": "^2.4.5", "gatsby-source-filesystem": "^2.1.48", - "gatsby-source-wordpress-experimental": "^0.0.15", + "gatsby-source-wordpress-experimental": "^0.0.31", "gatsby-transformer-sharp": "^2.3.14", - "lodash.kebabcase": "^4.1.1", "react": "^16.12.0", "react-dom": "^16.12.0" }, diff --git a/docs/blog/2020-03-30-Fast-Secure-Flexible-MagMutual/index.md b/docs/blog/2020-03-30-Fast-Secure-Flexible-MagMutual/index.md index fc003743074e7..1faa18e14a31d 100644 --- a/docs/blog/2020-03-30-Fast-Secure-Flexible-MagMutual/index.md +++ b/docs/blog/2020-03-30-Fast-Secure-Flexible-MagMutual/index.md @@ -9,11 +9,11 @@ tags: - netlify --- -MagMutual, a leading professional healthcare liability insurer, needed to redesign and re-platform the company’s [MagMutual.com](http://www.magmutual.com) website to further its core mission: to serve and protect policyholders. +MagMutual, a leading professional healthcare liability insurer, needed to redesign and re-platform the company’s [MagMutual.com](https://www.magmutual.com) website to further its core mission: to serve and protect policyholders. ![Overview of the new MagMutal website UI](./MagMutual_design_sm.png) -To achieve the company's vision for their new site, MagMutual collaborated with [Mediacurrent](https://www.mediacurrent.com/), the Atlanta-based open source development and digital marketing agency. The new magmutual.com united Drupal and Gatsby to form a fully open source, enterprise-grade system that empowers MagMutual’s web team to closely yet easily manage content and customer experience. +To achieve the company's vision for their new site, MagMutual collaborated with [Mediacurrent](https://www.mediacurrent.com/), the Atlanta-based open source development and digital marketing agency. The new MagMutual.com united Drupal and Gatsby to form a fully open source, enterprise-grade system that empowers MagMutual’s web team to closely yet easily manage content and customer experience. ## The Challenge @@ -23,7 +23,7 @@ For MagMutual, the best path forward was an enterprise-grade CMS built on an ope ## The Solution -A fully decoupled Drupal 8 system powered by the Gatsbyjs platform lifted the burden from MagMutual’s technology team and put content authors in the driver’s seat. The Drupal 8 backend provides a powerful capacity for content modeling. Gatsby, the presentation layer, adds a robust dimension of UI flexibility and performance. +A fully decoupled Drupal 8 system powered by the Gatsby platform lifted the burden from MagMutual’s technology team and put content authors in the driver’s seat. The Drupal 8 backend provides a powerful capacity for content modeling. Gatsby, the presentation layer, adds a robust dimension of UI flexibility and performance. ![Mission statement page on MagMutual.com](./MagMutual_mission.png) @@ -73,9 +73,9 @@ From a security perspective, he continued, Drupal gave MagMutual a highly secure ### _Why Apollo GraphQL Server?_ -Central data source: Creates a single data source for your website, aggregating data from multiple data sources. -Data integrity: Apollo removes the need to sync data from different sources so it can be displayed on the website. Data is queried and retrieved in real-time using a simple API. -Developer velocity: Self-documented API for developers increases efficiency. +- **Central data source:** Creates a single data source for your website, aggregating data from multiple data sources. +- **Data integrity:** Apollo removes the need to sync data from different sources so it can be displayed on the website. Data is queried and retrieved in real-time using a simple API. +- **Developer velocity:** Self-documented API for developers increases efficiency. ### _Why Netlify?_ @@ -98,5 +98,5 @@ MagMutual serves the intersection of two rapidly evolving industries: insurance ## Resources - See the [complete case study for MagMutual.com](https://www.mediacurrent.com/work/case-study/magmutual-drupal-8-gatsby). -- Learn more about some of the development tools used for this project in our webinar, [Rain + GatsbyJS: Fast-Tracking to Drupal 8](https://www.mediacurrent.com/videos/webinar-recording-rain-gatsbyjs-fast-tracking-drupal-8). +- Learn more about some of the development tools used for this project in our webinar, [Rain + Gatsby: Fast-Tracking to Drupal 8](https://www.mediacurrent.com/videos/webinar-recording-rain-gatsbyjs-fast-tracking-drupal-8). - Planning for a decoupled Drupal/Gatsby project and not sure where to start? [Mediacurrent can help](https://www.mediacurrent.com/contact-us). diff --git a/docs/blog/2020-04-02-LA-2020-Schau/index.md b/docs/blog/2020-04-02-LA-2020-Schau/index.md index f4b39d0e23c30..71b1a2dc2c807 100644 --- a/docs/blog/2020-04-02-LA-2020-Schau/index.md +++ b/docs/blog/2020-04-02-LA-2020-Schau/index.md @@ -14,7 +14,7 @@ tags: _Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ -Dustin Shau, Gatsby's Head of Product, is a dedicated open source developer. He was first drawn to the framework by Gatsby’s exceptional performance and outstanding developer experience. Now a Gatsby team member, Dustin is focused on making Gatsby the fastest, most inclusive platform for building websites and web applications. +Dustin Schau, Gatsby's Head of Product, is a dedicated open source developer. He was first drawn to the framework by Gatsby’s exceptional performance and outstanding developer experience. Now a Gatsby team member, Dustin is focused on making Gatsby the fastest, most inclusive platform for building websites and web applications. Watch Dustin demonstrate the impressive build-time performance of Gatsby and Gatsby Cloud by walking through typical developer workflows, including updating a website using Contentful's headless CMS and then rapidly deploying the results through a content delivery network (CDN). And discover how Gatsby enables developers to quickly incorporate accessibility capabilities—such as a SkipNav function—to deliver inclusive web experiences to the widest possible audience. diff --git a/docs/blog/2020-04-05-LA-2020-Gladwell/index.md b/docs/blog/2020-04-05-LA-2020-Gladwell/index.md index ba538952dbb00..667ffa074c8b1 100644 --- a/docs/blog/2020-04-05-LA-2020-Gladwell/index.md +++ b/docs/blog/2020-04-05-LA-2020-Gladwell/index.md @@ -2,7 +2,7 @@ title: "Gatsby Days LA 2020 Video 3: Slash Build Times with Gatsby Builds Best Practices" date: 2020-04-05 author: Greg Thomas -excerpt: "React developer Grant Gladwell tells how he identified best practices for using Gatsby Builds to cut build time for image-heavy websites by a factor of five." +excerpt: "React developer Grant Glidewell tells how he identified best practices for using Gatsby Builds to cut build time for image-heavy websites by a factor of five." tags: - gatsby-days - community @@ -13,8 +13,8 @@ tags: _Welcome to the Gatsby Days 2020 Video Blog: Los Angeles Edition. In this series of eleven videos, you can catch up with all the wit and wisdom shared at the presentations from our February community gathering in LA. If you weren’t able to make it in person, these videos are the next best thing to owning a time machine! (Though owning a time machine would be super cool for sure, joining us at our next Gatsby Days—currently scheduled as a virtual event June 2nd-3rd—would be pretty awesome, too 💜. Follow [Gatsby on Twitter](https://twitter.com/gatsbyjs) to keep up with when registration starts, speaker announcements and other developments)._ -Grant Gladwell is a React developer dedicated to employing modern technologies in cutting-edge projects. During his time at the digital experience agency Third and Grove, Grant was part of the team that integrated Drupal and Gatsby to create the agency’s fast, yet content-rich website. He also helped build Gatsby Preview + Drupal—a live preview module for Drupal that can be used with Gatsby Cloud. +Grant Glidewell is a React developer dedicated to employing modern technologies in cutting-edge projects. During his time at the digital experience agency Third and Grove, Grant was part of the team that integrated Drupal and Gatsby to create the agency’s fast, yet content-rich website. He also helped build Gatsby Preview + Drupal—a live preview module for Drupal that can be used with Gatsby Cloud. At Gatsby Days LA 2020, Grant focused on performance. After analyzing top Gatsby-based sites, he and his team identified best practices that can help developers achieve blazing fast speeds. Check out this video of Grant’s presentation to discover how Gatsby Builds helped Third and Grove reduce build times for its image-heavy site from about 40 minutes to only 8. And learn how Gatsby’s lazy load components can deliver impressive performance benefits without excessive coding. -[![Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell](https://res.cloudinary.com/marcomontalbano/image/upload/v1585858632/video_to_markdown/images/youtube--xMorT50I0cw-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=xMorT50I0cw "Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Gladwell") +[![Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Glidewell](https://res.cloudinary.com/marcomontalbano/image/upload/v1585858632/video_to_markdown/images/youtube--xMorT50I0cw-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/watch?v=xMorT50I0cw "Gatsby Days LA Video 3: What separates the fastest Gatsby sites from everybody else with Grant Glidewell") diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/index.md b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/index.md new file mode 100644 index 0000000000000..faeadf524cef6 --- /dev/null +++ b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/index.md @@ -0,0 +1,286 @@ +--- +title: "Rebuilding the Agility CMS Website with Gatsby (one page at a time)" +date: 2020-04-13 +author: Joel Varty +excerpt: "When the Agility CMS team asked Joel Varty, the company's president, for a home page upgrade that could handle not only content but new integrations with mar-tech apps, he jumped at the chance to build it on Gatsby using JAMstack architecture." +tags: + - netlify + - headless-cms + - jamstack +--- + +I've been preaching about JAMStack for a while now, and lately I've been talking a lot about how you can [move your website to JAMStack without rebuilding everything](https://agilitycms.com/resources/posts/migrate-to-jamstack-now-no-excuses). + +I decided it was time to take my own advice and upgrade my company's website, [agilitycms.com](https://agilitycms.com), starting with the home page, and adding pages and sections over time. Agility CMS is a headless content management system running in the cloud (Microsoft Azure). The current website is built on ASP.Net Core. Our marketing team came to me with a request to build a brand new home page which included not only updating content, but a brand new design, new modules, and new integrations with mar-tech. + +This was just the opportunity I’d been looking for: A chance to practice what I've been preaching! What's also great is the current .net website is already built using a headless CMS, so I don't have to rewrite or migrate any content. + +## Goals + +- Build the new home page using [Gatsby](https://www.gatsbyjs.org/) +- Re-use much of the existing site content from [our headless cms](https://agilitycms.com/) +- Zero downtime + +## tl;dr + +For those of you who just want to see the code for the new site (it only has code for the modules that are on the homepage right now, but it will expand over time), it's all here on GitHub: https://github.com/agility/agility-website-gatsby. + +## Steps + +Here's what I did to get everything up and running, right from coding the new site, to deploying, testing and flipping over the DNS. + +Get it running locally with Gatsby +Implement the Header and Footer +Create a new Home Page +Run it in Gatsby Cloud +Deploy to Netlify +Setup the CDN to do the Edge Routing + +What's really cool is that this workflow isn't just for upgrading Agility websites to JAMstack - you can use it for any website! Now let’s break each step into specific details. + +## Step 1: Get it running locally with Gatsby + +It's really easy to get started creating a Gatsby website with Agility CMS. Just clone the [starter repo from github](https://github.com/agility/agility-gatsby-starter), open up the folder in [VS Code](https://code.visualstudio.com/) and pop in your API Keys. + +```shell +git clone https://github.com/agility/agility-gatsby-starter.git +``` + +Now, find your API keys on the Getting Started page of the [Agility CMS Content Manager](https://manager.agilitycms.com/) + +![Agility CMS Getting Started landing page](post-image-1.png "Agility CMS Screenshot") + +Put your keys into the **.env.development** and **.env.production** files. They look something like this and have instructions about which values go where. + +```text +# Your Instance Id +AGILITY_GUID= + +# Your Preview API Key (recommended) - you can get this from the Getting Started Page in Agility CMS +AGILITY_API_KEY= + +# If using your Preview API Key, set this to true +AGILITY_API_ISPREVIEW=true + +# If you want to enable /__refresh endpoint +ENABLE_GATSBY_REFRESH_ENDPOINT=true +``` + +Now, check out the **gatsby.config** file - it has a section for plugins, and the Agility CMS source plugin is called **@agility/gatsby-source-agilitycms**. Check that the language code and channel name matches what you have in your Agility CMS instance. + +### Modules and Page Templates + +Since this was an existing website, we already had a few Page Templates and Module Definitions set up in the instance. We need to make sure we at least have placeholders in our new Gatsby project for those, and we'll just implement whatever is needed for our new home page. + +![Project Folder Structure](post-image-2.png "Project Folder Structure") + +There are folders for Page Templates and Modules, and you can just put in placeholder React code for these right now. + +Here's an example Page Template component with a single content zone called "Main": + +```jsx +import React from "react" +import ContentZone from "../agility/components/ContentZone" + +const MainTemplate = props => { + return ( +
    + +
    + ) +} +export default MainTemplate +``` + +Here's an example Module component that doesn't do anything except output its name. + +```jsx +import React from "react" + +const LatestResources = ({ item }) => { + return
    LatestResources
    +} + +export default LatestResources +``` + +When I got all those things in place, I started up Gatsby to see what would happen. + +```shell +gatsby develop +``` + +Gatsby will pull down all the content for our website and put it into GraphQL. This is a _content sync_, so from now on it will only pull down a delta (what's changed) from Agility CMS. +![Alt Text](post-image-3.png "Agility CMS - Gatsby - Terminal Output") + +## Step 2: Implement the Header and Footer + +We need to make our new website look just like the old one, so we need to match the colors, fonts, and other visual styles as much as we can. You may want to pull in the CSS from your old site—or start from scratch if you want to make a clean break. + +Either way, this is a great time to familiarize yourself with the GraphQL data in your website. Point your browser to [http://localhost:8000/\_\_\_graphql](http://localhost:8000/___graphql) to start exploring your data, and you can build the query access and Shared Content or Sitemap data. You can see that all content is available, grouped by content definition name. + +Here's the query that I used to grab a Global Header shared content item, as well as the nested sitemap as JSON. + +```graphql +query GlobalHeaderQuery { + agilityGlobalHeader(properties: { referenceName: { eq: "globalheader" } }) { + customFields { + marketingBanner + logo { + url + label + } + } + preHeaderLinks { + customFields { + title + uRL { + href + target + text + } + } + } + } + agilitynestedsitemap { + internal { + content + } + } +} +``` + +Your query will look different, of course, but I hope you get the idea of how to query your Agility CMS content. + +Now, you can create a component that uses a `` to pull in the data and make it available. Check out the example `GlobalHeader.js` component in your project for an example of that. + +## Step 3: Create a new Home Page + +In Agility CMS, the first page in your sitemap is considered your Home Page. So, I created a new home page and temporarily called it home-2. I didn't publish it, but this meant that I could use this to build out the modules on the new home page. + +![Agility CMS Screenshot - temporary home page](post-image-4.png "Agility CMS Screenshot - Home Page") + +I created a couple of new Module Definitions that I needed for the new page design, so I created new react components in the **modules** folder for those. The amazing thing about the Agility CMS Gatsby implementation is that nearly all the data that you need to render a module on a page is given to you in a property called **item**. + +What I normally do is just `console.log("ModuleName", item)` so I can see exactly what that data looks like. Then run the site locally in your browser http://localhost:8000 and open up your Developer Tools to see what it looks like in the console. + +### Hot Reloading - Code and Content + +One of the best things about React development with Gatsby is that everything can be hot reloaded, including the content! + +If you leave your browser open beside your code, you can just make changes and see them. Additionally, if you open a second terminal window, you can also pull down any changes that you make to the content in Agility CMS without having to run `gatsby develop` again. + +```shell +curl -X POST http://localhost:8000/__refresh +``` + +Here's a side-by-side screenshot of my 2 monitor setup. You can see that I have 2 terminal windows opened in VS Code. + +![two screens side by side showing hot reloading website and the Gatsby code for it](post-image-5.png "Side-by-side Hot Module Reload") + +I really love this workflow! It makes it really easy to tweak things and see the changes instantly. + +## Step 4: Run it in Gatsby Cloud + +To get going, [Gatsby Cloud](https://www.gatsbyjs.com/) is the easiest way to Preview and Build Gatsby sites. The free version is enough to get you started. + +Push your code to a GitHub repo, sign up for Gatsby Cloud, and create a new site. When asked, simply choose "I already have a Gatsby site" and don't add any integrations just now. + +![landing page for Gatsby Cloud Create New Site](post-image-6.png "Gatsby Cloud - Create New Site") + +You can securely add your API Keys in the Environment Variable section of Settings. + +![Gatsby webpage for setting environment variables](post-image-7.png "Gatsby Cloud - Environment Variables") + +Now you can take the Preview link from Gatsby and plug that into Agility CMS in the Domain Configuration area of the Settings section. + +Additionally, Gatsby gives you webhook URLs for Preview and Build. You can go ahead and plug these into the Webhook area in Agility Settings. + +## Step 5: Deploy to Netlify + +Netlify is a really great service to easily host static websites. Even better, it integrates seamlessly so that Gatsby can automatically deploy your website to Netlify when it builds! + +Go ahead and create a free Netlify account and point to it under the Gatsby **Hosting Integrations** settings section. + +Since Gatsby is going to be building the LIVE version of our site, we need to publish our new Homepage in Agility. If you've reviewed everything in Preview and you're ready to go, the first thing you need to do is to disable the Syncing Web Servers for the existing website in Agility CMS. You'll have to coordinate this with your content team, of course. + +When I was testing all this out, I actually built my new site using the Preview API Keys temporarily. That way I could verify everything was working first. + +In the end, you're going to end up with a URL to your new home page in Netlify. + +## Step 6: Setup the CDN to do the Edge Routing + +We can use Edge computing to decide whether to route to the new website or the old one, depending on the page. + +In this example, I decided to use a [Stackpath](https://www.stackpath.com/) Script to do this for us. + +You set up a Stackpath site just like normal, but pointing to your OLD website's unique hostname. It can't be your public DNS name - you need to have another unique way to address that site. For example, since our website is hosted in an Azure App Service, we get an azurewebsites.net URL. + +Now you create a Script in Stackpath to do the routing. In our case, we ONLY want to route requests to the home page, plus any Gatsby-specific stuff, to our new website. + +You can also see that I'm only allowing for 60 seconds on caching in the CDN for all requests. This is because we don't have anything built into this workflow to clear the cache in this CDN, and I don't want my content team to have to wait too long to see their changes. I'll take care of that later. + +```javascript +// sample script +addEventListener("fetch", event => { + event.respondWith(handleRequest(event.request)) +}) + +/** + * Fetch and return the request body + * @param {Request} request + */ +async function handleRequest(request) { + // Wrap your script in a try/catch and return the error stack to view error information + try { + /* The request can be modified here before sending it with fetch */ + + const originalUrl = request.url + const url = new URL(request.url) + // we need get the url in order to figure out where to route them + let path = url.pathname + + //secondary domain... + const secDomain = "https://my-new-website.netlify.com" + + if ( + path == "/" || //redirect the home page... + path.indexOf("/webpack") != -1 || + path.indexOf("/common") != -1 || + path.indexOf("/component") != -1 || + path.indexOf("/page-data") != -1 || + path.indexOf("/styles") != -1 || + path.indexOf("/app-") != -1 + ) { + // we need get the url in order to figure out where to route them + request.url = secDomain + path + } + + const response = await fetch(request) + + response.headers.set("Cache-Control", "public, max-age=60") + + return response + } catch (e) { + return new Response(e.stack || e, { status: 500 }) + } +} +``` + +You can now test this whole thing with the unique Stackpath URL that you get (123xyz.stackpathcdn.com). + +Once you are happy with everything, you simply switch your DNS to point to Stackpath. + +That's it—you’re finished! + +If you have any questions about JAMstack or migrating to this technology, reach out! + +## Next Steps + +I encourage you to go ahead and use this technique as the starting point for one of the pages on your own website! You can use [Agility CMS for free](https://agilitycms.com/v3-free-signup-developers?source=devto) to do it. + +## BONUS CONTENT! + +As a companion to this article, I recorded a video that walks you through the steps I took and the different tools involved. I also highlight some of the really neat features of Agility CMS, Gatsby, Netlify, and Stackpath. + +[![Migrating a website to JAMstack with Gatsby](https://res.cloudinary.com/marcomontalbano/image/upload/v1586464859/video_to_markdown/images/youtube--WSIzYKDgJuE-c05b58ac6eb4c4700831b2b3070cd403.jpg)](https://www.youtube.com/embed/WSIzYKDgJuE "Migrating a website to JAMstack with Gatsby") diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-1.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fb5577091c08f8e3dee97ab7faa551ba80660f GIT binary patch literal 30677 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-3.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-3.png new file mode 100644 index 0000000000000000000000000000000000000000..56acad47f7885dec9a9be64acdd4a160e5dea406 GIT binary patch literal 8931 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-4.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-4.png new file mode 100644 index 0000000000000000000000000000000000000000..8591c472e3d6ac467fe98b7beb68f3f0bf6addfd GIT binary patch literal 15842 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

    htX?LgpBEEv9k%m8) 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 V)RnKbA0KT46lGOqYNS4W|9{ChKzjfH literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-5.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-5.png new file mode 100644 index 0000000000000000000000000000000000000000..f774a63b65e2d217771e909467943300be6126c9 GIT binary patch literal 739545 zcmWh!Wmr^87)C%qKsqFqxO9VbDAL{C-Q6it0@Bi5i!9w8(jhHf(%s#6c=*A?F1zQ< zoSE-?Yr+)d#NQ$lBE!JIyp@y?QG$U%{0ajDD~f~wUg2-wGXuXq7)vP0!oYY@!N7bC zf`PdMFMZvCfpKMlf!Q;Ff#FStfx&l3Z&Kt3Zy*>+i;KWKzx-sk7RG~D5M3l?MG-gP zh;Ud*A>9^;;KMMIBA-<}<_{h{V>ZOyR^Isei7yhwUi<#_g`>fND!>qa%9~rVx{5T5 zAfGddw{aA)v~jcLFe99Ux|=lFOj}Sa{70+(wm?(yOHrt~J9a*|Zw0#Bx*$}6CR;(> z%+%Cu(^o&%vF~{MzV8_6nFNy{MfF2%-6K039b2dW(P);C|I>r-inIFDtzuFT@N#dq zv9GR$t#lpfFD8uf(dyP|cT2_pdd}pcDCF1SEONDEohTdP<0)MWq`$cx*;TFh(Q$D( zPe{~LFzz)(w`y3ojcLbN>xO%cxZ+OpA&3#(iKkI4rAzKGywG*@9nIGm&rRtRPM(M$f3fW(aX3 z-p4tGd{&2@*c*e#QV;(mf~||*1pMMWKf#-Q*B#fv26Bel%~j^#?VDaUv7&eXsMX?> znU780sKRRX?uLHCtilOk7ne;*>>xh5&XFUC_L={q;+t_f9>Gz*5&QP%Deddk=lp)_ zpY5TBPNt75HP5OiWwdrYhWkpYWO$J|&{V#$aM&rS1g8R>(DskF2{R=B+33d2Xx-b3 z28-~A87BW65)GpL-o4gs%qmqtzNz#^RP`jfb|H>->=G&VyIg_ND;#pKAgNlJo?r8K zpVuN{_F^HKQ@YKgPmUKm?<67lmPbFQYmmG|#6^GOP$fvco@6<=rQb)>Orld;ASJ6A zghH)Or#Ze{B>gJFZ}jdYe5*R8!0}d95kuI3kP2c6|FK;F^0~U;N+6t~@r*x~;NMuT z#yVYee9O^*Ou~$B0mNT-0BgcrwDOMZdV!1iHLPK3ZKDydvF+(hITwFm;oqR&DKmPl zza%1}m*7X{_q2)lVNGgDAOf8SxSkFVS8|7^yIh(Q))QeEpS3pFewV)%R^%6IKxaIp{Ph@Zz}2d4e5xINrbi#`gY^KtZ+i7>LNwzj8KyPn(s ziC>;mQ_;XaaViB ztdKk~Y8gqMiIKHLPq;s=Y_#tuoC;++;pM@$^F3H!9eZ(nv|4%kVzn}H_^PtPveehD zt#EaHJ5nbpOV52U=we`H#cbYcYbkXZ&vnHH=UA^CKDkL#K-dMl2JD;FHe0!n7emS)+Tg|@|$#uC^`8?N5 ze8^^ga@Zv7VVp_@g&xr{AGIs_rb6N^q^qx{iEx(NqDa+un;Z}}|MHy8eY0MwsjE9X z8)A08+*9@2RQC%$JhbiY>)YMiTkDM^@;QyrH!*VhMsKgbda*m1F5sPL?{}U?6D~|1 z`!80UbgLsEP^Zx;c%k0j`Dl@+skzznb~9;rcXxHU)%#(v`~f*k*LVW_;% z8n(|i-wIjM(CMP{XsiUK$K&OUrmpU07>E!WH57OA~G5%^&u-X_=X%QUzG*Wjcly7T>GQN0my|6meeb z&cL;}+^CnT>1J(TU2(SGrnL`L8u#67>OYyPsJia%@9r9UcqAKD_JeobdwXyC7xI}dVXb-PkqP`K|MSDS&tThSpVP?$cB?m#Qv36q4);wjz+K z1JWNenrDjph`gPr`o&gkhu?Ta+6bUFc$dJ~KKW_+|0T)udSH=dcX?~oyIgL~6+HXK zyQnyG@gO+F>#B0`dTCm!F;dL5vzOUsgp;tnqTPMr`mjfEZr`ukPXCLawHnt_Ia>VT zTTSYIPOrSaQ`%eGq@}Bv;rS`=anIo&=ImY#bME_*<^oOp$04)Ry1KfHO|B6E0k7`v z?`iQO>^yy~t(A?MF8$}mX)&;7SLi|17enaMcs|$hiX(0?~V`m{!z`NE+i!l zzBqr=P1!PXo;VlIk3OYEX-_*H&BMfYA>#js>&sL%bu9~WMtyINUyVC9QbyN`Lu^8ewI|TOPC0t< zc7$6JPEeNo7P-7Ve4VW#S{sSFN&?ru$n(YW*&3@;pTGw51CG!Kn(<@qfyXw_sjXmJ zZloeOy&uC{3B{(imKQD>u;mApj=l3ZodpZ@?1E3BuwiEN@0$$~L?YGUIh zf+@*r+L=)6b>^XJN|KL1gii-5hMXhhqwK}6#A%UmRBJuxWURcZrxWINprH6Zc0!m^jy8ALYlD3KkC7B(&JpWdne|T7$l@Y@u<$a4{q8iXZKX$4C7)s-o|xCa=x<^Vw_aY7LR&8|Mh>IJtI--euR;CI~a>V{0@DU}FtX zYHO!4Ffd4o!CYKk$ByLFZbay_bIyK!mB`4!wYgLjmvT?KWi~#Y)bvi zjr-oGsjqKrYYP_?2C=@lx{CWwO@o7sM{-12T-h5vITh45!CI+-+Vz$@eygqn8AmzY zt3=AU@|~6lb#rx>9A|{$$1#pb73pvp-Y>OU1u9IdGHRkqIBblt0g(L<*;=K!MaWQy zVyPOVAh+|hc>C+0Dc$6(F1qe;jzJx;-LlvMgr8?Pa9$-?1v@o<%jI?pTWWfYgZ}yj zwTg_e7UH(mJhMr~%Tkf8CDwitmG`*SQarodRv){FsRb>g%~2{+U`n!X(vJ;XaoEmksY``?z>6GDwOk+B;9jrB&i-UA%@>`?Ez6c^ zU~5bwJNa#>{0}oF?thoq$_>uiNJEJgZFp@@LwL+K_NKbq-=FmfP!m5JlEIS`_N1p! z)it6aqMwxO-F$hf(O5%Q3D)Jm_A>~=7yVL&=C#xRf9NYDRlntO0xvGByYTb9}WD!Dzn$eSCk zU=Xj`8APKTeRxyampH_mrdb%d#995+w;*IrIQ^CTpz^9-*}B+o;WE*vu`Cr%_A^q? zG*_L>;Tnw%V!V%iD1)yA6s>_ z7MAhKEmRzDHWI5vXKhECkDm{RBlQ+VEXXZSCn=1oPQJ^(fd;k_Ad& zyPfp;KlF94JNEYWdfcprdY<;+&&|$$nsIHrUphXU6ndQOURP6CD3DG9y12fO7$Z{5^R^&q(cSMP@cr1-RF8FeYwzge;%E+(uBps z#f9z^L2InM7HK7xIx>wUBdQZIvzz-OLVT9P$4r(R!Qe*sZ>;?ZY^_Wo(iKC3ACO0-~% zU%q_#5gqOP^x)al)bw)maBzVt#i~_v44}WYTuy7()Ynh0%!pHB8G4!qzg(98p}z|t z1Q%U%PtTM-Qtu!1>SYG+5UQ)I!I+#M?_8l%bkPD=?}CMMa@tPzODa4MvbLLHJ=#3! z%CiD$ozcApIfBLIZ*8Nz4ny{3kLQ<5GS8B1;e`(h{0;Y;gvNf2-(jHYVA?(J?V69? z9Ua`dRa?dgt;*DC@nbT-Ap{zV|4%j_h&#WHnC-XPkN<6KK{gW3+fljU0 z4iiS|cKOO?_yv`A8FEamOAGLg%g5^oqT)E;%~+tOR<7?07@m(33ZeY7s=?!eR%4DX zt+=Onhqo5t=f(<5HbiGWrPMn3dya5l_SZ=#%P1BuHFa3DHc`fK|H(Yt(=85Jx>Aj_ z5s8*dI(YQ@P^P_n+Wy6PeeRRs-md4f$549;WcO+Np%h9No}1mb?kLrh3qLPm$1w1F zpWDNzk~>xc9w&HFF6!vWF0KeC;m}s3){3uW5g+y>Xw5}!>U&Qqs?idHuXF(xgoQG@ z*HP9}=TCtASM-NVGf!UEH!C7VjC6W^4H#5jl;5D1$!=M6n`{t_o!IZ!B;M5jU<4GL zAye~3Q>DMcRYMKG!9ol*(ilfO2vz72V!tPds+Ou8{J`nlPk;wp2o_Y`ag|63O5sM0 zP8_Nx(n{*$y&Tn8>d5Z7?D8>3gK6U9SPS?rmS2PjO^_UG-X5hlWbjR8jSsA{0cDmJ zP_ZH%H-Wk;|GF*5i|<*X;e=_{Ds*32K98%o2nbL8!io@Kg{t*tLVsc8k~0d`!;MU_ zu@K)X5!(M2Zab$H#NRphexw}x5~qNXEQ}E;qJV>|j6|L)RixsU5&H4Y${^{$?eeQb z?zF+DKLVyEh!nNIRdG~QtBLz)-h~(<{`Z&gjg5it+1jSMEUjf~IK=X&lxglbQYu7= z2Isq29^er<3Ka`#fzE#eqlO;hJxH+}{wZyntPWU>IF6+y%4mO(CBR9LpfnPNk(R^E z;f6`h;$)82jhPum%Wv`39Q8u>tTD5AQ%EJe?1ZrN>b6rXxT#j^k4sn*$t>CY=OXq# z{?657Q@Pi~yNm$XX3ax!5MsK`3&*4DPBmd+aBW}l;Xe@gwQP;jk7 zF*C7Vq!K<=t7>Lu#)29z!SM}Zl??g)&7-GYpu$oC48enH(jMK81IyIfJ3@y^oP)53<2A%`EY(tU(iMO%T3l&R zo3thv^Ct=D1Dnlsb7y^(J|?835Fp>e##*SXHRZ#>zk>{n{rlj!Ku{>5i;|s4lh{@r zIE*@3^Udynm4yzML)I0aKHyWeZM{>0Os$qHTvkv;Rq6WayG^AOsRChs%s!R_Y$F$% zB&n+=Bhz0*ApxZ0tf+8#Ru~a|G;>$sxnQ~+!NYp{2k-AU&3vT)%r|j`F~Ymz>9LI@<`ff+)JvHeU2 zf9ml=s$g(7gLQC|O<+mD<=RD=0dI*XTjE27J|lA4mWp)h^Vw4Szt$POoSq z!TI!&kzjhBF|^Lohz0@kKe6Vx)hM1&XuYut^jGR&)ND>9C8JhImEzUcsVMeEjz~iN zJ?;~@G=AFTPvKX^C`Lh3>xdZNh`Q!C%C>DB{EEZ!U8}w!%3!H=gvD?+KfQJPDp&GB z*;+2y&cD^v8VxB0Ed_lFIuoX~PU5<9c_j&dqY^!;M?HK*@b;;$vzI=7RMtdnp5KNl zuJwv1d3+DP=wJ&6eLqWClp+PSO*xAzvkhf+FT(4esm8NPEhKO6w4797KX#PYSONW{ zbUVKsah~_S*Q}$T<>_z>2W{HgYb)^2%shUBb?CYFY&z1n4}wqR9jFsHTiht|+A9X0 zjGMYJ$@Atb$x?ScLU_%ux-QepAoe9)#K+5(^~2#YJa|_;HVpd%#h1;k%0+p7k6uG7 z$1JHEuCrs%8gVU*FJBfp>>bFJDJMQkgi%5&*9VyJgf*ThWnXCV`{$d!bbik`8LF7={1oX5Gftw(%?r=p=hZg$-_pskNaURsLe);+~gN>XL<%ZI{bl$LsH( zxqW?oO{z8RmYPHXniv`yqKuaW_u{#e6MD0o^<)Y3oFWx^JOAR4)w=QV@!zXmp*)^v zlrIqGxb>PeSU7+>%O}o#*)#M7%20?$od9_TGfbqxWf$vZ8Z@=E))Lh9RwuKbI9@(< z>yuel#sq|y{r!DnA-{Ba|GP<0YV20phC>A}ILh1Zkik24YR+^Cxy{XKKwzkDXy_jt zMDB|s$;-mutTfJN}88Yzq?@tt~?Q>5ioraF9t2##Q>>y%EHe)UsM)=L$hKCN)9Z(|SSM~a1$ z=ErewCt5b=hpEr9bGP5AR_`+DsSI?3Ga{Ocy3$5Mq=;Rqx2+cIP|rIinoGUh&>^*d zCbqkXTHO915MCjq*miV~$3i>vJiHZq#TaQ(WZul}M7i+& ztnK%y_}>M%-~|r7g_hVQiXn*`?xFSV3~$nC4><3o+a~=T2cLW4R$kbcyI$f05qq zuWUgn2W#u#-~eFaFHQf+a^MvcOkkbRDVjaz6#=A8MMc$c`s9k2l(@TNL5&sZv^j{& z%geiSbeN+@WNkorrjEFOd(7423 z-m=M$gg-yE<1+k%sL-*pvi|O!=iRrq?#6b^9j9q3ir0&mLpPwNvi+_;@f%UOqlsPfSWI zNf+6?JsSfYabcXWJhZA@&;T{`G!3n+;%cWphWB8V+S<~DPnAJ_xor`2ud^DBzft{as_KC-LZ3A%h~M z^u5Q3fst8}X2Y_YofRJsZ%idpg#0roJX@Q~}tiRONXSr!z2SXp}UsYuu|GaaheQF{KC^Y1N-@V*o zp%*lpSuU-GNUZ$L^x*$}c7}DV>y6&Up(BtFrK_~~;ltF|yM-ViAaF%!+~h@vRr&3m zOxLHWk`AItv_ybge?f8oRaD1Qn88sPl-gorWB-s}tc4?&vaz$PYN`_>%c91Lh#P$Y zV)?DDfhu%ihAKgpalf4rLtNOML;33GE@>& z@f#?wm;LT-jVj;S9@_qb4t96L15I0nZu2mLa=NKZxgS3{C8I#A6wCowYadc%;)d{P z@XkPisj6*_v?R2#wV#}xwtB6q`WEG%TfT-WZPHLlSsAO7LH7t##f2SJJX!omjOFmy z!c5ovJg;zaO`RFT$rKUK23jUmtK$$3!W(0>l10a-VC=B?H(6YU*mq$t^>BdvvMLSh+$*@d`^eR-S>u zJ!JYJ`uxKm2Pxi@HMR9{cpieRtO17aOeP3W5q;wE85{LGtMDP_kRlbj8Z)i1o?L+4 zLo5x{-sV=)42X1o+~_-w!XBpp#U^fOJ2^9jEW_?)${T9>&(4q^;owA!)eMvhwEn}2 z#E1|D_61<+fZ;PTGFqgXooXw87c+hrrEBXMZatJMYfqW0T&B|CxQ-x<6gPmw&JJ3g zq`Es7Fwr(Kl(IYi0Z37Ny&! zV@Y66xYj1keZ@CPgQNHA3eUdXH+Zwa)Xd!c@Odjav#k%50uqu#O6-AoZtg%b9t)i9 z>aSN(Xd_wvf2v;v%v1HUpsJ`AsL)k5HA&gqGxPEB8N5r*$asf>l3(6BlvfyaS{95e7-Q;mRtWQRX6{E^0nOsgZs|q{;fvI7ec`w`EsZySKx)x<}QPh?+=N zQ4L-nLj3cX>=$*!_4>UH|Jlc=6*4=CrG7Gyl9L&)V9snh@RudaSj6$*N*5D4{IH1R zOpuO~D;BRG^>7({I-Vn+oXhm~$%a>62xx2=2TA3=$_=j={PbQweF=)v&U4>5J^fMJ z;TpxItUl}U_hxg`v-P=iqb89|!T$$wp^R@+x$z8tD(sTlRhE!NLZ$XW5_nR-z1q(VV?^+4Vnf>aY8_dE4{ z`LV{iU+uNeRvZMJ2GoI1hUYXgb_~?%RVdMc9qlbl+|id_$v*J=XoclZ$B>NHiMa_m z`=)3QlQ3mn$%(^J1w5b<*{b97z7j5PIYYL!wFMmlIT*I9t4l^+-udRl5Xe_yximVh zUJ1&Da;%)3y=!aaX=!OCB_%NfCO5_Hcl2_Z`~#o__&)mD*xTmOOlR)gZf9-JRvPQH zJ7$=$N%E6YCk>5HPIdv**ywgh2ml-^8k*CKM+ZJRJNvFu<460$vc8kS1`O!GMwJqv zas&nj0_0Ooa4k4EI2jok1-b-}^I8G*47O1_r5;?iU-V|05JRN>iGSc^79F4 z=F|Q5r~MZ=|AKKJ)|j8jfiZ>?A?oGry}Q4kr&W5kS6n`^ygZ_9-`W!ZhX}e;O-;?o zR+>F*1@Nd(`YWs_FE1}EYihbXI$!`4=?X=6KKb`~B%SAryE|8i;R*0n7X&kqdyHb? z5YbLv6vfzB%omyUcVOsu5r&0v9<^qrQit0!Q_$UBh6KdO?b;c=yz=sBAP=5hmixcd zEK=_SRw=i*@5WrOw;PfAOVlA4Q=j^eAcag`ZnfLlWuG(G|%MU2?9(v6)?9<3(&gE?an+NJ9OIv@BXMzpaahH#` zOgblts?ClEn?6mKMw-wqaw=0cUL$cJUu;q{-mXrmR3m+g7?x`rsr1IbFS69GC183h|c>oBc2B79&&qq&$ON%(Ym@i zO?_=+N5@#<9I()0HVqQLO3lq3seKn_i!}g%B#q17@oYmfyoVecJO1LrrMjx+hh-|* z7Gp+y>N7K38X7t(w+@?mI5nt_37Vr2zA+%;UDcR}DBk;B2xBp!cJ$<0}aMFU#868f^aa zoxErOh6aIyE*?#6YHOR&?0$?D(PwFGou@;`&ch>_6I0mS91127HBZXi9G`w@2>5*? zBWNJ?vD4JMHH}9^MC4LaugsK?l9@u4RS(nY)Y!c?fwk$BQhLa!M7#ehdwBS*QV|~L zX0wa)abjJ|-9*Xj}rFUsV7W$AKn+`9HylYMULUP0;$GMpbh{^0?h?01bD1hB+9KK#)>nq@FK)gQd4t*nTt&==K!3a zWv_j#hzOL8Gf%W1KMar!Uoi*>s6=X2B)O`b^8!!E*v>CgLWDY20xWadBq;znS@`)y zq@_^`l;$=K|A~2tio%2_np#?>fEE!a)2-vo)0n^C}_w|4XO zeW~CielYyK{MO|nyTr&Yg8#zvC-V8G^XEvPDh)GdA>3uCyb79H7<+MzM*V^22E8( zMaSlFbQe}LT0B=#tgjaU-iymiHeSwNfW-lF0gMG`R_{oNDDa}=2l7+W zlPLj$&XCKqB&-(~4-+#2sN?LZ_IlhEaKe$DLq(JhJJ}cI>}-N9K`OYm*41vQO;j2R zta1^4(n77Gs>Vh@9qW7LZcM+-{?>B@x|!m~NECchP<0|)n#6#RdoAYXRgKa@AJizt!GrYJ)PJ)a!7gxCTyA7J3&e?SQPFsd&w?3bop-?I4f2N3tR2H_@c^~7c z;w=lnq`w|t(9#}vT|$Hzin2Cmtg?x?x^f%I@aBj~fo~uXNQEde;Av`VI=(VcEX~~^ z?CBDx*+j7bwSaSG;6FA7-y?fvuRF`X!plt)B1kOK-!-^+9&xs|7|82C@z_@w3jWqw z5&E1TlHIg!MyFEb#O9WM#VUJ?7FQ-xZ+4Pm= zv?cyte$~vX+1HX!1flA2iwGnJdOXPe4%H7%un2oC>lG9`4aEbEeT@`^=fgkSg1)KV z*GHf>5B>Z10pzia0P;{O>W=La_qbThJ1}wg075G_3xDSuqJ~!YV^S0p6jXHd<|{pM zaYQcr<$NHDR#vhCk$GU#2{^tlz0>JnmUX|IgyA_I0<}nuD$}OU;(2~!I7bKcU1DCB z@9c&0lM6HE0hI!+$(<&kd`ziY+q3fX%Ya%3SY=JUw%a8zn>BSb;Qs+M-*PrcpU&$V z4%FQjPtjF(5LxL(y0Nf8lAV0<@=sQ~K*XgA2(=d%9DqQ8KXPf1^YRk)4;!~LUy8N$ zOc^U1Tc>ff<|_~2KfAcPvI+J0}0zM#s(zpz{RRJwlBH3eeXCz z(ceQ9Xl9)v#N7v@_B)8#MR$0AAkDBE-qpvJA?pso@>1xy1AD-q^nS}U&$YhNZk`BZ zUIG1}O78IL>4@LT@2!1}7?;-y(OAuWL#V0YAe(XO-&#>vTh5BtOHD=M?jDbZoQ?OI zara(6Xxh|nNktfA<;&cSpIxpJivwD#7YON-ti=Qgr`BKn6>&bRBl3UXOkyzq%x8Ap zh`H?6AUpHJcEW+Q(pwKl7A{!5luMfR=p4VT{Xc{aFD$vl zuRzXE!gW1nYBG@#@;==xlXZmZUKBrbY4-hx^#rMr(j5!=VvIs))B!6fscCsgF~a{yCq za>ZRBRMb3P2fw`ELk}kKkaqKh>FE^}ai?ddVRrWSjSYVfezmc;u8xursi>(DAx{A@ zkd^+wG_E88ZV`YW{r>&A_js{#cd3p|5~|9{RsX#Yn}LY|z}=Lz4AE!}1oJ|OBk2E3 zdM*8HYjLh6?rdS-To4_zU0=&8g8mE=4jWEtZp!?mc`>8$L)$cXC=ATyV@s36;Pz8} z+ab9$oG{uQ9E=qsEHYHo)Gy`;2tek6Tqp_c-pUrKVqmuSmIa!4 z`3Q)JKsF`q^75_GIE^EpwI`S{3kEw=k71ef6N=~<2}+Owk&%57-MYHFb)`1hK(=ke z*%QP;i+E#)xW&h%oZ$m3lhxEb$Rzq z_TEqa?FqFB5;0Q$y$aqX5FY|R3Eph}3id_(3OAJsb;39o%Yp~{W zSrC<)C|{?l?4Z&^jLxMFYV0@D(~Nz7jT*fiGP&dLu8)?0Q3}?-4NOb02l>d&jc#}W z`Kdbgci*nKGbt`xV|?xXfcJV25K;jjOU5JqKEYZY|4dK7ARUm zT3SET|4g5D0L!Z7@e0Hf-r+Op7`VBGjE^ghWcvPefdmiP>q7FX;{!v{;v~8c^|YT= z>2O0rLV&*8iKB)9f{MUYSQO-$JBYRT!;7Um$jz8gDzW$UN4A-%NV-rZ185zWfwzeBid^pIS9DL1Mq*Us3 zw*RRxsh6ymBqgP!Wr-^qI5@sCa|JDlE`Denc*ZR z;1Pg)vMmTccL$^3gDR4%Rix!UgF>Hd0p^R(*qDX}pmI<_EK;TTF<&A^aERzY3lYsx z5K%qgV_W*;B+eh?4ZkowjRy`v03it2g=M}~!Ta>%E>M+HPt|>>hDJa)YSyI92H~6Dqe4= zwK{SNoUtpp2SmP&^BLRN*yZN3d~}Uo%^{;IJQ|;fGxG6CH|~pyllf0k1sAC5ed}Nv z!E{J+risFU>=xj3m||>mBVGhEw<^ALLFaivQBl!J6)I{f9=C^gd~+mQcw3$i zo$FU5lMS5N!NnTu%B6$=m4t+b(&9#Jobv#4O~QNvu#aYfcX9@aCp!ZB%|Kwt;A8(p z_>K%q{^Vgaz2ICXZchC*QMrAWTi9i==e-LW|BMI?^3S3FP$_~HKbG*Fk~a;lIu&*Q z8^d_?eFTHi=(D0fLkilxn{WMe$$2|M@qA?Rf#&P%TtFg6TKnBfh2ya?&75s_2ZohA zx)f7{W|1ye9!zda@Z1#(O4u{*e|!kx2r0(Dnxd5Ess`u1s!b9<;XX*stgIHE$+PRH z=E)xav)KD!S|Cyv_vNxwE~mA`IY0f2a;rP>?e)Xqy^bG zeyjOAgngoY3urjhqOPp^0sSc+10cqict5BypHx+^DeHmG7dN!|vKwDu5X3TWX>N5j z^!-+)^EQTtdhF)8r{MkEXj7jQKJx333o_I$a8jZR6j*@bJReShv0t(;=(lC=hkz3- zEQsEb)OPWoJF2^z+f7ll4}5^@pqw3bs3GArA7^X0Q3i57AWY^$_nKw;?NNsBF0QXZ zQehPAbqryRSLR1Wrl0i&)~#P72>pOS8JHMzED1*iu8D#3__CBEdVuBNa(w4{gj1$g z{Nu-uiuk2fbC9J3X6Uj1^F2U}PT&v-z$N_aFW1TW63Xqm_mkvep$ot5F=u((B@4^#_rQ%VaDf5Ss1p?tEhNX31rnJj=R(itK%2?*SbLM{ zcV~&(RbiuRE(i<42Yt*s|G>eEX%BTeuq)1$g)WspW^OwHNYi%H!wgI(9`J>LcNMAp zQlazNn#`({v-taxd}MCBArJf#2oQeM@UX08Z^`~#OW_QCCd`{rV(ibl+jDCi$^4OJ z%t+QlD{{#s|CaQYvivTtD0D`-&XLFn_pS8{4Er{Z%!-5e`74WuKL>s+ovZ7zz{owl zkF>#`RA=%~FKsu}U-*0Q*uhv|mqBK~^rxbhEJ&V|7igU4BgW^)oz&0Co^DQqc2^Of zSgo8knX%mRJt_G5+wo?qE#2aaz6$(V-umIMH`GM!)4C!mws~4+Ts?4~5^^ti1*z}6 z`Y1e0?RUghZqj(J-#DHe5P93C{fsor^l{9Mi;wH4KeAn%_OSg{?X~-QAT4J0_xWb> zppe#n^W?+b2DrWV=yD{2AF21B_`Z_x24QgT> ze~{@!+qriJ0iHqJs#3!QberjEwIQAZ;+0~g#KgqU0WQ2pA!V>8sg%=w{|%343V;f6wA7!p|cv&$n&{rEHqQu&7m zdrk!hqqrz>#@>?j3BX=P#gLJco0y;PWgivnDlTsuthHAAyB^&4q6~$3UzcPDjE}R1 zgoJwBeUU$Zx<8JWH0O5SLbcazdMVzO9_a^eiPO`ZAgOwr!QYrc9G>d{Tn8YBRn#>N zPFSl$B$Y>0gcv0PcX^oUf&1GEoZb6o-o) z%DT)#IE8LW2Zl$k+Q=#oRia*}}u1u~vcLStv^z|sTGSc{*ltA+sDHu~IRfwNNp zE0v;VDV$bfD1eyuf673JW#{JZ2gLdO{5*ehIu?S05|Iq~H0cTk@u^4!oS+R34t@<* z3-^7$rk?-0D|psGBTVP?Y8yabiF9b%jcY)DX|ow0|u^K%8F)J|4s0VRX+G*>(9hhi+@toN~R;jF(M2^^QUlgXTp;lMJX zw7W=hG=;0*EMH3(m>{D_bIMM3vy`kay`8K%{up_Gl;V;wu%wLnb4Q6c4XN5cu`TVGEOaVKfpzkfW%!~zUU0yKn?&h0s}Micxt5_ z$fb7Gy;YI#!|CD0YF1&0U6>;yj2xSu9(i~m2Iokrqp~Q|hT}#x4Xh~%MH56MqPSwc zp-^OqVMS}LEF~6MiUdY<-(ubd9zMPUEE(M<7U)_p&)i2)yiw;jhwKEW0uQTW5^&;Z zHc*Zf2MUzN1(CfH_>A3O&L%9P?)kKJM5b~5N~9;|_K1$ ziP+1dSD!mCw(@-j#1yF52Unaa(`sM=&n{QVQS$hmaU-G;XKOG_Oim8PQiyBn>6zKu zzMW**J=zmiB-z)4Xf|-xlv#@yv*O|7y(1*1#EY)1s*-B78IY<~a@}s&HX#-N5Y+Vw zn?;fRu;%#>ZBx_4$p}`FNKpUnXFBGQ571imf=wjD_ti`?*j*d|P$FTvYSZCLzYBRy zTpTWi+XW|qOtw#D@`G0n6 z2;g*=;&GG&sgSxH=C5A?yj}CLB(!JlN2Cp5W&PQT@7`NQxtF)jNC*;s`zQ7IberK! zy3Zyu5(GOkNCjtL=nGP!>Fk##bI)m5O6cL=tl;1-EiB9!eDn_lzdAir_Qick!lqFg zr8T)6wvtMGzwLb3##(O6(0=^02)_mcCfsz}A1?F0vBf*Z;On=0XTY>inhuqy3$xVAufHP0w}}y2dBruNgjQL8j;2b0eNa8t!-7SL2y{e2wYduL8=TNA6WRK&*fD_aXS| zI88f^lz;y&}c`4tyRKiF#CGhuq6m+HvB ziyTH+=cU#Qik3ItLg23=a~@0}%W6Z(lbz*sd&m618PP6u_;4-a1lrdp>=p_b%GwJTeL24s=q4khWP07{Al=m~V( zC1bu)zlB%?!Sqj`a};W#@_4+j7z&)ifc;dKC#71lPKy!@+f+8byc|V3UMjtPYKzD( zY-cKCojM5oq5R*NK-mMCjm5m=x04l-&9+Xr#HSXEPi4O!l))jev4zPlzT=iI;B*1t zP*PH6paKPP4$dAbh#}9x{oP#ypI;L2fWR@S?Y*gDp!?3YqR%e835e%ig9*Y@Fmn3$ z?^Q@>2#6CI8yW^c6$^BjFeAi3_QDus{YnpQ5fBmQ7H6}|>(NzJH8gc|G-&4g4t7)q zaq;upz1`ETYCAz}gaK}@YsBHCUWHCm{E(QhckzLEa+19!Uugry6EwGh!wryW%T=PS zHhTYtFiZ^OL8n>8Q(rVD@^KozM&cf$xwuxT1f|L!xzLvb;3jNgmZ?`61DN#Wbvhu! z={Pom+U#zh8g=D1LA#GMF+FWN!tWB&Vxuwi;eV3OJCN%BedA^%vQ>6egz(6oQPQww zWoKoF>~RPgWmHDU-g|}Ym7Tq^$#!t;WBc9b`}^a0{&*gVb3W&N-|zdruGa;mj@JzL zqh7+ESOlD7FqDHALf+`Lk85?n;iw?!yC!vXxF+S2Dk~~VKt9mb#StH`BdGie--yBD zb&f`US{JK|l7Gfn47cep;fnCvD9aJ%|0f{)UcAGm_#;`DV=~qpAC|$e%l!V4nK8WP zsqDM^h1f15xzbiToRzk-nGHqZ7rxkqdLBtIl;w*}e_ddBGa9#6HAj_;h71Q(r{kM8 z8XB75yfZO;>jPT}n7GH8*+hJl`&f0-s~(ml9A@!-s>UUJFFe6TNUGG^(IhK#n~JD4 z)q_f1GHGR^+)9f%=xNof)VoocP{P1UN3kPJ*fe@b18eliZfc6)bg!($G}Cm6u(P7i zrdMb*q_*!%dGqoU7G6OrA zfoSP+_b`~`)0V~}pBC*shS>(Jv*m|yT(YvVI!y*E=2g=wwYd5xCc4y^PRNM*zrL_v z-M;PaUfr4g5JUq*N{FB*e9x<1nHhUA+z@_$wEDzMfG^*=UzTvCgNpJt)xQ$q%==oi zTIP$5*c?lx_~J$)46v)2uFVefk4U4DcP&$}8!9Y>#yTRPn zZ@etUgv^?(_8yvu3_t)tTO;y*JHqL8`^lB~csfEOxZtj>ZJ8OjRGSNZd8W)xqvtb% z|JsJl-{@v`$cs#PhXU{gD=UN@jtJfF$e7Eqf$(6_*V|Q6X3dabi{!ErJrW$DimLT-*{Zn^u5B$Vlc>_ zMFZaWI#gM&xyZKWzfP{p%%!@94>LiSKEmfMNYvjlr?Tq0fqy|U)oBs}x~+sAvA4M|Kph;zt@p3_c#mDMf8*b~!en-hK&t)? z*1uWzvTo8dvcz=%CoKFV#gO4)0a6qPyij6rL8JO~7f!j(^dT;8Zn#icjw?oSFeD`W z>FIM^IB`lm?Qn#$>4-dJH}CxcALV~f1~fR;(Tru~p-yl>-eRO(KIx$Yf(t0nOuK&- zsL3jeMRl8AXA=E`K_|RF=7U8Vd}~$i7+9u1NhRk9$ff(Si1%wG!c)5BRcc-x!9GzZ ztA+DS;>xAhLZEo;mZ78zwecMynf`(4Pq{f?mn)Eb0Z!De}8If?7T&=D-^5Pj1lqs($9VBLgadhsG>qqS%;M!|Ko49$JEaK z3^EpkkwS8avV|3Pvv)X*@%FDq=>qHee_Bn?|J79E7x>y|W?@^%pfYw$*4Tjp@jJl!$L3N-bt}!)##!cH1TA)c?WGwYLJhZf7@pJT3N3$Y%ie@4* z3XkEdMt?kcPYNy?JNTAnQkL6`SX)&gKXm7RMw-5plWMwOno27~w{;P4 zTU#&ey>vgfJ7iEo(-v+@UYS~1=zUPr(3{X7`k~-#c2i(3S3jxcLnrOp`;?&S-IZZC zsVtT$yUXTwYxIk_Thjz72;`3Em>^@s(PleMw%sS!bBfT7LZEt3|!V4jFs*?lWm>>G5NlVWUs*1Q2UA?H#0fj} zYd}d*5y%BqRT?rb>UqQqK0ZDfSX+T$$b`exS1ofMXU2BcMk%KFmX1Jf`qu|oAlvya z^Y_+|dm#y%Lqn6@zklC>1vIFfQ!PZFmcKTTCG4J0l)nQ4E1gPPqquvIA8XL8{9U~n z@WH9Ugzw7}tj=`Vz1=|~0#e3C-n#30*onl(#Xmye5(JiJutle+7Epw@vR_?Ap|Z5t z`J|-mW{)$$CBYl8M8CPZ3Xed|Bkf|+7bG>sq37>keu|Qg?0Iuj{c9&4%oX56OcWpv z%lY)zuRBcm(sc%X9Dny1Z7C?GWalP)`IZLQ0*)BaxtKes!oca8{NGOZl^+BuWsF1o z&$D#2baWQhYc%g`cI}hy4?#EcH$hCd+A|nRH|C57X*7uL-d6XPq{(%fx!k;Y6NX1d z(3(_K2!afe_cKS%t7{?3LG5q8v%GjIY9niG3D4Yw`r8bLfF~?Xuuhm9XMi8^dB#_e zA;BE#v5pQMHG0)Pi6#1sRXyzmU(_AiP>N5j>{KDYDX%_#`mrF5os}HQg^24m7NrZ@ zFZ*-R$B$d?e0>h*=`S(+7>BCnPD(Z{oyxGg>sy=iGsBS#S0{sWa|*et_+G`62+tKL z=N~7$xEs7mPO)<*K~E0^gb}^z&wnpK?^yz+Z15k&`T6;se^-HZfhcaQ{H4J`{bonl z&ky(azyDszrU0tuRc?T4l{G^VeRx{#s9sDpBP?DpVlObS{&GX!>ooZ=`gy4%DelK_ zst+kmwoMZ>=g#?$Cs$W^>TR$AelBgk=g=nIjUZ8lwZ;kNjg8!q~5o_SG)TpHJQ| zOVay7pSVC^!w{Qat|B#~_%Q@2doeV3%A2f}VvlI{`Il^ce0u9_vZh(Y>AQ?pauIKp z6Ec%w$>u?7TxLmy83Q8mx%mdxtvtpSUJE-bIYJ{pA#!wBeuzp&Ufv{;S+0f!>a85% z5ap2(Yl@RxSDjxoL)vS%7T&iuJ-iPecBh3WmSc6wkduLg(xFNmRqrv<#U8nJDG*?2 zXc%!^1@l}HPLGQd1^FQpH@9(pw0h~} zKpfnnrETVyUw&%7wuy8^Jw8}fX)hK~`1c>OW7U;KvF#7+qyKhp!oTxbtH|MSA$}FG zX&r4W7ykN@SJk2!g(z0E(M{s(Bz*khPcn4p%Qf}y#!ug)3Ei1M7VRujDmk3&TjXZ? z@+!F0N=QpG9#gEw!I30e@+#d@OPgfvJ*|2f3%|~w1?Oqy>)WsjTOWS@UgAR`67~Qr zvCxiS{FK29Z2j-2>z8FR%JM#K^j?Pp5KDHxu?ctdi|b(yPk~JVe8!c1WNs_5&}3J*@}fVvD`7Bh>VF7G3LqD;hG zw&=&~bldqA_}2I*$MeOc7S)*PXEZsYZ4Ub%lY$6FAw_xd&)UO$JL~N>x+2G&f3n@q zoKeMFa!!IOiVrjndpbJ)OLSlVZ^m^Af9|Sb@RDVizC`QjF#W*W&*oCQ^soffY@^1` z9(|65&P3URq_Zo7FDv5*}<|2iqPf&Gv`jk#xM5kZn zYbYPud2(M+t)7v&o-V^Bogj_CFVIp-HLO z1`q6j!$H*fPt9;m#cjohj(sOzACdVCUFavB%*`A0sc9+&Y_EB*yOi3W%ZUp;Pzy^# zgr5|6JI$~z*E#VwFxhAXqM|ZS*LD2R^btZ)F9aS(c#Jf9p;1lqCFs@#(tK`%OK@f{ zIgEcZ8tF)!xaM^sLTOeh%)cqhdU;)q-lC6x z&v;@@`M~D~uli=*{;cpHpsI-8Y>VM#9A-kl(;q>}{YsoEB1Vl~x}yTdb$WI)Zi!VS z>Y`|VOm66Bf2q4U8a|CCl2)Fatk?WcAg(?1!%gHtjlQ0s>@P9Tsts-{>F!GkW3=c+c%+IT_GNL5I z>3-ncIcO@;J{z--%?#chLF^)K1iVSP$0*40?<75gw7QU0zG-t{(nluuZtKYeE$nlN zNpx=AP-M99a58P81jqX-xXr*r3tly__<_nD>{*uOAs^o0s^6>5td6Y-cKskzGAGKM zH$s$~tCFJ;{FLQzC%8P)QE%)%6%q95xlf}kGc1{Iu-q!`^?9*o8<*?*2HPRT%On#S zcH?koMBNV@`f%ISEyNRVG+Hi}jen7$>db0S5$x~uBh?55@Aox13e%KEV7AQ{mr7nc z#3$UDAec75{?SM|M`OTxLcO&MtMdktMs$fvd41XO&0sB;9onbr6k0_!v+IvZ@J0m~ z)V^<>bBCzb5NHqacbRryWeRVfE&=HbXhos!LuVAKb*p{!ze!p#F>SD=0^y7qhEtKa z@m?bGlwu1nv{XpgBR}1R3RhjIt*s1eN0^?!7#|?5PN*x;xm7z7^0LU{`^`-CwyN-< zYGnV{TPrt{-~Q=MFK4Yya1S6`ja!~UykS@{_KnFASaXjy8B!)c|R-5?d{Cs5;m>}UT2c|8!MpRf@Nfi71L#UEg}fWFI~=f zX*Uw1-czynmSkxlbXzUtBGbP<=ZFdsGst@y<*y@DzgflPSr+vz_pf6`h>AdPTiW-J zu*q@?*HV3jKa?#yU={cAKJm3Xika*&7)o8&-D~o}tqYMa?{eZ!{KO)gu8(hvdgJl$ zYLQk=NB&*8zoluv9LR&$;a2wkl-ug1kj3ZF(1C&R=N>wAafLe7jreKl;|tu^2ko5S zeP&rB&TjHdMA74k@GdNg+`f^G>odV*%Kq!3O+wiDU^3?NFh0VMH%$5F5Oe}-wGUIjme(2;wO-Yzx^$$(93^BRWw(u4#EN&`T^2Hi@d;7Mw;-8$H zJj;5BWl}Z?s;~i}emMj}D!>z4z1*o%`PpydKRjG~5?-X%ddo9tCn(w#8`#@FIca68`JypSZe6?=2Q&jyiP?@@nh4U$Vc8&A3<*PKnj;}B-H zkuw*PLc4f}&ClP4{m4|wmw=|~kXE9ZVW;W(vP@@M{|`>Toky}?JIArCDGsqbYa-&X z7vjRX&M4VYbUvXu)${Z(0uH%?f(Nj{Jl>qWu(?>1I?n=?!nU*o;8hidj+#il8$tbr z+s-r7M|mY$q9bcOd$w3%>wNH6QU%kK^BVJq!zkqW_L{VmN6w`ki)!sm%{#>Ine_I^ z)t`AQQ{&-7KWBzIw8uWTlrS=&PtWyFr@0K!IO1X+Qnw3CJ>25#`!_3jj%-}sx_>@A z@l-yzI+-;;)iUwtFaL?ekJwcdlgT7AD3U?OVsm)={VB)QtXKN6Z`Pq=V7d%CgWeQ2Lv> zr}Nr%k9vB?n$H68TlEQ(us#T$Nq?sx_?G<<{3%fB>fr) z#s-iZ!@-PE-TFjjTCiVkB%MDrnzow9C-Cf9@DU^zYr$>BY4NvsGx5o}$NqsXR_D3S zi{qyp3+XKJAF*qmYzZeZkoAb@leZd0I2Pe)oMtA>r{xl!Dh`T14kREaPtN9Myd$BQ zPW?U8$+_}C`p)gxe9>PgSl)hyML zaAS&QBy#QqgO3BIpNc{urANDW@?NTW*MIrE{(yCt|9OIV{v zPI~vRgb(NL_1s-sHKbc}aMc?kQN_z9W+L)XoIEQZ;Nn#K8_j7o@r+zy%bcf}qtD_h zk;78YRg(yzjNDx9Qlsx%Dm74kdP4S?{=4hv#`xr~qg47oB59rwxZKezNk0 zrL@?k%sN(P9FtD2FRddy)sj2qIW)V)f&O9s1DsR4eC(=}w09qU+iPM~bNDY47kQ7zP%65;O7 z*G_9@U5%cmlx5C-RZ#OqK)vjtwbfF~=$qSkC2#2^QgKHInno*zY&c;)H&wMTQbieVBd;~BzOXt7NS^jOvKI^JSJYD;oGjMM&Ixrp zmm(aO6D_C9kR~r{HmenlEf`8{SY%ZsD76WPV53TU@CzB4`5Ntf&7)3TeS~D#p{t|9 z$H_Wl?J(!c`?1l7R&_ff={6UH*m1eZ>!L3|eF9nqpdIc{iCmC63%qQ+ zJd?WY10gT|a=+h1x(L?xHJ;kWU`n=pvBt-V1Yj%g56dk+A0TMTGqX5GI=>Qpti)PB z)%Sff6uTe&@1|W_@J=%0?R-jqlcYyw=hI3$e5B5FD-E4kL1q`WA3vJS zmf!?__VP8} z{q<*yJCYfy7D`y#2!%(~8{9}zzF&Fz<8{5^=O2dAEtL)2+ix4rKAht}7ez_D_1Ko~ zT=70R5Zd8qZ9$89BN&iv-lylx8*8Tt@g7S^gE99@X(=XuTlaonVvl(z@Jv+N&BB=C zAusQv60P^R*A4*t^skwvo0GHfTTi@O>aR!P*F<0RzE@Y_1>dz}bnM5qXtbn2e|zUU zRnu+k+93bW4$rXSb>*;hott!X-o(&pU z#b;V*wAo~^h{Ri6m)9Hnj|8`6AE#cxRTk$LdHLtNm531jSIwG%>lMZ&?e-JeUPLCh zCl=<4C9!ro7FeafhxQH@g+}0Y{MyYlWC>c+h(^}s+%Nh|xaJpOC~fhJA-2F*cJS9T zX6?T(U#g{dchH8QoN^W22V(>*byfm!g#E3$=|OJeJab zdJ?|59bK|qy{G+!U323wK<=N+WQpm_USYVE;`E0&>kv^>aht2B>4ZwRcx3JlsnZF} zf4g4AaD1r|A7|!E*ZYMvH`VZabBo-HzQMI*-ho#=qS3k|;t!S_L^8J&z|C_dk~%!` z;C^(3H{S6-yx=>O&u5W??k2bo=>k|B_x8$@@p5J}ePEYbXh9V+O1`n<`XMLhK9DNY zPsc6Ku&3r&i*6hF1%`ZJ!TU&AyAW0s;p6;CF$U$F>BOI!W<_4v(-Zn%ANjDr)?dfh z?1MamqGm(cYd}-!Iy=)<$oloe=AHTX;Z%>Y^oWLn>C2CSeB?)3oT#fYR|$?xPE!=0 zqlB7A1rG0XmELsQFRlBUmmAeu*kPJ)>>^>6c2;O5EU4P%O}o^8he?})9_jF;v~1lk zX}GI;F6EEl^BZ`nYRw-zFXpWB&3eb3IiIm{cPu9lCHA%L?dv@IIsCqwJ{@|jN4~+G zHP~X+H2oB9Rz-U2H;+r64HF6e*VCAf&51Q|^#er(<8yO9ViNiaES;gbwgW4wO-d=Q zM6F9v?ElL1O@g_}w}>6uo~ToC5-Oxlm)LXVjii^=h0Zr&YobLBL)XM;s&8%2*)qlVXXVF)vF{#K2!Q*8=5esy7wA07mT_UNz7dprHMT`0S;T|aZvTlxC0 zr^%1YPAbO*8TZQ!*ye3_=b3np*{94VZ8Epa4p8TjZpv7Wta>*O(fUoB)AZA&b-UkI z{JaiD`8H6ROT_0CMjpmf| zSTZiN+VhL-soUkrPb9EuLEUXsyl@e6o4uw)JI;#!rakee-n>$BBVg8J+W2_wg4w2^ z4zKzA@=c@6O*_Ur{WW9%1xz^U^rB@5_b(3+=aoMzUA8-wyav0h`4#AD$tAPCF>T|H z+28d-(Z^~Qyt>n_>Xnr``&`R$ZR?--`$t+aMB_%9-40~T*!LM(#0?FClE&^f;y=1O zHyQG0m^Xn?D{7*SoZ=>O?Hlj&-;__@U_hqU{o2a~GA!g-s)fq`V6wA8jz@jdfBUes&$(lN*r~bC; zokxFC{@}__CO-=GRebj$s>FDpsM?P;{G~!0eTJUnE{CEMcd_O|0lxN0`ruPd@Huvu zTU(D@XCw?Fp67Peb>k0UAWqhbH3;Jp`=&O;FTWwLM&}h%HYuUj$0?Kei-4f<6*XBV zb99g~ZKhLgM(XVvds7Q_>dC4Nhc=F-&tC#v1UHSwqiJ$x>hFI&6LmqIFk^)m>3#84 z+pyLRMA_=7UL>mG-mW{}4*NF5Mm^GtO9Cv| zl~TYyDlQOEY|=)>e)!*Bv&hWQ_3W#L{m%UH1GMX@#M5Ev}R`+Um^l_R$fap=VFzhWLqO*M4H(P~B&LP&rFe^Qz{$m|8z> z^w^Aw^@*j`mkf*i62d~)3pHx`@ps2}dpJD>gb(s6>K`hMuSSgFiySo$e6rlsGNX%8 zi=wTI^I~!t*`AR_<=^0Yu*GU@DM>4_BvBFIa)o{H5?|&krwCW$sn+HZE@}E#zWO}> z+6{6S5ApPjX_Y2@2^7IsQ|8Hw1}ycR=G-vJZ%!d%Qa?(fkJw*+zr1>3dtXJigwMW! zYwER+f09e7{=V51hrnm`on1XF+S2#;w`jHFm0ZQ_pS9Ah$?XY|#v?^fh&@);NkKQKI5$R8SY<@8B?jV)MI z=N7wGrR{xyy09#GF<*yhJKkuR-EPRt(l*SQsi6sv>mz(?)>4_&Gkb2Gie5jeF;Fhm zH#o%oHSEZ^IkGm9ueL5N8-NN7MC0-Wiad>XJ49w%3cgDnmmFC#ekB)df%W~E=*39B zPW$=iz_W|ou_u1 zvw&2U$A7K!T)3WYV7Mb^%KFf~%&{*A!Sh~lVPh6`a{0|1)#pbvSCxcScK&DlDPQFc z2K$DSH7vFJN2^b0YymzN&%Q&~szpb$KDJ3R} zOSyUPo-H1C?qU7|!M5;RKH}R#-%Qk{-|NV=-%}h7dku&lwWLe0W35#)CfSm$13}{R46{|T{H`SGx30xIls5Af1J?2)_~cehz@C%dQ5lFFff$gQlKKWJ~H-4 zc0q%(0&c49n9y8pZFHt5Ye+N{wGr zq3&A7oissF3(xXM9md}p?eHD5mN@NvLwPTKf;Bt0dH)o-DAc{r*x4`f!_2(qNruU< zG1ko}=gYk@>|atrCoZ@WlI*XUe(O%5X#3xW)+AlbhI89g^d$MzUmi$!d|7G;+p)Sb zS3P@NIlD2*E4D37kiHSKTz6$^Q{&PP%eT3d0-f4-*t}roJ8+ISGb}b>TzT-msENp9 zUb@WiKp)!}!7HtGdLW6)C^E{D;osZxK70?RxWPf03{~LEepSrM(a2leJ8leS4t2GS zy9axc|G}&QwW@bKujN3jOG}2@LV6$Td4atUmjyOBY9dj-+ZzZm1CITf5ttw@Uw=_ zz|x7()6Fa8;6$#4hs{5F$J9CCb0#`jO}k=!Z_1-F2O)nhVtY~Fo$)BzN{Xpg{GcMB z$g}Rt)iCXXwz<;_w54u@X*)tV-$mTAcE@}!U`AmxC#ybxc<8x)C{_B)i}bnfi)%m0 zBXv-J1DP6M$4{5)4qG-2DJnbo-SWP$Cq3=$Hb4Gye}7M)qx-3&K=ut}kNxGZe+#nT z>-WOKlDtu@vj|%H7-pXHiGl6|(JQs#jIo^aO2Q9Vn6;Z`TbAw$3tp6K%#E2IIDJOY z2gsQ<-zSdm)2F-Bk>k!sLI3TkW5cM%Uyspv#lAYx#0XJ8*1Iu;l~T=%eDYFmrsI>j zgpoVDx>r+L`@R)d&>m!6Xt|9MdF~&ba_lupnO&fp+qkT!q8@3lTpArJ)s<{tP#h*w z@X@mPOU(=LkCweip5dKQ%SxEuM84CR6r1?yDC=Lx#=EIz`lFBNu#@0#79k;as&n67 zimzh*uGOW&+fg3ZrrA2IijPJSeJi(MUrqC=Dk}rSuBoVK10U?#dr?>OUB*PSw6Ev0 zr>qS~*{JT>PDFP+vY5o2RTPa}yvEsJpuAmlt^aRTzF$DZ)ZLpZ`7J%Ih;>R&NKY(>%#hlaKv&X zG;H?eWt`W0J%YcQbDzjQJiCLVzi=G@@_*~&&Vinh;xqSP|E`80b^k#IgbM@W!VRmgSu zGcPZTM7G(jC)f`MLs%Xa0vN&iuObg%UybJ~(sLX{hMkZji&%n0d> zdGocPcY6u$w=lg|{-)+E#m2GeMB=E3?*&L!%eue)D8lnIs3js?wGog%uGzvpN)WXo?Ax#ErbZiXc3B!1sJC+;@ zdxoDC0pA=_XIwYS$3S>Gdfz59I2U{x)F7L3TaGmcq?PZ**3x(%?Y|?#AML!v`z?Xt z#l@x41(NfQZ?Umm62}He1d{nzf83BH&=lU7`&CJ0(0%=`s^)g}?=xFL>F?L3Np=0J zo}E8%lk!MNke0J3z7%+U7N$O)z$rfKYL!>T6A=FObq;gms+00bLWI#KVK}m13P<0y z?1F_8JwDmZd~=;3i&nb8h}-1Wzr&#oI|Jv0lcmPl_;+J=!jJB?6qWN`B;z9tYJKr{ zgHGJ^9ji`OzC_Gjz4PJ>&EqloyI^QCv68V>E|AczkF(ooYTqw2#7?)RQ4GcI{+KP2 ztSX|t<61~pgU9{cwOjLtol+Ovb^*`d6>2GMVwoOGpv+N0BSZhqo7PeVcIFUz64~iV zM>AA~<50TU`X8$ASel|j$kLVTDgPE3QIncp3|v3#ZKycHPTelKJ|x`akz}Q;r6tlJ zxPNgMr<|<$mNxBq(-VQZJ7@{Q?5^42F&iU(iq(J^MU*Sv%JWSRp34@j6=uQ=S8ozO zd+OPSrUBBVnt8-n{QOAQ7Lknmd3;>~Olvb9$ka70b@=!!GC2>t7QS_F0P*_|mD;+95!1;9sw-Lc0E zI7d!v95kOmJ3Qv5&mHq0vEN(%_0bsld*m{|=q7n5XhkM3?v>UbzAhZ!@F_+i2acJW zR*U~coQsoAsL(vsEYrSvnql4$D@aP=X&2d)T=C>TGeP#VPW9mw;+;Mz`9(t}Gr^Y^ zRxxBcvXO;UH_KhVcHRMzG`Na@#ssEBs!y%e;kR*wYMViO z8WId%j_{X6yvV?D_K|CV24J;`fA$;pvsGxuQouE4MfS zTS9mnbWm7a?T-Ak85tR^YPLWg`Je8XxBxhTV7Ua9kK<4G3sJ&!=T;VG#^+ zwYfRNX+DRFFMDwOXg2V>LrZ=%dztLp-mry653Zc{9NK(DFyV!xU)z;ES|pG~`mHLJ zH3>7lPfpaGwf#B8qu@ajG||mCFFn3-aTwpzJA3?Qg$>TdplE>+E+oM4Qu))gZzz`C_S%%Sg%Q3or5BJ(w06h;;fXwtkOjc; zk47u&TZ=B%i%QGNS`03h4Bp(l!gRhWcZ;6h#KU8fid)Hg)Ys^QB}C8qP&6|u+yMlkGR=tbT;12+NY6)vP^z~qSxI1U;ui^ zkG`osnYogdwZ%y{-tIdL9oNr<%%L{78uK(AyWM{sx(IV2vt}l}Hz(h1_mKJqBs`c; z`lPQ%e&wS(_BwMyxrl~A_t8pv63#K|>BDx;G9xlaW#iMysI^F3JCj@_wsuo-^lOPy zfmEOHukRuh6H)Ugotz~4a3?SKmpZTxH6+vcE_u+BR+^7@Ot*N$$@?mA(fN+yUipLIi60I!`p zTcp{IJo2jBVOK#XeO`grZvIY1UUE*HY!#NQy0W}S+x=0q=Ewv`RjW*kX?$xU%9fa= zWoywNJ$blax0bRqfdqg#b?YwFH_RU+;W( zcI?9#C0+oo2(Wmy`-3lmlL;&Nqy9k2-{Ic-tiX~1G3WfadD2oHdIket#6YkTCAyco zW8n13EGP&yPx6X}K2EsVs*-i!%(JL{==?**X(#R5%=76s&W+RQu*G_&zghT&_#mm;S^h35Yt zlQMVZo$$Vbq9S}~L1}f?YH)@R7-KFPw~dl^SNKQQrwdyr!3EqhP_g9iZPo>~(b?5X z^V2TDZ+thtry48T@rfbJ7iNlJ!??_spN5LSS~aQ;r7xd^&2j#8_EHissTgKG#<1Re zjc5Ber4okr2*(dQ%GCVp-fs%g+4BM`Vn*Z}4}rc)1d^!4B(fLx!O!=YBs1L32V-DDm z)NM$B0v%mwrUj^o#$rVQ^vE5v0QpIPv`8Juo@{p&-!dyMDlEi6CIL`&yyeo+4VIML zTt09Cm-R^^yJA}wz=e}(fi3d$EWBJz93!@cl(jgHm~ME0G(UDPmA!`gfFd!~gD!e< zYRUxc)VHzDG!X}yAYZ}|4gAT@2AIyt;k=K`Gl-Abn-KO?&U(19QpGg)zJY&hMQhG% z&9b7<-88P84efrmrEfD+T#CLHG^?aN{&C7~I`jn1Z0c1cc^*9E;74-sBTIj+aW8XLZ(}833e7y$jQyv$J}_LG zr0~G(OQ48L%gS4?N6=$335I#=2h>#h@zGybal__DNPXD6uX^qsbmvd-Owc`?O%J&y zsr3(F7mE!V_$p5}Ai(70&@=x|J|edmZJ`|ab~{Y>9xw@0<@(oMKO`UOe5eY465P#az-t~BQ> zzLAM)d3mZ?YG`m)j1XpOZd{5Jj2P2#+j1>86@GgMEzY(5Y`Hv%;_jnQe{kLI9!h%q zyvqDRd)t8|{@VXEvV=S1N^*i}P>eStIMRLMFc#ZxV$DJICQJvh}*YTuAxDC$uA-QivV@p&c zOK}}K;>i$Z@BS`W+X7i)s>Ttr4&Z@#V{QEzY8DWic!~Ys@bF&G@(!`{T%hy3*h|U+ zW9+zFaAIiI22eCWK@H6@prfKOL9J&a2Iti9Fv9|0 zOO9(z)UNJ;2B>P{dw(86GdMfHSvh-UuG`>(PwHYP+zl@1aIFsn2pOEkpxgv&8m9kT zrkg#wV%Kmkh+$OYYMY1B6Zd>5t1*=vJFQJ(BTlX}U@K~1su8iJ6`4Ck{vlcD)TcK& z?fL0OHcr@6Q4=E{W|k0ra8jZ<^UEfW!)(-{@JZiw<`C-7JEng;sn1{WoaE>~sS4q> zvLU>Ev=ff_1Fi*3*sd$Y_+qdaP`6|B-62y9^Y?3OX&J(+B$LvJaT;rB%_&{(D;?J$ z&?qopbzur3+pAzov?^xLyLN0W$CyN8gGi!5qT6irx$ zjA1AfLhnp~F9>&pAtfpB(XBuVTbp6RlUGv1AYum-%SubtDCn!@jLKmAi|?aA~$-NbzV zRKPR>?+IKkkT`4~E_2q6y10w$hwHifEot%O013ENNAOrf0)t)s@jXnmPPq6kA^ajh z8dFjtjo~p^hI0zkH4vQ>muU~!Z_FzLwtvip1@m|SvH-)T0T!OV*8zslx4O19pAyLQ zFC#|(9|*Z^HI~7Yf~m8ePrmv#VTUnDeay75)z|=BF(#M?^LPQTgPR$(GUg?=S+L55 zG=5K(;$#?vgX8D0e1n(uF?(CIjyOedaaGk-ty?nClz?Im^Ou1}nCW6W&<%cSSM;RWMD9b_a1EI#c(x3*P|sQFOU1w3N(&?vq?4qyrW@Htf2+` zxL~lYg|`M1o%GPW7Zc}*$yS73LfYyTCAjkFL`}%H6)BtF9+wEk-;L$P9#^mJW|9;P#Yk1bW4c-Y*954ux z$D|T?T7u8OhzawF%T2`TEG8Z~E)&DO*K9aZ2hiP9?ij1rmu`#?{3w{NJiz7XcVNtT zK>y5Zo`>jH6Bd>a*7GOQuL5q|q@!EF;Nzb|ixhr&6kY{c8~}shE5al4zorA^QwFCKW2@`yZ-6iX58MtW6*4&ZYW>*~5BO+~ zFp1I7uVeU0z#Iej%zyBMVL&pFH0cUcyOQgI%Upd-s`qB zzowDY3_V?FecW4zwEVYGJai*fn%l0G=SpRJQu(^z5>`t(p~9R~;PYDi9ZU&j`|JuJ z&^*yKv(R8VjUCpWgNIvt9`pYe5NF}Q%WwfwN_{&7b+|&Z7R*jbO{Tk0$m+0E_OnsD za~c3WVG=RL;K33<+irpI@Fc9cgE4~@v^NTU6nMGKRGszHUjj09AZ6t5UqhHOz*!7^ z9gSb3+P|=|gKD7t)cUE?ZN#llmM1PX*DKa6t!NDU%O;&fx7*grQG)`3Qbw z%i%3(UuQf}JDp126tXJ9V3ub({o8(&CUwHf=(VqcVNb@})vryE)^tWtt}cJhqV%K* zZ-)-t)+go6R-&P0bTs-}oSm&LCM-ydo90sr(tT+B$f%yQ+x^wMY3)Hy0qk$}jz6j$ z7++}>D*sZe9DV9qZyg%)j*vIqc*~<{O1br1;Tb;x6HlXZ+GE=m(qA733{Lxy-qgeN zJp$M9q^~rzOd+2gFpX!qvhRv@`l0zp{ru|AugZ*vWaaC|$k*KHk1!HP#p6AF{tV?| zwLQ2RBO_CP74c!NY)Vb`pN9=q?W6QR_Yrz5%H|T5>qDzO*P`Wae`X6krM-UdIOm#U z&?&YPkKy`erTj~q>;AsE*V&-fxUP>}xv2h7OM)wBC7PWX(@cM=cslbKxz`H%Rf{*PDvhi@ISckI2szPcSq>Sq3( z@OUF?&^^n-)hYJIGZMdqmX)eMzPue`KS(dEkBTR1&q+unb|mMKpP2@U51(hsNh($+ zUPoI}UK;2pm;V=FEVO>_I727ON7lUilx(1xClhVAm( z-ERsMrA&?Z$aOcD-0Nud{m&S^jXhmQ-QL-{-%VDLT0$>5wbX#I1KUold`Ms&JuTHG zO(!%ZLxj_Q;3vF2qRA6frq7$k_SgVtBj4K4qwE8;gEmL85UXpG-f)9@$htTPFO=-vJO%FM>j zm09{C=9{%%r-DEZelo-l#-jWB-p8gu%4~v64fxpHF!1~W7dSAKZycySCPXTB06ZOr zjUw***>rX17-SpV`t6}qflmk=X>fm>>>)e*)NphSOEF1O4=tHihc$k&TVpCGbi!r# z8jVAUB8arz-yryWNPx?4>B3XGu!6A$jgkLiV$-SHDRTLZ^1Bk{vQUzQFzPLE{|R83 zaslZL!+G&jwWK!{Q@-PTj%$%s2fnKid}=ThF;B_9hkfELluF`Fq==)( zz&Zq9{Sx3JrheJ`!DtkI2}}$f)Q4|uO4Zs?KoW=3YzLA#_(Vlta74+BITh+wHN(+{ z2|<7vDO@u#RTU~?tb7~32TY?esU@g}%li0MkArn}OhW>QI=G@>x-k0$2gT7gc#%Jo zeVCciha>?vsP!Vi9tMpxosjMJ;iTQr*q9tNHlqbPn8v25sR@e|vR^R=ojHK_j$AIc zW`W7myw@j%nhBoz`2#2Oeoz*xHO~!U&y;x5^JaSu^RnMMES@__;=OY94smBsubLk? z`fR{m$pKJZkj@9ZSXh~Z7q=NQPQa~CFX0{uzb^cST?IOoH|go0s8H=5*VbIe1X6%Z z4VqLqON|^HzP`x7{1Ip|zJ#+U|fs>U*K}pp*@;ipKEhITzspj{_3`Ei~&1QCl#aKcEjdV`fy6=sl}k zaEMx`I8H%G*Q1!eBtqEn0U|J`vZ_^K2%N0$Vf)To8IG<4V`J@5@5yDhArRUD&}5ik zKsYx$VHO0%2*&)76abKH437IYo@SB$QoGc}f51Uvj_=upj>8_>vqJs4E@%;Z50GPP z>+38DijHf8cZCQsP4hBTQ5bMRA-u`NgmEqd%{Uxj{(J%gt$+RyV_GiQhL7ocgf1=p zFINTPXD~2T_-b^=dwyEe_wOU&#nJcJ6u=--e7IKNhk|eTP*4z4Rbl=EQB)2PmHejU zujC_l4_y|ECq_gQQXkw8Cxb@pSZ6MEd!mYNtNz0yc@MUZFFa=a#C*~L>l5LAVsU; z^0cAvatCq7dXT5A47YCtjAW2Kv$^YSOJsF4ec9z z@Zl}{2E7m%M~*O;b?>7VCd@Nb<+w7%`iuwoahP`@>GC)UBBhV}S+i=YtB*1aPVQcu zH(a8D!-gq*4t;WJLPTU!J&8L-sL;{Vb1bQzD+I&1_t12Bs(pvKV-4qt`~UWf^kCc2Yr=vV0JcU&q2n3iyEvYbagG};am%~0Z$;h*c^eyxM{Pp&Fl8g@ z!E#=ISNdfZKD+!13m8y4Jlj8n?VD}T&``kWy|}uXR(Q+6`v;{Cg#JN0@UDoXV`Xp4 z2^SMtVQVWmMIc;p+SL`}!2xtuCz~x8^xXDmj_EEbDVa}vO(D3|`(*@PLEsa{%o-du z-}s)GxLoOttON}C`xfuxg9ZJSTq)%yH%RM1oMa)o;GKL4v~r}ur6`!hVWM-f8h#N3 zw;s)>XX3f&Bix+TeX}}Tw+hs%PHK9LMC@(g`-A=4(Ch@&`9&z#f1CFVsO{ae+O<&$I zD{hs~dfm)t?RZ|)GIVWZ*zfTN=ASpJukChTs}@7>fA+cdIf!_|qdjd@lZRe6jZ4cV z0 zjpx;!TWQ(!7@T-=_|vc?7FrAK>@)4q)VhkO6f*YTDn0g z>F!jz5fG5B8;~yPQYjJXmTqv68Y!uF&GUV~#KV!fa__aybq3*+H`c4Gsxb~<&opcA z2j(g~Z^typ>pcq;d-2FJVEoxY8*-S!S^e(4V~k67Y4%eakwJ^TOa=+sV7Il}k{7~6 zFFK}%8tpJI1c$%?b4c`@)%fzaHVhLXo;@GY%#>dO10QfR72AAbe1;3}^R){s`mpNY ze=Te?a}yltMD?iEz0{JLniYmEJy65`oNw^}@D{oS*rH*MMGvzia~GE}kwKy|A^NY) zmEQ%_`USGaXSzU_9}5DprZ3g6Nn!8v_V$+8`_Q^*>Ox^BdMRvKIB3DwHZVD>c-Cfd z<8-k+<-vXq8bvC^?EY-~Ybr)-$Axxn@3yBp4cLjIx)Dn>%kZ<5i-3R_EJb~ z?Rx3i7Wpsno2v_g8y4uUm9_m%QDqt|Ba@S%_rA5I?10lVS}yPwLLEAEi*u`i zvNAHzoWK^7SHc3@GQ1&b#YAzU|CozZzz>`S5)?p|o(C5Oj16J62c83TE?G{sH-f8n zY5x5Fy@E2qg?1U(E6_k9s9k0k7xyeyt#NDdfBLA3 z0xkw>I|fJ@fI$x~mePrmFb~+xA!w)_nYp)Lz~L7Gt1V0|@|(RsUwH;nPmuD@$eg?g zZGS{X*)-j+a{0q**GSjI^s($?&F_zEeX+7pmu*o6GP~JUBycp228DszA*t?y?Q)5Abq&WoH-Du;3j9L=D)#Ny*7q zz{3_baDn8dcL4gpv_t_6A|Oo?3}i5$l zA@c&Yt%K8PA6!^S0Yudf8$VGchAi~ka0ZHuHI~ML1!`u>-mt>QU2qZm zGVVV+Z&SY9DQwF|OJkZ+pwk zf9JVg4VOdqLzjc+-pHw@G!x(xsTE`DpjG*bJkM8m*&#SyoP0n5m%6V{?rNapjL$Od zN0Hd2mC9S=X?12IsD&@`1OCRr9q~QuH{O^ExSTrM;OmgfeF>3eSEq5;A36LFPzfkq z1w1>zA%N(QgVWVG7kB_r!3ezR48&1Teah3tFKriPZ$R8g%a6d{) z0I`E1JZf?L|9-Vpf?$mHkJN}Nw%x6VyCw*5CNB!P_ig*&3Cw^eCNZ|H8uFYN_&Xt5w7Yc(yNp?iDD;3n+_A*6pKODa54Y*Lb3Rwg& z5_GHIEE)@~Kc)TVQDX?pw@%@~C+v<*J4r6TES(N-e*IDFvu|e2)zIsJzLg4DI^bB* zd3O=esq2X67}8-=_BU)y{-f`tIP7R#zwk=1viUusg8o1Pv=W!sRSqu?d<;irzS^m zfO+tqM=nmvR<a8MnAd$7)+}6W&tw&s+#eFq<`^K%Hp|wPeRvYU- zst+DWRG=?*qRQSHmmy4HO~QPOsreA1pdd5M<@-${)S9c~l1-oZQW zSBZR{z$${p8r5T>TJk9}yejaAM!BCu-S|JSuc718P869s#0eNUpw>_%)T;|Avk(`1)_Bkag ziwjJdcTlMwyAs0d7mRP#K$^MQpqO=fN6;a|y2<^yaAbye31 z!W^JH>q77nH23hL`R@nOGl%s9E30h$Vq)-cEc z7fDz&;8%@KOmst*6AboQl5})*9OG)+e9xW%NC~)oEmRCBSGHme=h~1;C`aDBVFK?U z@N9&x3|h)?#6^@$e(UK<6yVlb0asp7XL+tCX@lz&3>3m{=A2#%)m%^tPIdPOaLO}q zd?LbMNyVnQDi||3FD3JiV>lZgqGD*!?GcocaH{1+o(aP+172W9Rt{36l+~ zPELTnJ>rJ-4Ghcx&II-XFfafwhlcbJwyh0T?pBO|NerW022dUU2X}5T*T- zv$e!IU*rG^V!B1+`yTp?RaZgOZr>M*PvIz-8J-7adoG*`DsT~=FBhojgsJaBRTeDq zaL%3&GJcVpLtJoF1AL1H!$YX?V9WfV-^sizFrHi7|K!!zPkugSVbs)Ab$KYol8Ih0 z_}-bD1bkQPv@3Sb8mBY+n{;AqHky*vm71-0@2`)}VW*6DyCwY-rlHo-*DmmNIjB;@ zEo+NU?n~-15p}6ZJ9^1->DxN`lec%nC9JG)!FspX1?$xKNdYc=GtAFWKoDd<7Rshd zhTVbA0zj(*@I?Mn?o>?|%^V5f3tYkJ8uQz*V?u4?P!n)1n#^wa#~+?j2NgJCBUaEK8+CN-;Q5Vs`uEggA}xMh}VS3cwB z4rY#oawwI$)?&4(qy)suly`1{#~R=o5HGIV(O~fSdaO`s z10qHTILVSWJ{4MxPfevC_*0ORzc){XY)Dhn{QDLPsuuG$JMKczOh8==F<^anpWl0b zwI6VGVEh{kBh%_2g<0NgRBrTu*_s#ltrGX7%w}S<2u(IZr1F^Iz+d#{GtYcZolI8H zubGn~g0RDMxgc7)P4QV1$0Ff1Ui@R6ytiU6gV3Utdiu;X19^;g+;6336c#^JV#n%L zJwA_?GkD+fchjUwnL}6ku}{qk?+5F2>3t4t%e29Q{*-;Mw(q>@O=tykYXD6$P~zUd z6XtSVD5er3@!!~E$~!)~K3Sv0j|#p7J7WwT(v3i%UemMN59x5#QV7kwTkYA6o24Kt zwYWOIEbr%16BuWbii=B%qf6bEGP?|@-fA88@4+Qb*)TU>_=%Zg5!=bF!eaYb+FUn# z)|MCIzsR;|a*CV!rtw(+aBjqj+n7>Orv$ZMq0_~4{$Yzb6}C4y_)oRrCI76#5CLva z<;TQz7oyl9Zn4NDtU{!o^l5=SE1yc)pGjA$xc&$wBeb^)s)C6OnSFE-A-kN1fsxJ4 zdXlu9)Ux-a$tf_l!r`2vLX2|_jh;H*4B_hjr@<`bV^PRzlw0t&NR6wJG&##?j|=hF zbKaoUvh@QWH}`wZ8Z4h^@T-`kCJ*!<)lGtj&7^k5vf?h?EM*q~4!u)zNcVZDn@XP; zhe*p4bt`}6Yu+2d|2bAZ88B|MrMlCSJHmvE;h%k1vtJh{l1@-?b#*nku#ol5=-(#p z2e|R!y-tFZirH@KZ={^WB2BCG$CCOT>YUikXKek{uur!c)OA!|AO|0jk{tG@aI7N# zRn6LlHYu{(89A{JZ}n`tKXo)uh+p7*=S_m|1_y|xnOgsm^``CZb3x<+CsOY5L|Uo{ zn^C?N^-xA-w->J0OKU|lIYxpQ$GV1;p3qRT4vLDf+=<=JN58iEq&~hJXTrkr`Zg504Ei+} zChND<52`=OASgLxC;z4uroL&d_E4GaN#~$U*4k>?Leq*e)=h8}+~E>8enQF`Nw@8q z2KJK)XpXGJrmH5~{()Pk z*fsseoF->L)!X$TLHm+qw4teK-j~1t^$BVl;w1gAwDk7#dzKCkOr&_gYYNO`24`O> zRWsCQ>grUDja6J+xT1*J=t%Ku?B@jy*hvNk2H+!UX=$G-D~sCN<}WDmZbC*fSPP@} zCncqU=tg-LEd5QyZ`*e6bjOlW^)7T#S*KNqtO`mO+Jc&2N!JqyxLzq zn=ZgT%J?qUHs-x~_h&vWeOc5!O@25gr8FY((vIJ0aj?f!6@S*V8nvRhD=;#)w6-=u zOqQdzh^eVCT5Q|JcB-N=Iof+){#rrGTY{3?YM_WO7@b*oLVpcxPDeC@t7{hX5&g@40-SMRVG z+rR!SBs?;2czXJK8jlU^R*eSiT4g$~_3D!ec9L$qorn%C>KUxDi!tzYdvCK@xFrgM zqAZKE@}s$Pov8^44ZX>=c>HJ9%F=QP0B86@I1puFYFSOq(QR%eB_+nCWEvZ3RoJ?DhsY!k zW?oJLB-6c#ghy)MQ<$5FXW6|aH7yMywdwkw0ZjvLIaDZ4{FInM&!NKj((H!Nfio^C z(faGIYDM$-=G)to(aFzic@ir8p6Ko=59e79uABW{2wiEzcg1?Hl1^we}yIBHvZbpY3m47NuYG2m11R(T&;!vRBOYt}~q*FGjD zrVz{8&W;V@sA%tDS9uY5?y8WWIu3B;3=PIvWyLAB$>h6Sa-JLNrUY4xp4GYneA1 z?ky~29LqCKHs`gUv+Q}w+EAG?H(MFB;VrYdr!eIsR#jNOq5Ld`cd%|T>6buC?YTG6 zz(zhPud$KF4f=NC$iVKSLG!uIvEHdbkI8zYyVnXwE#&?`Nif-`HqREU-Y5h-N}`S| zE+`0rGpu%46onQOUgK40ie4m0K`nN4bj0=HFmex{H$4XGBIm8)*RhlW5|WZP_Iwt7 zn%0vCm?Pz%rIvj%vtp1|ZQL$Q-#_z(cZ}C|`bz?Xf=+`y)oi_;r0NF@PG?><%_Mju ztgWr#Gq939lvC?|7I|{e>a5L4+J!g*Tl~-gi$|%7HI^fE@LxjzncY!&}_C z|Lr!s1J$tNX=tt=K+;iXDE=IjjD>Y}4E{5=ydZ!+1`Zs=aEDJ3D{Do6hrqH%jF6gAEBO+WzS&KUl+KzD2$+4_-caY}k)uS+4CRmmpU} z@ZZXP^(YN>9wMdgb(~iXLN9qH?(N7E6n{V`nl;0DPBfw!Q&zHac(ZDT%2L3FvzWj9 zl};D)4_7@y_5SI@2SKlUFcRs>Di?>=qc%OSno`K9nnIc7UESH&+xg~XO-;F$9Y0m& zWCZ_29GKMhN#&{5=witcSzv!H*X7piUOmbyCXX<~&`mh-6z(E)qF4R4c@jTBYVQmc zSs?9u`64_Eb!O&F_K8meza3SGqN6%WigSYKA;lDHQZkP=uLQR@mgdc$G@eEgY7NaB zu4#y%9U;%)^S!oP&x!Uu+dgT<+*hS1#zDq_Rf_> z`dJd@mvvXV^|?KBE?rkc$uS;oCFqrw+*?$Mx?S;UakAqZs}lb{ zfc0buuS#x=$Cd3m&`c-ck>XGsydJy(k0Dd9`3%VPoX1NZ`e)%izDFo}0{8$0kVy@F+l3`>#}Q32hPy6vWt_}X@9@u|Ae<;;K}wb_QL8g)(;PdyF45O!7L^y?zfGUmm-k8j9h$Bt z&m8rm*ynUvoU?eLq0WMt(2u(8>UgQ^3A{=Zleq6tJ|z8IYC^-+)l8LFMwjh#nYuqzr z4_$Hc(Sdfh`t;}S?_&8+i{}oGPLbn1FOp~J$))b*e z6{nO^Myf4?^?4oEi^O~uUNS2bjqp&-Fs?ea+{cVpWK z|Mu}~rA~W~r6Vu7BCf90r(@o;FD>3z&Dez^KF(z^N1C8xo36(@X;BC>blgScY?t8F zZPXnpgHQ@~eMg@;%j821rJ|u-8jb%C4smliy1C&)ZT-TRr9$hSUFN{-Szs%Mr)m& zMsL5{H@J3=eAQf$PJ&n3`yS(DP~g4j-NTLRA9>1|~@kF7)c^3&=fYkWM%kQ91Gw@y^5##47)7ChU37YT38i2Oo_X99{@}`nUNp z7uHm4(4&hK=fw2BC!Pu{%zt9tea09`XH+?*NEku->~7`MZE=89mK}4fz-FBs3J_uH z-c4j`AV*xUX|q%P?4J#A*|q0mW93T43w+g8HV{`m`={3Lbk#yUhr8Ldtp;JE)KVEr1ypJd6G+^aOY`?EDKAb`P<@KfFa_RWDOWyhiei?jK&9v?u( znBrf&YM6Br%(T#}oQh)GoMD2mTm;oR9GW=otA%Q0GUDuP_sDy|?Zd4iq?S-*-V%~* zIRbzTD7N0cLx;NJTc*c?m0r)rxt4SP_qG(hP5%Sxq=wHYXTHe!nyb#2fV82yrnBi@ zQH$MpzQ{xNzD;tbMxrFO@sbVJpJTp5U1yDc*_ETZb$%r`tGw9^ZVzeW?AMiS*6qy3 zd{-CNewU5-s5w@6#&UK^cfKFB(Pwa4h!CWXyCs*v58PsCC{R7k<@rgvJa@NqmfD)D zpn%sQ5s;nM@f|!L*@1=lm=!WhAjN-ekIpOZZb=DUe~lMkYUS-e7oq_oyYuD5!)b-D z`^hAdo4Jx^pTIlk-jcbQ)`mKJlIrIlVPi{8M+J#0~ z+uA~)aQWJKzfB!C(1Fr zx4XlYUAS#FCTCj{9Q!s|r4(T{ieu{@Ch)SvS}ENp;=Z(5Ut0YzOFj{{MWj2{{;dm2 zA?M(LvtLuBl$xit9yI2Tqx~dVq=1CGTx`hthfUV=(k;KB7UDWQyMY>pLx#0|(>k%Q zz<>ef>bK1*A?F+BZz=Pb11q>Z?d}!z%b7}oC2TZMt!quXae-UYlr18w??X|lT@Hc> zN-D_~%?9jOQS&+pEoJ&_mKvH2F9|sfUT<*oN#<6ajhcms0s4u9o95eZh1a!ubDu0q zMqU|3U^gAbx%vH7Em`26LJG(I7%3DaS67bJGB7wj%@2#BB5!}*vHP6;U3e7JSwVx$ z4-<+!+A50yJq^{qcd3G@ip09a)$2ylF~{T;*M){U%0nWUFE-!erz^>bb9)sQ3o57F z&`pkzHa)!%g-Me9E`ykuHaBc3wPfOPqWFhIxE^lYeQ`NO#d`taFIE@h_vgbhsCo&g zDL8pc6d4nv5?5t3A8-$#y}wy`XT_Btn(lra{s)A#uyH9(DK1T0)V@wMU%|QYf>1ib zwa4>$k{MZ1=W~`!8Ffvw^yrdLp@&i<{V%?*f7s4FIrj^GbbpSWFOc?LEa|T{t*@;g z#_s&k$4zxnow6*hTnE94ttkTIK2C%9J5s5T@qneALMtDFMjAj3V)KBEb3HU7@#%Rz8e=PMawA zXd{@wE9INld+mEMIHjLTaQqR?_O|xCGeqOJu|Gvd@-0cLK6ti`XOx}d$S-Wl_QB;+ zH^D@9gyZVYw}JE9TBc8-3*-{y4V^+r_gNgA`Fgfd&)Iu)uT&l%J$?FAPTdss>RdPv ze}3>W$)>Ij-Mym~)c*%jie17Ni;KT{-yzwA|J9WmG`VIio}KQk-aUKRJxKyhwj^H;CXvWMOn=+)>ZySvk^vG%wQpi$GS(j^Xj42(=M_D}5z zmC-8K`+9mx?;b{_ns870ouYjOPT-fdE==|Y3R&g&$BQJxsuR8$tnoU+u|s=Y<=ADL zs#i4+`)juEKT@$zAx!D)>7?=h*xP>f@yyr6Ix_2eN+AGNpX-shPdKL$Ql?`F-CODN zq4e^MOLjw<*{QanySvmG0$3p$f|9bmbUVC4+lu5$6N+!;2pE8W>e!SqJ~G#$Vf!T%6ZvOXPyPHz(HuK(!S~_y zp*Vp|3+D5+(e9|XgZsm;`gAAf=VLnAU2F8v@VK(-1PPH@CWJyHJWIjb|bAule|XVYKTE{%%c@<|i7=EET}k;XBqzpSKWr>s)Q>mf3uh zgG3qc;Cp~qtUis7a@CBICEeE=B{oX$-?)nxrER`T9PaN2nYXO3SjVAbj*f{t_>t9C zX3!J}Q_j42X62MbMZq9u^2z`Dq()x`R?U1jtAWN?U0XY<->M5gQR;?xLmw~Ueb7cHJ&bhYHVl z)7hBB>sjaqTkp602c}m*UmpZFLG^Yo#yw;Z}eEzd`+AI|aZ?QB&gD|H?NkE}+$F#nH zVJ*;tKH=XScFlwx8-}NVb(&tcU&@pf%=PDO=e;EQ8P$?@*1S~HXvKZllA#O; znlW^G*h)$x8rq$}B0byf2!Nq$h;3p#{nJ~YD9{uIGZ`syfVc}8>En}FP#V*V`E8I{ z+t>gJ1u`L)k^i8wu%!Q?0(mkpT%SUin)p&a=Uma-BzuTWx2?g#6oWKEB?V!QS3ZT3OmJqJI8exqCO9Z1<6YTJJ%=CjQ3 zZJE=-cmE;S5uI>y3(8b6zDmA_H@T0J)wljVRN$VPxEC9Ic9_zk$eZ}|e9Ngt={BmI zcd=U{H>yPc579h0ynjzNj*6!&SOaBQU|`QDuk}3H40B|7e4wMO+vF)h-+#r5029SK zVoGa%-{wMFaukHXY2RaHHq02ubV!y)WNFsN`_#uVZxD+TvE|HIE@kKJ(c+2fJ=J9; zULDTu6h6qO;Sv<>*@l_Bd%Eeai#&hAP0#=1jx!dp*s``qHYf`!ct`}B?k+qv>(?>t3ua0IHi_@^Y zN(ZxcjoPp09SDAKBeQ%)%VtHp(i>E&-OZoK#%68yiuul=nRHuGh^P`dHqHM}M6kd7 zhXt|W?_^1UXQS?)!ilvW@4Qgy`v2>MZ? zkgt+q{NQMCes^bcJ;kW7sr{y=D!=1CnmWv5fR(o`2s3@SRdO;$a4%x~Pd+#;1ofdGRK zWo`~n2aUt#pYx_KyJTMr=jWSpPfY9&8DG!=Uz*{gzHA8ldHDzJE=~!8i&e2p!Z@)j z{)WZsM6t86>u!>czYJF!iP>he$NIYUz5)SAz5r2*g7|xAR}XslR#$hqu2fyYl-x$PmgJ)hpsMf z?VtOSPS>G3o7a-Y#jGvI%Wnuu3yuf`#Zm@6PoqhEiK}|@V)z0FHSeD7Xg}5bQI^SW}6-* zIC(Ra@$e;K&Ym@meM40Ih^qhJPMVD}Ww#(EMK0>p{T%m_)8TM4-uN@2Rzhp#xz|ojOu*tP`(#s~>o1XuzZ)Labi+NJ^FvPT zPh~Q9xRJMPtRX4{Z%7o$YRx;qH6+?OQL26L&sR}N893r_TMMNXSu#ynxI^gsWqf&N zLg#m1+0N zPivmy6*b#W=KAr}l(E7I9>Qqey-JgX=ISE3Aa>pCj?el7;qVJ)%W)>dT*cXt92)|vkw=g-UN&Gwh=y3>n14H>_WYc@X z7b(^r#lFaiR~21h*8LeAXkKl0*=)uIi>2tvCFMoGt~!V@3a!~953Qm?UUUZrs;z5d z7?j$nFi;PgQ|rG=v;HMO(>^dI|Kiq5?!TTr(?P-CE*>BUodyRARL+hJ%dlNUH0;Q< z9?l+(3sHEg;oZC)__pvjeLh*jGTw}a)l`L7ZYFC#tA72@&qSI1%|8OPH6O(F26Zko zTgmA}oJk%%x25$_C7d~ zopR%nabGYgB1iWtb~&i~y;&)!=^W(OreR;U(OkGu&NjrtQLV^t95>2zA8->%41IRIy@;}sZRStwIY-CZenh6 zGjC0=I9hF+rOi|ieOI^xz^W0;&uAxQ<5|95ddgR6+N?k0UPE{NGN&}TV=Di>mh!Ub zwQknq3Z7t*1o}tVq3M0CHng4ipKZh_&*H43x;+C{NXm!eVl&T*S}=t61!XKvp8ud~KWy)C?BYJ|%{9+aDv zp$#s}7Yr3Z3o@Btq07C;JJYlE3B9KkNwxQ1U0r-)(ctLR)DW!O(~YlhC>JH(CSiww z7$tSz84Cl}OLVc#!K~G7P$2=lYX!wGlpBESfqQ;~OM%B*?c-LH#=85Mhd(MLa7OfV zDMVL&STYM;`Urko+noKmy%_+o{m z&!XmHgy|~$1cYrs;P2>$NK)PweEj<_2b{UKxdCb`GpHlT9_oihu5r{a#F1I?P0H&K zKG30~44A?umw<4KRvfN0RNwM|;bFJB@S$DE2 z9KfiN@o6)i26+OYs+ssY6X+&bI@oOP%+%UWH=?Jrx-5T_CWzpF)cFX&+Tq2;p%5eq zw(PgyZx8KfKF8L*eH?R#b z%(^&8yf}6cQKU~X)YOCt*2Xh&6_2>;Wd;JgJ4X2@)-)7+w*Q@2b3{mCH1x*|*qaVz zX&-pE{WWZphZc2Cx*PBMEca!2`eY?jlJXc(Bw)Nf1I#xNzzl0(qZRe{C3Gu%!kOfJ zDjHi-GJf{^yBXJpXmXz!G*PddWN)D`+JiH^+|y<^8#zX`4N*1QKRWS+Ss}wnY`$xU ztxI)FPmbx|@{E6W3?#nnZSGf_&NbUnz`$~Ie`HlrIds}{%p2n!T38(A^91wBazjZ4 z7p`j0jKUt7-F6qI1ZJnJQE3=&eE(NxGxBci%}|y70J%giXRmU`TK%6{99cSW@ThUM zVuGPHZ1H;fdiZuV87=I(2^OFC3Xc$;hs8x?)MT$g#5uKi(yZI!U}(x-^fO|$my}wm z=D)hw#l}@mw67KqWk+dV&7YMOOWve##$LH%f=nC+U_0S zx^Hhn{kELB=LxWX&q{TUrAmV$wZN^=ON6O0Jo8m{=jGgdn7VT#uM20I&2L{{WjY)b zt6W1kN0^Q6{W9K|pyln#phA|43mug=&nU&*qhWxV%(}ZY;dkr3Sp?7|Myo&F;HFBSkF7umgv8L_X}LjF z)mLM+SH`Rhl!~q2J8K6t!pcg61kxv#oHx7^o zf=;|Fb#A%c{XMUf7BWh5vyr?za9iEndeR6mJO7PtBC7#lo}(s#DDL&?1Jf>3Cp|s= zc>2`%<@?H+g55wqMfqtJHKe5T*?rq~JOmpt=b^TfDr;S)MZYUA;1ulnZ_WyM6sNl~ z4m_!Bm3X6_;THrweekq1CaOQA$X(E$Dk4{I+5!h1~AIY5`naC}O+U#_7{aoUXoMLCWL++yQJl zxRB`YYTpbxLi2LkY<_DMy$AtoKcWUT!(sW)6EpLKUDr@H!`*)wyAaIDBMtXgc} zn#A5B_7Rfp&49`PE|FsF0N;O)?_t*SR&;IRKy@pw)b=2X-T z>5lZ@{s`GWB8qhc;ri${Uan&}C}w{nC>;4IcNXf>2lVSv>g2TabV!L~h%oy$%Joj; z*}yVHI7#Mnkzdvbw zSXRr?7Ra^fc45*UT)e(qL?USZ(Z*2qhx_ooYRSuET%|YQU1+I&SN!pZ@!zgbF>$$5 zm5ej3SVKwKInBSHBpYs@`PQwL7EmypW>mUu_}1;e8LP=EosfL|8WB_T{hzcBX)AFc z!kW#ygeuCK_5G&Fr7+EtPu5=QWZv42Ym;_t+P@DWy@^**lhxM(U!bfO-e8A>YFWUg)5GCo@h_m zw5cSW+qGXXcPGkwWKx)?iYy{sMY&Thz1fe3x^e5%Ks#^bm_OKW@}>UQnSpi1PYXYN zYq2L+cISD9n>7S>l>>EJ#BgmI%ArI^`@dH)$;PTmFwrlb;gt4U1~4y zHDU4=QAn$f@H|lEUa4kDi|sUTA6{8aDOQc2GU9|r9D8>4Nb(ue<-hQ~n$bU-YD?GYu>3fyeV2>-ae{nT zyi3I`200UJXWWh<6<|d6#%8arghUxMjVehRip$u*1gucvAyCvX#euN)_0@Yz`bZcHGX^TvlSzCgNdDCQL7w5@ zU#sumM|W!xNro5T7Px9kbBWEv<1d-`D7yjEng`!KaA?zfYS$24hw`Uga)$dk_Ex|q z*5MS?`|{^`?%=-ZFsy;-KbUYlf72j@vJbjAbNPF0RM1kCe$sa0H|IL01T90wv2lJ= zaVltbN5^%-N+_zM{Xxuj@MlkS@JCW9X`_2gL;H~(806Jl58pRXz7?4Vb6Fq;3Z&aF z1V14OI{ZChbcaefWKD(`%(o|FzM~fG1CvCf;_IkAmFPUuz zYpjg6xIDQo=Rz4J{|xWt^y5dfUfB>_-6bHsB2CE4iMR?pbe$jmGSlkCmB3tmJ`n^8 z3tqclT_AeoXgeiHwM}01y!MG_NJWwisv8>*B@Z;fs4nKCKM98#{8iGyJAC)a{NJM! zpu(YES@}V`^?8rQAo_lwydNGn2!rr1x3Y35-0iW#i<%F!5@9yr; z4Ece8?5oh?u|+4YhN?n@IUCYEP32LiB${orITu<`=c)k(*{!AI0ev)5a>@*L$tk&l zQ4|$1EseJ2gi7Kb7O%s?PY}Mar$lM6bkDfFkz-J|ovn{C?@vCQsPyfwdOwEGH+VN- z>k`F3vzh9LKMvYY+TvjAO9<~30E-{+zarIJRb|oU5)$Ngvst(W%BPOzisnq zWcNy$VQt#21xK+IcH`G4St8Rr?h?88U|mNC;``sDyZbvsS^1m4HGwU*iFEq6qpK!> z*z**A?xMi8=e0RI;uh0Zxtm{C7h)3>B(NO3JUYJYcn=#>KClA~CbMh1E$)XMS1Xk> zzWr>rK-`--H?B&iy&v_A_~i==I#~w0NViEwP(WI(X1$_AT(4)=hs9x*q(p`hspjg z9*{g$%~D|pzJ4%2Jd7p|9A1PrM^Pc;3p+ciBIWGonmnMTcuyaJVsb{%FTdzQ;|$)e z`_D#j#4_W2k7p&!?=bN?9VI&9d6IJfPRQ-!2QFARI(Jmi1c>OOW_ufF+gZKA@OPJfX znXt{>E*$1k^>(v8Fb5(7%M&Q;J?HG(n#4g9*&-%B`#cEug0dHD)*D6j= zPcODC{?woN7np`q#igZOt$JJJ)`JtRXl5?ey9?(P4Jf<1e1McX4iFt*^ClVdMs%=l z|7#5j2ok2|BjGSyxg94g!AdPV=6Z)p^ylK`JX6z&+sWZ@(B1tlv1=|iwgHQX=89EU ze(bQ$3<00eg99)O73?$gnD5T?n2#u7F=+NBYv>)AUHHcfz5viOta${S^O3dkeqYc& zsWItxuAgf~e-O?@fZ{hq=eew$;`GS$l2Xw0X1PSsL`a28o8lQzAgDe_pMVNq#<9MEt*e#PLt41WI%SXQ|;bKBdq zkeh>#upJluPO8nEZY>*N<8jVuh@KXP=|CYP86^3==4Zux%Xf=f*Uvo5RkKarM=X6G z?msdjlIB_{rX^3Y*5ooMuxZYUB4kZNJR*)8nH>Mp2`YD#0SF%6U*y$Ed;d%Bmqdw# zS}GhLA7x!LKdbof`IJ>dlc)P3OE~Z31c&*v^gNFHH|0zul+rhfV2GnaA8+?8(=gN3 zm}&`S40;!jHiAINeMdY&3Wf!wq>Vkr>P&E}O+iTm)gp?HBNHmS)%L3&9O8hk4H>~> zpcPE5-8^WVpSE=ejP?8eJ|~6!FYz~<1Q%C;k<}p94ViUAq@#%A2mfO`(aQH*b_`DH z7xL=YU--6od0Di7enZ&t8WG-2FvdZJl_<^Z`O>lTK4z=YT`&$>iI=5WMj6?aLnpMc6pG*JWR3Hn^Q{&Q|q&8l5y-F_uDC90Kf!D~}JgQ=Os znzeyjIH2WTr=>F08DvbaX{zZXVnkR{e!VH@g6_3(q-CO)`{I*WLxP6A(u_HNrTg;Q&$5GS88^rUUQZGnGMM5=C=F7jSE7W z1?Qbdf6aMCHT6{(ZqFdr=Y5ktZ*Wy^`p|IHH5hV;Z73vt>6c$D&7BcHQhW8=W~9OT zm(HKPf}YV5W`6CEk4>KVRmoNu?S;4ANGhB5pw;*65uh2WSI=f*8-4#TA#@^_nc{6B z83h|38TW&*PMkn--X!s{=Okux?c1Nv1Yzmkbwqn-&?Jccj6IuT#-49ZnqN?{ByH`7aKak;puTHm`H#@b3s9Is)nGFpQOn0i{N~wA=+6ph!?jaL%$az zg=!Z_IE=ci8V)XQb2yz-c`Ug$H@coZ1BSX~nsOCycnPzjzR8E1??k9Mz^F#}FhtgK zuLZS3UjzjF+q~G_^T*2`GXBrc`T>V>Vqxd$DdwJUuTXJiDG5tJTr&bgnBoxSUPFk%{c z5e+0_k&`(|L&NtDV9AJrfKBuBp}X1A`5eymX2@mj`%_My7=f3=y+0elGRG{yPkMVkPI^X>WsrU3`4YS>#!j1v{$izf$33=zE zd~UwmFY>}mtY3^O@)2{i{(aU0;)~wvKl&FtXPZz03h(z!X?NlzN=?!6dicl9x>IhR zE>B$awfOf`_ft`JR0S`#oRD4pE28Pq9usFw84Q4T%q?uA!{(Vqg? z-XwdK32;N4TIL~&hc5nmx8g8daR5>>7O%dC33zVNc6L7UUAnQyl>DR0{*PYP)wYU& z%W}iv<5rs7%1zfv?(cR_ohxxWGwy7D*XGPW8bKhHbMKm)OM!Aq=lOdS@4owdhs< ztKj{fv>-|y@PAyrbyU?+*RG8SilBfV~rKxU%wdxlbw+64M`QExG)UeErOg+*z`)7#%J|McQs)1F6>$2$Q;{o;llV63Rl35X7TqtsQ?E7yqbR9Z`Lgsa@wVBpUWw|A_(AChGI{iHVZUpJe(OnM3x!TQ6s zLZI7WJjP99kkv={26s|Wlp5Bg0-5nHZAo?>bpNF#)YMoE>JvaBn(4Jd=D+bYAb##r zoS=usKMVRX0=22+Ky-XvV8x>IE4;uO=5!J{?_c_53TBm(9Do&PP`~jTKy7(0kLNE~ zg<)6p$U1#4a{BWsXk<~W>e~*pP)XrQP{FX(@oSnILD#6OHp|EKT|PTu1cmjN8@@lR~J8_qV9WX(IE9R%T|4M6*` zW7GYye6`i+pUUZ~X}gKdXET3C3YEBc_^tHMr0!;oM~rX0eDx|$o28e+W9CcY)#6CY zVw6L6RSqaoWec_sx^#d5(YK|AxAP4zbK!oBUzFDI_G*NYS0tYA&IOd?`Pu%QLXs-U2>^Zjwmj!pZK4LG>MO{ryJIeNXg`=S0Co7))Cpwd9@ zd2GOV<)EH$x5Kq-;@|a-H!#c6Rg$O@2+cLn3Dh+@?HfjZ{gMLz6Fd%0O#%WW?C9KV zjb_!bm19{lM(N5@EhM@S_Y$P0N)OOQ;&T!A&gUuQ)5r_TUDI(H4QF2+t4N?#UXCaA0`&HSgn+l9|4(iSBt4$;%$7QK*99aloVT%_C z-_(MEcUp~NPcuuygOL8ADcL`4_g}Uh2RjcrBuM|&|EF3cI%bi0l&WgAs_K9c8S=t@yR#^{b!xlM_x&S;X_mY<7= ziD(wT;Is~(p71`V*eVxZ3BS=QI=WWLg6HEur61RP@)A_ceQvg8I+tD)ALtpDs}`LL zAzPOSx9=4kQ&?Oyv5BkZXxr#bcaxALuAq400j_Bp z#XuY{-sQ?`T4s!N5?-PPPD=So^Vu75Kcd+!SEG4^Jt?q7`6?5_XoXwW+wyB` z*&k8jt^RpJ>H(LMU0{LlKxO2zaimw|@CnerXexx0wNCfKOoQAgB1qTTyLKvHM%7y_ z(-G1}P`%@O0PuFbkO6y(_2K+@Yr#dN zYd7B0!dU1fXjTWN=XW(tsqV&badRsuDpq3g5o7PI^gO~rAw&Kx;_aUK0TD@be|P@E zfSmk(tR1iYw3FbhR=K0gU@_MaQi^jRoQN4v8W;e4yJwF$A$Fguiq|^&+qJw4fpWne z_8qH63M`bX@G@*EBDAYbpTJZAwt~1GZZPVZ%$HQC8qI%B(z9ReN9+T8uF4rHXImW= zU#QH<|K#<6JzBnMh7^cZd(5kP2teAdK=-C&o#SmNe~WOe0yWhR$}yQXR!S4Ek@6v( zfsrrcWl?efThm>)jD?-<@7@ooH?&{VJBQW!@Gq`Z5Hue7r}I2~w4ojHQ2`BoGIH@~ z*uLQ&7DnSnc{A$r2cobLo8iycH_8oQ*QP9>E7V3<)3Oe*LNkQdenN~h_G3M-47fsp zE0q8jR~p$@Fw~hcW(9MBGs4p7S9Hgs@nP|3x{zCHzI?N#wLNcXnAB@+p=XMUcdBi% ziuY;4(c$!+0hIKN-zo*vN+BRsN$Tl&|I(^Nx2(*3ko4N?7c4!k70qeQ+f8X|^wIk# z&~Xy|mvwb7baqe@Pvo1LvS?>h-G=8#8YMMBmZroD!eB_}1C|#880J>i))GBTw$p7< zFyCa#02uxq6?_%vF{|yX&o?3Zf-bFRVgHn`@`?%^-Ae^`o;v-Va2m|y?}NQh$-oa< zln!}ib%|-bGg4G9-ppo-CD95Qva@MCPUL;1@h26;rT_?8QTQH}yowri>FRlH=*>y| z*nUJ9&B4e0Esiz^2)jsD3=Gc*dTyr{lVJAknUA>)4VX2`(lh=IIEOhaHFu}b@%3@3|THd?sr40TxF&M ztrGZQ-2^h#-=IF?9V^wA<4iPnel^S|6me>VjltXd#^~(xP5yu_maEH6hq!mrCxF!H z9}&G^L`|+BR}sWwG59-8q~sZ5_)@QS`7-2hKfMait#qB_;#{3LxST zG0mG<^WC}8(lB8D8cPc4t{~SIh^ONwdbLW?0Gj$|+ywcpWf?%%gFv3=$_{ui)kO9s z#mms`c((ARKP%N&)QI}mfO|8jJO??*Bukh=n)NZKDi$s!@4KeZ)D}59Bs*C2rp&6v z0&{D8yp?&En4AA~nHc3m)h7xX{F#8Oiy8N6JI{-2b7yTvk}B2Qyu8%%oRGeDO@;;v zj43Fc`9!_;=us`N=B=g((AblS<7?Nrv&J#p{d5a;EwHxP0F~Kae=|IfSvUGzlnOSi zTMgX#y!KO4Oo=N+S(lNi#&?eAJsyG_4wmZ&vFs3NeZ2ITD5|J1v9$aE*g!?9KoD=n zgQ%T0FD93PlUu0&k4A~-nc!Ry1`R=%4n^rLVyD2k8hWyUN^{Bk$`g1${az(BTr>%83)ugPhih`8AHPg3fiiVsba#8DQ?#&}s_SzVNjkaRX3{K(8rJuza&-wdrj@9A`YYGSpz#R05F=Hpo(lK5CY zRGJj&!>sJKoVIUDB}4y&if9_g=LZK*M}3id@)&kXZIz1y2lO51(`(X~c7LhujRd!G z*=RErKh&_1M>zq1d2g?eegC&|mf65m-At{&FbSKXSdaN+?YemveV3JuUB~k7!ck+@ z^j{e7i6ux8vm1iJm}dMpAf&(h`}M%?Zkb= zyw>#Gq-VxeYw8o`%d#2m0khjiHq!OhS@WMbnHWE52)d7tz-Yhth@w%~tV_;fEQ(Y# zwByNg3KbSshlyGfkqmlC8ed<0I-}SV+qameBdnOK!3mwO7Obc|R;a7S^loDeeNSfB z3pM5tQ+5!I@!w6;-`IGTMElp7SmVv;M#H|5|AsKQL|;|CUHrUqk>!yNb#|aglJG5z?%e&c@(L!aRMa ztY;``I4&95Y}zBXbZ$0zU68tL@_qMqB z*~}m;l%&cYUP6twO!`qsHwl}Bf0j9x zm2tzW-jPX|2;O`NP+HcNO2zCe5r^*aeRHiSL;vV=XWY_)=2Wr!o6oIrd*PFtoF zr>qe15Mv!_QBARgLDa*B5f$$${ZobmzgyM~+02h*4yj8o?*3}K>yGo|gi-q-Y-6%8 zpooz$>~0i&EYiwjxT#>|mwI=PTJp((s2}Kf#M9mB*?iEYe@=LxUH3iD+os9riBmGe z$9Um#R?x9U^&o7)Sz!09^?{J<2fz?wVDQeign?8AN{?Ks-!okjil5~@ltocWo$lyq zERa*>tFEn~WK~EO?fo1ab;XXC9?)vSX8FlI3W}m;mby%Ofe_~3|A|%3D=&xqGT^*? zk2BqxgomXg6mQubp;Kp_NH$M;8>a@2+N_Jet0>`fKLEfut{|aAB;cwjVBzX)S@}QI z-HMC8cKq;fcbHWkS@dkVzic2It7j{WdUG=d#Q-a?0fA2@Kya$bOs)pDJ6;DS+l)V( z*zdJ>-)f1M;uNQOU_M$r%Fn(jVA${`vt%5)pxni|!!yJEU3c!o^TdDL8uYR=Sw5@B z^u3hTl-axTM_~kCrpUo#RivI865<`#L-ZdS!rq#_yIeA7s}M7ftWJt&YwAJiXe zVG;z=Z_|0gXvj>M!w7U}JJdwI!UxOQ#>x#M2Fy{Y6VxmUs-=5D45Ys5JbAv&6go*S zh&m?<6Rm>9_Hpxy!D9{U*kpMbmMr?UhiYn%-ZUUu!M#gIN58hcVF3XM48_*v;u_;t zRX(KsU5Ml17zDTfE#=DVI)t~Bk6s@0?k@E4|pGL2*N zEOcLOdGGIfLKhvcDVjkR8pFlK3_2YK{!Di1%7FV&%8%MX4@XDmqu`hRK9l-_P*O)C zj^^B-9fZ(aG&<(1gM!Xm_4|)`{HE2^M_(+&(SRU(*Q>QrUx|+H_V|tjZmC<7zN^tX z-2>bjuYL1ZP92yTnQl8)d89Pu=ZWi|dOC82H>>gn z7xG0-bymP(VK!Q<0XN_Q@2vsp5)U@7@G_qA!oSvil}*l9X8A2X#V0T7d_TmNzbH8h zQAO}-Sa0~Q%-9UO_xY?J*1EJ^Fb)=4kwd8rQ~ZluofaKy-3{q3bY(3>;B`9MSG9^iS|^%IwditZzKAxkW#(4X*1$qr?PIa6h#q=q>T4V4 zSFyD?^%)u>P>Pit8#&Q_lt%2Qr!)RwZ9T;v|Eyr+XOo8A zon2`gIt$@lJm6%RtoDkym5G!c<(^9WGwHFzA^Pv~_}_)-KMdaHsEVsTEw5R>3X2g% z8w4+B>~*8U4R*@p6zB zSsLJm`HPfK@JkJ@sumR&`eiRRNqcX?%|N?q{qIHwh4nC)Uwm@Zw#Nwu5xxg-Yt!jV zvTKOdsQzZ6a_=^Cy+q%2(>RtV;0u%VyKWzorp=OcU9VuZg+>nUwCQZu7s5L4y&DtO zB)lU{>$j55FcD#%f)^Yv&vpFioYH0Ihd5ZXOU6s-?kX$j{k0MRhXi?6+SNYZm5iU? z^=+^1X0OB13y5Aznm+?)M`5)>@K?mY{(SZP$Qn~e$9JjOi(|axVJrGx%0n(HgfL*3 zpm0Y~jueQ&*G3&HMi6!Je4Gbt|tbe~&mC8gTSUQRlsknnGpTl|zOWn8U>>|vhhDx6zH z_A%3rcgq>PLa}L2UK%I|ANC7vV<(=8CD}pm)e(|&?B{BGUd&W7`L2`Oxr^Sj4j+ol zTtIy1Av7>4DSSO|qdmmrAuL%W)AN}AVJ6iO$?KHkc(UX4IQ^R64B7<27XbeXsdMCw zDAw&R+Ue3gEmzl0>O(H|BAG#5U2iul$3o1WsuAo9P(__MEGSu`qyVp5;B0`<^M2A- zy8pC-)a2WF#@6d~%tsB~E87EWUQffGdEzUMRQ3?~S2WY0rQe*hxE}arA{6d~lhh51 zSm=~I=y&AFW=}&ul{HWcTwjwTW)+D%o@ub+J0Wd)97xBHHj5G1evr>zWj)FS5*?Qu zqZ`KMx{hS#)@-XM{=#ETC)F!U_V)FAWp)W>C&`o_FEu{ix4N|xL9NJ@kO}uR{V|?H zbk-mL>np(g&*o-6@T{P{uXcl4mZ16(WhUdtpjX#a7$13BZ3IdDaM%5(&On*Y7|DLo z!jY`u&I|JOp=`V0zb zJ=Y}hKahwh?dKD`*HJpJAi<)u_&wxd#7sPl6R8-ou08XG+2{E8sSbJ|F;!wOCodW2 zmy}`6S?||BYAPGJf{{q7S#)^<`3OuGDV)`)#CFX}$JBdcWa{b`gR0C%g>?qGNp#C| zuj#NcBT2a5Cpf7if*Y^wWO`|WGBLlAIigFunQ@WP$eP0_5O)5N0Z%JZBX*`jZ3Zsk zIn9QFd^9a)hwyImruvk?-F`2J-?37$uNR%{CtFfLo@Z|93aFKihZkS2#QuXSqOl73 z++KP93iI`F;5S!);hUF9*Ig}&#TAAW{GQEr`qmC|*<@&nAcH4}?pjItz;&FD+9;%GXd~98B0@o-_R> zW%3#t`t~GHT9$r^(9G8qdWT%K+MTn$^Tc@83Df1qs*l5Ba1md^P;!hG8>D(deeVmV zHZ&sA2b3n=n+-1WtsYPA4tlw~|CW11RL>LNGdwjGUR?amWLN+6YpbT(9Y-xfOjX9m znT{fDjqBc;_%K%b*CGOKqaLa1>@Eqh8MGS_i4EA-L^meYbCJZxyhipc#2xkx`>hX! z#3}bPuVrJuAFzfqG$s5|!teL7Ivjdku11VA9ubnyKZJ`(XDZ7@eP!X0|0!&qnx@&N zlbCQoP=1afmVhDg*y(}c{q_rwJODHXB-W=%X2~n4-YSo@e}LtYxA#^bRG?^i){Sf{xEitM^#u(GV`+Z;yp&}YlQ@X z$)5Sz*)Ah)iyy8O&40x-xNd*^DkJfvy|CwxK-Er&o*YqC<#VnfoG;E<_}IOe9glkt zCXIwbnPx9s`&b4q2E2-Y;v{Un4VnouqbG2&r!Figh;&oIxWp#%HndkztYpxVY2)3< z!0yv!a?4{tve}e>&Me<(oZT80#paROeUj>aMb=YrM`n(fn>LEWi*oxn?e+7-jO=9h z9GyX;I-;3hZnLg}%(AGoFztRUXpr#1uoe)KurV7}kQj`Ib-se3W%VQr7#^W-4!cB= zI(F7j=+LU<2se;>f~a6x8YwJ7NuQyVX5XEmRJcA#M-WD880IVD3g+UQZ^S=it>WX} zr?i~0Z<+bs|_^zWC+VRpDITwQr(|dX{J2 zOe6ah>72t5PDbAfP#&-^rC;#>m|NbZ!a~Ol1(eC1n0u2f{_PJnG@vyCoiy~!r@Xvy z-5h9?#&I=S)1o-P@Or^y_BQ?`MocuO?Yx+Q=yxmj@8jWDr!m}H|Eoqqz6$B{%2}ul zY{jHxC@ z{M(^<3OH=RWSG{);SBv40cFArX6tHLFZ5gplb)zq3XQyKAf(}ozZYyQ@#KY?5b>^d zWci>HhB#HM3}L}tDGWDk9oF<^@2#gQcOIphJasV*7iV0~TlD6PAB*I~w6WC*_tt3I z&L_ew(26JWPQ9UBrfHNPJUGT{0gxFU9?#a0K6B>EL}g}q>iBzV=Iu1%rk?$dDmv%r z2DTYmG;CQ!X(~%i5QaaPUu61)T3a*lOT1MQA+scz zeHhQ)jr`!iTC*~&kZH>e9bMl&qJ3LlWy*X)1YGd@;4($m$B#2NQ-O$t$VBwFrIwBd z=_Okd#^VCG!6vHFrJuFg--@oEaKn%BFn{9`N* z8rm>H_9ikUY0r!iG2KFc#G|M^K()H%EGG~Z63s%$Y}eoNG|{2XO=`b|Fub=q^KP(( z%99wy&vKPVtv{NCva*dYi0kBU4i^zBMk)RpAHApiZNNxQr4 z>C{NOAGx;+@pL?|vTRa|*4Askof1p`jJ!Ao+XyO09yKrk1nFdZfavV(EFiL7rtKPj zLWDq1JiQ8G@ZrXIyiy@p=RQ_d#R4F{5^$&>A?FXc6e?88fRvg_s}VZbH2_N4WnP1t zIe<-`AL86$Y6iZbeP5`SabQ;Q@OfpL^PoA^QGD-{zuM>?-*skp#1_#Cm>J+ z+=%n?p1(r<$53wVhg~!1JDXEvSegrIRLnaehD~ff{Tkw4VshS zK0@koV04$m>h0Y+ozrm-E7maOQ?j3H-Or$FyFUet*o~j?GIwJi%3< zl+r$*UNAJ^JlS3DhKvPpYFE2$XhP&Icuz`oY6_@kA!9JsECs$n0*eJi5CVM^CF)@y ze6_AB>2(B@SNOOA+o?x{2ZksJ5?+LfWYGtEAkc!=8{Bg8mm(0^0wD$fuo;S?_=u^S z{r`R$;UkeOUWgmox8=-rF$s07w2c|C_Y`mj570S!nLY=zc+#!mbI2Qwf-+<*nCbo`pkO#N{#17Wh>wPmXuciM^vjcEgWJH#}_QHfAz!?GbKI1uI7+a+L}?E*cs%uIhNv8S8VL zi-__zw|?gwm5CSi;hbC#IB{W&@AZPy5%d4*n%(J{`ME zzMuB>eq^9=<|x;y)=P@w+#FMl>*sZmHoKc9-iAq8DxDVYkDkgqeLN_#unX1TFZ5*7 z9qN4L=zfEvZ2dd$WUV!ez194BMH}=Wdd~p7-BS%b{STcr9MD~eQ`AABevxzTmq zsIvjKF|?gP?bwas50@vD^&YY;p`(-OxpWJp^b@e<06to+PzlB49Zcu%fVB)%Ehs!t zIv-R78Cs>q5G5$RVTCV4WcdRTU()vZn34705Nd>iwt?QN?doEi>&cTZs8naz7oebl z2BifGC?c2t@5?<=DuOUnAPOoW7XBEu&p_0~NY-TnklglRSpjkr9%b;qTuU3^ZS{9q zs9+$+rURwuZxED1kT-OzxNS8cQoGfg2aJdJJKz@Db{_dJ}Pc?uQ`)$w#9$Uw!~JLKsCd%Qi?YA@N{X z-Ew_vYXxZAfmIfG0F8#QDFAJNa{(2mjRq4}*zBa0m1A_qU_$~UM`?-&xHuub1Cl|} zK79DF@cH$17%JDW!<(chkAjxw$yh^MCuCw=LnX=rp^y0mi(a+qtvH(9ey*Veix&r2 z2bY+qYs+gSBDge<1XVfLp#_702yxir@}Xn{^fhP!6`r1=lF2I;-{xS`iRq^7=tkdV2#IrPh}S5M$*fE+bQgdiJ;e8%s&lYJtbHh|jLfhb|) zP1Oh~G?3@Q8_@2$9@pal=yeb{ph0{O1L@5`I84wo0b@PxEWq|ZFPRrJpVTMl*N?9j zVlGuRc)-WA_w-c&5w_jl5YOz7KU!|W$!#22Nj~Kp-4HHt8y}xLuA#?H=p0yyX{I$E$_ABfcpI_EklclBj4aB%C&WyOY_%|tX zooUQ?vCp1px++s5*<`kvsdEjr`uiX zSb9J$qBPX{^)zCiIHrd?;4sMP2hK{aX53A#@vL$yhT@QsmxbkB4ODMS#d4{P8zyB6 zZog-9K;{#dm8|=jujs2sbTxX$FwQ8;Z9}?;p{}(NdxJ>trqfj9Nh!$y@~f9+qd)QY zl_Sy(Z$^FkvDIJ~tx=1uEZv{0R{qFUQ92`>p~@w{+z$@HXED5Qx;xLSw_Ha2#{2ym ze+gu?-3Ne_wsrDanp=k6v>9^1^{i}}v$Z>kvTuEV#=AggI)7+EG2gG;(HDCgC)lS) zK}7HP+j^^k$}j3Rg{*7VUp`pU{wp4`lw3Sf_jLGy?O8nFY51Z2K!B;PApFF@TBwei zvP4>_Iy$cyxy6BLF~PlUo)l&#oX}=LH22Va?ool4eOW}%rQWojXJM^K!`9<5FaCj= zrHhZA!o)GbsWokyqcgr$=Z3!JR?_>Wl~J8pht!w4+cTXWy7J_T&qsfK^?T|uugZ*bnh0K1k)79g9|HeoT}))k{{3q+HZ5?9B7F&&D`U!qwCdwk72+#Fp600#yg574dr;J(u^tq9C{*xW$n#U-)_ zn<_}}L2nIh0}xdHm+*>8<=LF7L)B$aYyu%ay1)tosUX54k_rp8V?sC#m`qHY+M=K3 zp&V*Q4ec4=umQlRHo`gomMdb`enk4PrKrVl34IpLdtkfAtc$(f0%Yp_Qz1axgnCjD z-g|0+6UaFLilPMEb=XqqAXFNrQ;^dz`za##JK(=idkuU-5bX4gWgBw(pojh*=*$h< z7DJif2t$>5Qq+(QLhnD2pB{kn*J=h@k`vI+%SRPXXQp$hg4M2Qo4ssTp&8hX<{HmmI2Oh&6&|fLk#S zJc$QOi9M#M&jadelkVu)0drKj3#0UKYRD3jR3YqW@?0Pf#eJAtQW61g0_<<7oFQZ5 zKu0k7RSq@#5lhFy_6&gujc`WDC$Z>wlIZ`>QdS2$6cwAqbr44*8{)y$(5Ev@@iNCu zI>%3;XnaqOjo3n7aQgVGh35EA!rDUTHq}l1a2EapozoXgaaM@E$g5=MR=#8Rq-r@L zbBIOf>=oRrFJOGIKU~JbW8_+#c5ier&3S!gq+%F3^x#U>$=>3A_t!lJYkA~ecvfPK zcCD(L9iv%mftG?%@%j0&YWq;|)5Jf&EPD9$5H-z$8M5wak>i`Gk~UZSaUJ$~h(|Ik zu~HhfWcQremQ4oY3!NW7burKq9YnJ59qRmH7_Ug#SUq*GvYs-s-)63DWu5&hclOQ@ zxr(T-`9;PvlCjrcbKrdhwBe#7e-6FNVJiy})=a^CeQd4y(B9)%Rb+B~Dy!DBIcKjU z9l@+-5+Y4KM&|QL#FH~&XLozz!ExsqMh~OZjq(>$e_A+W%%i;z8~UubRXFUB7E#F= zH&ec#|FI5f$J7{i>E#eerF)#{=w$Q&htKHw+^8dM!#`wi3Oi$X5JR}ozlAqKSLge_ zhb2bRgwm9r3)f(|f&mZ8uzfSeSea}F>`5456@%u*|I}(~YO3+-@{Heg4IgMg?#+q~ z;{b>gGQmC8w5^E2r2Kn8{-w{_4ekfmKy z{zA*ilvC*P-!eR*C@1ZI;f5^-!}4(c??!vHm~;smiVS*)v?o@;UINB@E?iH}l;4LH z0m87pR-jNoX}bPSRJ{S%NT%PB4isFFQ3v_C(4K~ThrF_~C{zS2ga?Ay5?%zX<+rD& z-fTu~;M)YqDhn}}=<2kaWMJ|J%aUk>;2)zY|G7ZAlM8<^_CsgsKj{qwf*xBRVKqRx zw2um`$o?$soeBAERz=t$!S<-T*?fQ~TQZJ@hS#5>LR1_E4-XG2#sRfkL92YM!e|Ig z!YGXtD#;xZWI;A*-@M5S6)>OY4pk7<&JRhvYaupXP-vnq;;_e8wCsi7ax90464=^Y z4Iu0$gF?`K=X`$%aHpuCHYf#A*J02?0>*cBe_$O71%FUzb=kO!v6|Fs7RyNP+N^04)@>_aN&CYG7fwnH&15fw^EwW5{s z<}J=I+koMrl0_+J;SD@+zX_H?j%&V(Be2Q9y9bPGC`%vha<5OTAzaD>GP(R-6I=d2 zUu!&t=gooo%lrBkD*v}zcaRlKqe8P_!1wgOfAjLODrNdW^BpGt%&YX9#QU19UgFJ% zMox%MBv#PpZqZ98)EQ-Eb%Hol!N-7i8bsv?0kb=xa{e(nX%*BCr~w9S|Msjhy@oyb zO-Cr=VI;ef=CIN{f5G-2N!y$cdsF#7=+QttBMnsUI2yp2SXx=3U?I;R`u!@EAK`{a z4fb^4a{~4OE*H=SVup zQS?95RR)?RgwkI?+~$nH{%0seTwI)*-I~h)&!E%!Kc}{n0S8VVp3Y*864+Xw6G}r~ z%$K=VABe_AEnfKf{n^++k=USaKv6jV&b6jNKu9G#fbaBe>8ol0}@&o{|(V8h_Fx`0qfGok@X;6cow8oXvm`oAiSEC^z-&HG?CyJ zXku|R4{$>fH$bjZ&61XM0u4a;h=3R#X!V)<0dCr+4m^KQ&cG-AA)F2kY9!QX2xJT2 zG4!J()DPsZu6G$pW6eZUilAM;dP~(H{w$aDHHmaAoL!m1K8+|XvW-n%bMy4y<^gjP zID+6gM;qz&x;Q=jZ?HB5y|EazrK>Xq=Q4m(iG?^1qNE}h@5gli!932C(aroIO z6)K{+!ea}M(9-U|1OIGEy0n)d=?4ed%bLmmgaJ|EqhhLHLY|_D0RAkLUGOKLz!f}@ z$^-ul+JQQdfCEiFhzI~V7W|d(ppvpVTuzHiw7LF58* zOb8%CEkc?wI9RA--%UOQ0%-XL>ifYvPjOOqGk_P;va)Y%sQ!g@_v^{-eh#8BaL|-9 zUBoX{fzAXy45}gU#sJlw%)}kEAD%)X63ejY$sRoT9p&I_BCZoe1yN_+VfW}E?5Y6T z0N^-ugtd$cUIjk>YcVu&e3Whk==Y$9g2OA02Gw7Ha}Zjig4-?eU0u&`AMl})C}98m zY+eKP79V(V;V*o9 zICoI{g1ONCI<9P&deR^Kq)W^o3m!|WAAhm>9$xb*c>WQ@*IYL|p*;y@CY=62^@nq2 zb?s*!G$0c7>=CGNFDUXGA*CHC60Cal9GsjI5L$(gg-Xl>r4Q&Nt;pfE1m30hgdZ!s zHq_k%4T@IAUkqBKrZVj0}_d8tEp&!(-+xtNlM}Nz7BTkB)o_kaW6n zNR0M5=u-YT>0AD2Oi{}ts@p3}HA_5V^R?H1XPdC_z`s|xTxxNJTie=zZVIlCiuKgg}#CLB0GcqLC&>rp` z(Uy!s6FyZy^pTk)uR^~EnHNA#JM=rnZLt4cS9)4a*LjA0q5YyP5^GT6Znyln(Sz%? zLNa+;hjz~hB{w3P4AV<~{lg~q*ExCOLYcVYW|iHln`#xNH^JNbd-YY@2CaqMdhJO2 zpQIM9X%Q~DqS(SuztefNiw-sJ(969!OEgj0NU}^0Mka*I8=1Fap|5$1M~&9Es$|#H?!n7!7f&w{&E@^%A=7REooVUg-_^+x_XYO#Il4a@EA{^!IdD&V z_y#ia@`cS-eZt(=llay6-Cgrt8Z0T-1jw^ZiH1{H>wb46M%|hv3 z7=5GHh4++}T``kU6_t>~PaNc|q+ZXTIsU7PgnU!}>=T|se)SXwA0f&te>(C&dSi6T zbyx2YoCzW1{>m2>n;8S+8~Ao*%vbz)49}@!(JztHu~#J<-s0!OLPJE-Usm@Q551X> zMp6q2f5eYd-@ryAYo8Z=Y&TcUsoa_LZtQ%Fe-Gz+KtSe{L;LN6h_&q@#GrGa31fC8 zIrKe!CT!7cI7m(RR|Z^e1iUW(Jn!ts*f3a;-21vc-&3V!t^_kc9{GPCF)#?#+fGVA zu;HXH&Q?0f|0rWc2@vTPxVh3xz;=oVjJIM>YTbM?Nx>* zwspPp{ac>RTF05w8K!WO@L^q9hHLr>o-V|1W*W0v4 zhKAkLX&>RsxfIm$W`*~q+~OzR8=8t%H6#9|Ct>50`c&eJ0E=OKr-{Z~ zZ{_@|xU9R0CY(pi-%l1U$Dq&Vhi#|?3HTh(VKrOoH> zW0_^Gins5Xtxhpu(VhwGT_APi+4Ef6an3ZiZZkZc?@i=0uuwq+$?()Deb@{$v$ZIX z9X^Y6Q|cGMd%I3h>esW%+#aL3;)HCi)2@=|*l9$cF`xEmAq3>~XQ ztUcBB6f5nkMl4LP z8&Br@@{2HN+BH9}j}Z6nTd5)DBgB8nmDgJI8U1<6tjt_D@aNTZYBzQl$+(4|=7VO0 ze$&zsVM9A1UhmvItdV{QCgjXXx&it{&JYBBr`pYCv z=H0H0}?-F+4IECGNui#dF8)ReIOe-V=1ZR)j4Xn9dq!*+yn}ZW~fe z^(9~aZ9s4eg+2YzgLk#wUi~RQQ~Byl*=s3y^(WmG&i3Vna@EP))5NmJ4<8d_v-(Gz zpe102N0bFht8iZ%f93dhb=_NS+%4z}6|^+W=FQA))OhUJZs4q@wyS&P|I;tBOGN8+ z-ekDBlZ37r(Z|YGq2FfhrM0O|*zoA8RXxL{tbN8)b19?lQtmvZZ(`7FFoC=Sap1&e zris2NpQvLe+M7rlz7$k4_y0|`uS@}6Pc{aZM94vX4mCU!yc(hJ5t$y*M&HhQzxu6q zjYKVMuuo6Sd_Ov;KBJS3J8|Ic#kG|3PZhT(yj5E3!Ywcu5$dhe&=OsirdKJe7O8B$ zwh3seyN?!JI7CuD=JS6)y@MTHNikpdj1P31#((B?cA@H6CzM`nI`8bq}Y&q@kq8ZU<&?)L^9onwAo zlu@e0DA6j1Xa=Z_J{8?k?@v=GyjwWxUFuwbe*rW%Z=&NarSj#5REH{@wen*`PiU4|xZ!j==v z4n)jJu}T)VAKeeBuPnFvlo}FPg&%ocxntQq$CA89iU6+T%?1qNz5DEK3IJ?1kSEUj zL=N3(;9aEaH8^x2T^A}R`TUNAa()m_H#h*N-*w@H#OM{2?kwxtQVitG)hkS_?<+7^ zep`tIzGM^&X6h}%m`OyZENvgS;XHUlKgnjipYu>h{JrXDnaCU=-e@UUc43*n~2=1}MU zI)AJyvh5bSePO)1z`)f-d)DH3z=b4a`VvIYS2m>*V_wr3mo*#qT=`_|ez0~I2CjX5 z?Cr1!E#Ml_TZ*=WeEHg8J5HrW_8A?$rImg6YVcNx8lN4L&L16J_UalHj%JPkD;c!(YRZ^lC8x>$|P-Sx1SwY3zhqm0!#x9ITx zO2mEpgSO!MHcMm|!)VSU>S0$>Q0n5vkY6g^Ok3pBmd#Bn_0_q(^};Ok?YUNzKNZ!S z0GSKw;#Z_r_-`BDkQP#N4{l+AoEwHADrje3LWlO>`KqWg42s~oHRH40s!<2o!Cai2 z=%i?$Xk?)&^SIAhWAjB<7wKvD)f)n(M<;jCw1%dOanO4l34X2@W5FOu_CfS;3yxys zE>ihY&~fy>$-t_3A!ZS$)DSje|?=$UkMj zRV>T>7&~j^E;8)=HAbT4GDCa4c2c6UM*TCRj85D(L1pOc6+Gl@QlhXXmDRJL{bc5hj4PU+5@-*Br-4m^TnMzDp1P(dHd>U)}NT?Us2CTgfoLe z^Y5JUt~Y;&i|%+iwah5Y6q-zP%C7A&e{VyxrVjh5!sU*=ju-4EKU@bn&{((g6*D^xfo+FYQ7{cObN->p3u0cD;ol+GIDMJs=p= z#&7UiVqb8Zdsn&gKM=b3HS$*S(dA0T)i7yby0imJ?6(c~*k03JJ_?4WXcjCQRV#g5 z!9u0XrKL{!U%zhL3N6rXFeh@?q03ZQbmEsauWn4oRn@^PRHVz$aGZ#I>HYWqRqqmQ z1OgfjXbK?`LKg?hRnxX8{EME$?BH;|0l*_gr66SbM#b)ZVBY}q+H{E72VV+U_Feb4 z+GDo;x1H$dAV%X-2>S024Kgym#WR}35$=`|EO4YruiFO7Gw#^3WlQj6KP%c>eWjvX zd_KwYwB#DH)XL(zd+(^h`Lw=x=T{5wFNKq*>bSR4%PMMiKk1hIm?XqzdM!R$+tA3G z|4*H1TYtrlXIa0z+}W=Lqjo@=KaT*}S3+lm*ewmY8r?H3_Z{i`ol%zIf*k2Ts2S+} zgEsEmk{XrlVr5fw+Lvh1D}YEnT^;VW7TZv@f@I;BPle3T{?2szZU@!gAc z*gH_?(n=LY-?%Rpw^VM zBfGTlyM<@ydNHoY1Vo^__BzmDA{M~7>2HDVwU;6TKy>h zuf_aTKqMaCaGM!dM#r09p2Dskc(IDKDKhj3yGiP2&!xWR&9>}Z1T0Es{X2_861Lld z<=N0<+n~0dm*it#b2!^!uC*J#t)Jo6zU`K^0}b-^pN%LUy&nz~Qd##DRb(Ho(~fZA zrbhed(W~m+@h*Pr7DPqWgUe0(#$JUpL#6(7OUg%TxgiN40u>v}?3!KF>eg zlo4Rh9DH=)TUNaKDlvWgOn=0Hy`uc4X9gbDmF^GQAPtrOL)2M7MHRPOACLy=?r!Ps z9AIcf1f)SyLb^evRJyy77AfgghVGCC0qO4k{=E0z_gl*~%e7SSFmuj%&a?Oa?Ksz6 z?J~Wd$~26v|4u?kO*{p*X=p@^hMd4Ly)00E+4%PsEQqbagA(6Y<&*NJ46H=h*~PhLZ%lAEA) z`ZMkf%5>>NaYI%B%J!{jWp>WYghTt$my@AA=nvLFrp&a1qm`+qxf_2(`?TUIFZTTI z!b0tLqUOcnpA|#$+6dLKPa{r>6EFGQg63CyHr&^iM}wsHdnW9e@sayp zQF0XO;?mMf7SDzbrQRKKzr21sO=X$L0gKKC{M>RAMW%Fx5!>?-#-D0S?j`}xmiz{o zE)M3S8I;Qnt6EC?1O*7`2tGT*qTUQyKap!iBRK~C>?gi}>b%O=liz#aEbM;(jHucF zT(fT@%(QOrFvO2SZ%drsJwevr&R^_b`ALp%*QSnayWtsD2Y>Ekeb}jd43!t}gh@W| zI4(KkM~mMmL{UlfCsn*@+&pN$8jH>bTd`BXBpv^=Aph6__hM+Mr;zp$`zj(N;( zJ&medV>^BDbUfT?C4Lj<(3j*}zt-@JRh=G3Nj3-vPn6?FZ6U{A7blm5bP!`MleDZk zb5*?X`$*s94LW^JJKf6qnN;t`hPXVJbjvWrhV~J~i&j3@Veetr;lWJT01ag|6_{1c zag`#q**tsY_~N{ZlL<8>KlT=gSncjNk^fXgnOIS}?;!fA8{Jf%>3 zr(`x?R$oT?t8%@_BYD&qEDZcHWUM~ncp<{SnRjs)M1JIv({u;OHp$9P4-vc)NUkI?{Gjf zl)h?Vx9Z{FFS^Su7f5T=&kGNr^g1yxGx7@CY&1Wf8tv@vc>nEN2C~(VL%N`rvEcK1 zn3#4n1IjX~Ib)ER5Bc?a5w+RHAku>GqmkcXU^|Ss?I>i6mpx~Owfbl8$o=Wipb~kG z_2{s}X^r=OL@2XH6K!ZYdHc3-*jCl?pA0b(Q-{slpcnM3qn?_^4)4En zIYl9k{!a-C*Qj&R@9j=8&gzXmL*WjWfyf2KK%h?WlRf|a`!|5W0$<2eOP|+CAM^I^ zE8cTCFdD zF9Mp-{nw$Eq=@kTQxptglxn(yaRa1=s=YKAIkkG`an|NjyhYK}T?r`>EMEo(RLtIb zqmdfmTXPA#)HYV?a+Bh^tX~r>8rAVcjvn|tY?`4tbCmZkrI;sO&F|tRb@s}tm=C;I zmJQhjT+~k`LPRsDnbETkaFW?hm?Z^cHkxHq7UlPqFo@FR5Sl*3OmNj{@7F_@En*_x zD_sPZ&bl(H`<_&mc(oM_Oe4AL-m~gK~6o$F`4~GJ2~C zemcc5K*aovxEZK+a zR(7%EWS7Zm2GM*hSF-B($IK(c#3Mk8LB^H{VNng8?c_Dr;6g)ec>h79VL`JH0f4b( z@=?xA5wuCrAIh0eqnh(})-xkCmlm~V=d-emcgQ(;104kf>a1~|b#lW%2DIzW@8s0Q z!tU-Q5#n=;GHT1;i+DQ8l=31&)IapD#Sjx&Zc^08$5)w*_^*D6W_7?mSuL5`WXNjo zHykHUF2au;CGkZp>5|WpMyHpeU~8Rrp4tY6@*cWGb#>NyH9m|~m7WC|1{DxZ7O%hc z?fFeUSl-^=;+K1_8NwbJK!!d^)$os#Q;fnz4Np+ZR^Oe{eK-`-aJl_9&rKEy6hs{; zaJ{+;N!`w_iC>(;08(|cCi{UQ@M>b>Zi8#Y`C!4D0!!?2`BG9lE?%$N4Q*p%gXB4K zxu6&Z@gVS2eRA@@ZRa7ud}5BzHrflNrpj%RFI9{i?PS@6Jzw(DB+mo$qD6CN#J+mg*MlX3>f+9ugPiZAal zh>3i7mr`PT1@k5;RZ^Dp+zA}_%xOK$8R@!Xe~UahWKj10{{K+yUI@Mms=0Fh5$LoLtACv;%boup5 zJ_15-SC>Z0XZ1@p*xl3frGY^g7!{v{;=tQ^P+Jov_SCi^b+?MG-{$8%Dc<#=jcQVV zHlh7zdYQ>18)^0f$30hTkZuXXaa1#D!=*Y0YY9&uAC++>O7u{uZW;3mzU^s)t%n{@ zaYVS}^HyDKVuxo9cT{IS&y17tZ>3F?5WH#&i#Z0|F3)}htWo-%?wVLlR0u_jP!D5x zxf!iJQmfHu2#VLzpf(tCsxskEO-<=>5P{GlaJ&HP3#cOCNmZRmJo{o<_?(8s-AmoD zr)q=0Co*v>IVnf>^YUTm1&p2s`Sakav0W`Pa5F@;pS)O@1{bvFHBNVUq)4xdL%-!u zY(PrJ^QREAaRboA)yemXvEz(?kj0GdPWB>pe=HO5;g@4?3c~zk6nWM9tl;0!+mV;l z9h+!0DtHsb5=z?{&oM`Qk_SFP%j7CBf396z;XDgCV_FMeR36GILcPk=sl4asY*I65R7^CRJdos6+ICdCq{u96^a;w zr;iTTIVn=Tr3kUgslk$yWfGM`&)Xs&Z^z?Vk;&D`)hvzu1y{YUn5&sTzO&^}p-`sr zD<&m!>oRAW%o($G)%_wiLH|RJChY*7c}JLR36@VTvLAj+fkl;N_MjnIpi@M)Nmb15 zSbwlRpN@Z3FnY#2^4uNLz)0;91ew2sOR#PGGP5N$6Ie`)a>r(re)jucxQZ0u1t!G> zsl*R$6@YCvw@_s@fJ-u+PSm8$;ldivl=r#r2ux3W#6ln~D`It52WO`(3UOH>HY>Yv zjDS@s+bKtV=C_G)C9GgfQ=C4Q9Q|Z8^L5_Nm}!Hu?D+Ybt-a~W5!$3OYjHfDCRt=S z7ISZm$3Tzi@?Agz#9|PLgSd9fj61`xeGJG5Hzum)%5_G*n-A|ntzHjXj@@0aTf$-z z98nn=e{-a~R(rLf`tQ|Xnp;y3C10*?3Fvf;7KQK5R998~ z<>(1#S~L6SW?Yv)EhqWw#5Mz~h;76S9ir>$&-!}4KT;il{wZZYvk)|9v);HVRP*kd zm#vKLy0@G9$#DjzrV|$z?$iiOOsqT|HlV+A7}my+5)yLgH3R|7Sz_K_IyQE8{br9B zU@%`9Fu6fE{il1{Lk^s&5|);hF(xq@F4}avjx8UAE~r7yKc+HpzYH*0BZMyY<#KgE z;X*5>p*k^pnd5 z{BvTA`PI=~QhJX}%8p0F>v`c6hy3C^Dd7x6_#(PByJsGc$X8Qn8&^r4fou zJe_acQ521Tj`_{u>*^IPDrD)e7y-2FUO#$V9A4vjlDiI35s&a6>IwP2iPYoyCME4% z@7GpHKbIg&nUawQWp=t?SlsiPoH2AV#=8Ro2GUhe>L9|x&u1ccTD!+s3ZCE^1a^kzbq4Pn z4a4(*L$A}WE^1xqGjgl(NUiO}s0}~3XjNBN_YOq@%f?eH0wCjqS~sNeiHXMTZ|NyQ zPE;Tg@?<|$OV7i9fVv|5m6ob7xuY1)53{|U7IGH9C6-T2JH5Zp@IU;N!IIqvR+hrR z8VY=2JOf3#_T0<{F~8v063JS1^Xke7x!|j{@wS~WTuT~pzxJtq)KYYDp%b;R>GHYj z;uK;1EcI|OQ?B>Za`0HsmEgJWbyS-p8#zz+x|4^8;OT#K@FKL+*+-Ljr|vuu-RS%SEGT>Fk#?0wd|Uk_(IZd2FAHFzS{XhTIA>bEsctsAl1g!#i6UsZv9bX#U$n3b1ta|ZZ&J;uFV6B)r#eB z=6zwp?T@eBer9YO{d`>SWq zVrKTMEL@#BOd6(t;q;)Pet6ADR+rZK-N!@nUL>mhf4vgc2Ym-i zYADOPO-W|PoEUKFi=e7N$b(_((Z-8o`=I9x?}KB^!+evd3#$IQx>1dYGBi-xhab~6ECnpVq#n} zy;6O?a;f)zzUin5MT;#lUJ(8Bf2Zebo(v4(hbSD_n~*?)IM1`@2JI60iYTgF2XP&? zSEGLf<+E0l?!DM=`1e+&nw(-oP(nxvkl_bu`goxs2%n5YWVDZOjjTmpPlY*V4z6I~ zjvVOV{o`VESX4trXh?r^sX15vY#3)#l-->?(B_#BEFN6}G=NFa3Hmw2sV{f4`e#T?Z{C-Zr@4z)%p>pcz zs`3#V@xx9jbdPf+#RZ%j;PF+<&~R{5>QMm?4{vn$9P}2OtR2GwKQD>~abVOMI)Lt@ z&)EK3p8yB`@3{}|Z#cWiBw!MQ8_up=10kn>KsWqP{gTcQ>2!JHhq*aE0wSW5uCH7? zfe(I|$j>yS&iUU?d>dO>Q2qG(W4GhxWC_`m@A>=XxZ zhkb?PJXb8c_Co3Jdjila@|BjVs(iK}6El|LlJw_725)48*Q)5|gcWWmRNC`#w^zl# zpt*`KP=v1w__c})TZ|2y9~DP@n{eK=ILD#V(1wub>z(6n&nbnwQHO{UJG4bPip6m< zO;`!1=AVnqm7cs{2Ae5`g@>C!wU{_sJGyBt>{V8)c z{#%7ZPna6DO)&!NoCDuaS(}X>W_)nqWHwOA>AZ*id5cZ`m|Ekz>^lw%wOLyR`C2(i zH%|Eomg|j@ZGs_E`y-}-nAq|)rJCsF{ictuKagOiV#IHfe$@ZOh_4d;_C0{R<|Fmg z;d(pQ;pTiHd&#)I(wKe>;s@jQFmGjVOB*`;4m(%8`!LTu6L*wFUlaKY6qf5h^~JZ9 z(WV?}AI=AHTSAnz-u4X+GFUGU_^oXQ+>9r?z^Jy4I^-pf$+6fUQ{JObo}#(-%0>eZ{k4LGQZ3h1WY z1dG(-shyRU6Cdx5#AN+eA9qy@u1-^Fm&UEDCG0VxP4mUJuP5`4=0$y7Ld%adsf~?i zwRO2JA|TqhvttKX`Nt_cx@?K-iMpd+H#mZc*eV{hjH%bfXV3-KzN`5?Oz^i~v%mNC zD;U!ID8h3l=34A5)44VEg=c;62g;F6#3dG$KZo{xRmbM3nII^;b72J8N(xd88GuH+ z=g|8R1khE-J7tvs-;lrKz(zEPk6OFZjqs}UJmC7ifM+wmp@S zHhAF2{KjGD@qld?N%Urf(9TmTbYSiaO^~)lfyW4!az7h0&l(4^D-&DA=b+_J^RuDa z+dUSC9SIpKyVse9;unfd=~y{nH&Ki^NqIx~dHc7U03|JJ{+DMX{vinqP#rRQgdA;q z;gj*?(e!Giq10hh&u2xR_gu=Ur$>K4;n&|0L&?_EF8xDDVGz4Oy2xdZh3cCt9Aj(h z9Ga9{z3942ydi7jjtre}j?Zq!B0)Ktu_?y=($4tgWT7IFKzQ?c1E8)!tsjNjMNzY?>e=o+YWyk$Ld^ z@urf=Wh!%HTvStxk(Vm*o+?<^p+)u^gGr(<*=c+ByL#aHr+#6UFF*2KB*Aw{t-Ik9 zt}u~LLXaCtZO101`p^BteSQ6x zbgO^EBR~Qc^kR-~yIE*s$~X_c)YfKs5jo8K91A%TbI8iI_p};>`0X{f-LELIEcGD{ zy!1X2y#axvF>dIG!}Qr<3HbyqMBhcDEHiT}J`;fCZ1FsQ^(YVj@dlGqU4|At zCBiNNij>EY`?9RTZy0Kl6jlqBVCQc7 zQnj=Mx2s(@b>81uJ`anckSo*%o<&wpwu0IMVLSbEVRjU_XqZag?_W=6q**~uawqNkz%x9f2F*V!Qu|h+AH;SUHrv7W~ z;s~5U&J#W9*IPi7Jq)<@-QhA^0V{A?R@PW)njqQSoYGRf`k4VhdyqX}Xat44$2Bl2 zi?tzg?-?Uc=PhsxSo#?m9k7?bP-{jB!swu#48DvIEyYLxBT~0JmL8_0q4IX4G%*F! zN4MN?I5r=qS8pcq8I35ZQg0XpI<^j}P1kzTf261`fU32YpZ;PsWu;Gjd>+YS?}Y!2 zEiISs8AUWL0$7jV;E4%%%XO{KOMV4-b z36w=hExyzmg~^?=O?`OL37Rh#i_Yl>X`d)^HDte+K;1`Y2vvLN~1P) z4GUE2Ga28C8&V>L99A^V5v=V-MrS8fpio}NnRMe%aSZv|Y?`d}z8~xO>#H6Mtxkyb zuh&PC;)^*g4spq;5D0ACd*xi1plqUd#y1A{_^76pCXl4_$?K)=4;A}YK1NECxcl3F zczDSDed{NQr&aWuH!6VR;aKlG7}{lnF?+06cg$&b;h1l^O7?H*0f+P%Wr{DElF|?7 zx=z@g8urAZ0ql6j`0s`Lm_!mGI#L|Nm=t&KJ@pm$^4(l=qs2sp88JaONj9}`oWQxI zQaMlyfoE!aYikAE(g4&BH(EwHPS|A~mFQ~-aB@@!K0Xwa^Hjx{kDXNY!{f^2cik-^ zHT;}e{RS^n2EkGa_s1eY^Fge`D=;&sKrF;lKEp-z(n9OBHV8a?^{zFt{C>q`)c)1p z{2d|1Gb0@i{{(%N!?&9g*|KNNtmOvbB6Z;xD!wc!-o&C7f*)mN^VLjm{-TU-y%eci zQ!F4JW(@qtTm6ODd8H9K%HfvRz@N@l$Pc3s3NwBEBG0B{$&>V@HZ9}SWu5?ov(IL| z?Lnh_2L@Xt@~7G05s7eZ+{r@iAkqP0|jqYfJ-nF9i}jw(hbi8b@mku&p(om4?ZnX9~O(`C#j zK&+=g+~h@Ha3r4zS$Md^xkRUppv#)$=M&=+=`DKqJ zBV9QYpOO;ZjT`YtRP_KG3k#w~zjN&M!vM5G3(=z@G&VLC6c*-^DQ=;$5yBTyI(eep z+|kL`W4t~kOn~sE6)+$sqK~bS(mEg|qRZqXDa)fHYHpv0Q(?y~NB5f|%6!;z$(gi? zy^|y`psZ#vlL)|(drz9SZYfVH4JnzRZIV!ee^koOSJ=Zvgs(G*9NAn0VHObXg+igd z{rz3L=MY2d-s%X0if*i(7bjihKFFRlpZd)m>tXD)9V&ZHe?2$EN`Z*SY7KMTJBVja3XZr`Sy zEq4dOjNKtW=B}%@&c)x5Q)bL*9ZhY+2w5Hh1v`GSBu--`4JR(nefE8&=UIV9(gK|{m+8v{pIck3G) zCy#BH?QnXO>PZ|KBXP9YjAh-*W?Hn-0qfmY2y}LdaWc)HPO7(cFgH%!eOfT*C2 zx?6TcdgadTC+!@YH>}`V9r!sO%bYvYQ8O+t1n5Qd^4g~Ax~FDzs*jNhnqaM zgQ1`odK>T}oI!(s+?&_Zpdmm${nMJeU{jmYWv}Juc1?fsH=debj;S8j=CKrMdP*z% zB(1v=BhNC>!u0-iZH=r(g_H^zX6CySMioa}($L}?WQ}de_2JnD{DRJfjSr*XZ+u1Qe06 z!4S`<0xtv)Gk}q-TVA%2`=!+y0$Q_Cq>M?BEck^6&m0c_qw#H0BJ5)FUVDiGy%zFd zGNF~VU(T#hvDWsN(a&iPT3t7Gno1H0DJAAwTlk!xlF^FT;(?qM_&K8PuxlcKv{ijz zP(M*?7e1xl8SRvabM{~YEtQdcS#hcbNo#}B*srjtu-bpu3J(v)Ij;DIBpTaROjRfB6pzYb zh#Di57}P_jg5`bAl$|1`C~X62&djc@qodVat?ibZD1-7Bl3~v~b3PyyezNQhzztD| zE@dH|$qF^4T6xQeNah>sKt-@^wVvBjUCog@L#o7;G0?ZaEZg`{Hc1^wrecTImr9s1 zdn#9ZqcdrM@53kT;D891J^w|!qOj;1fi&bf!`meMBW!bJ_MQyG-a`DqZihpeq>e*U z=?cNo_qNmyzu8B3@b#SsJe5YWKfsAUcGs<|E(byPJ9l^FD%85xcI1-ot|UC-YD%}A zq#}D_lyzN*S{=@n0=P0Otlx{>XxR^0CVpStBVR81aUuvr(Q}wdk8NuNEiHzM9S;jf z#@zKYqIaqc0!3evnuLVU=R6y?>ECFTPWDy@%N8=S+B5AFds^%^M=T}4quQJ+V|tiK z&@X|pk+zunC$9?{m=eik>b&hq%{ilG7HG$ z%F4=H=RN^96WJ%%BY{-$ef+W{Q82({c*2#v6MU(u+3`|C;z=vl1G{fP>j5_Hr+Dtz z{JaW4%Ygjw3ljQ6lO?X ziix~Xp_bvd!c>~=_aQ-l%FyR;k>&C&Eq@6sW|ruew>=byb!5r}@bD&{%z3a7PIm0w zZF~}yfw8n9VS_Z(KNTt8M&#W@a1)@GTJk5iTZ`xD-=fO&Mly0&a-(yr8MwVpSiad3 zvgoj_(|&(3M+Uz2ikm1{5x~Ik7lWgEI}27ty3>F7D{`lCsyXttOS*pYwe*Ua0T9xaY5b^ZpWC)HN^O`)afGEc^9 z&QBaP13A28F`*Yo3iTK=2x?Zyc3+Vc{VD(Tv(@USYHj#3oB7%7D@&E+g~&%By<`kj zq<BTlPRTQI)DKfY%3g zYFbD9HV;>%Dj}NaqnP$kRg7+~g5tZO@O94sf764KPk6!azFO+< zdzPD;97}CgG5NB+X%;hUTdu1uA^B5OpDnRozvjp~kL?e$XHTet3RjCS_=Q7AG%mc! zOEs$K65e-OJ}2v$;cI(GgVSNjAD5c+rF)+V2S*DP;q3&}+1uZ%)#;xM*ta0KVd*2C@_N1|?#xa-HK0^<19@!ETComsTzFs=BZ4vS( zYYh-0DnyQ?yYLi@@B8&VQ;dY7macgpe5`aJ7;T-B1a{AD+zJW`ei>3r`%JO5>DJk4 zzlG3?h@^7)tzv-0G?1}+hlVzC!>H0+{Go*>O)W4i3*Kv4LgZ(KBdyXo^(ZnGkR;0l zvghM`BRRAUw7^}61x7x-!>QWZ$#9IK@{D(PlDL;aVFeiod-eypZy(uH(2G97=@U`T zPFOGphDljlTZf!WQnmgdc_6=_qJk8MY+i}x;Yy96@`cELSUv=rWP~24qHHaa4MW_! z^%?{Mh{VMUW;C}yqY2h|P(C`FL>AY090Hk-Ui>YNT&~jriG03o16BL&5T{tyELWlG zt+n+FC*H00!MitYp>;)QV~0#D=kaf6Dpww!W(_Fs#%-lBLJ`GYmfOKw+s z9~CCM$k+^9cI6=xX{a&bbe3p8k<`b|j1ME^pgyT|+As7UpDz!iRlL3nectk?&bScm zLdNEI^dYZ2T^$djZA99m;~IB+IrT$0uB$Hifx-%xTITMgDZc4p_5F%rQH@!+=29ai zK5{*&GJoUFqkK_f@XaGNL&0n3hYk%HZf@)S*SLtRS9h<9rIX$pRK}%fL1ZDMc_W`V zRMrzJ3pe&uFx@ibN_g^gY`KfpV-rN4g=njp_qf&efVV>esm4(uPCjk86=G*BATpur zeBMQsw(A)mV+`@whBl=|jZe5_tY^%UaHIwWLGz35{~B8=%i2SKPrH#+49i-Lna30s z_rS+zYQ**~JBQ2nL+FF$9Jb_7d!pT(LhL>LD96^xu=@^W3ddfyKCrXAGVn8g{m18T zz$~9G7p|7{*7d7fY33~SENjJML;8BOGIxq)=*YPyS~1DzgDOG z6m$oy$BD&7H3bDEXdxc(JAzLjup3MT*SQ0`Jqi{D4J#{{($xW+Xc%13k9}Hs;y+id zCnw$;yER_BIbO3TjiXQY^@Xd8sYO4+?atye484IoJd4g5v)lGMN1A)MVVL!l2)Z9s zez$4&Lr2GqgC%b*ai|#oWz2m5ax^8)W-Ins%^K1j7E0*f?S?mG+Y3#R39p1!n*883 zeAy5F4HP&uNc8r}hnEZ7_yPh67>kOh?2u7V`bI`J0YU`$D>#S-dPTj?#M)$YN%EIh zDY`mR+)tg!0Z#$2esjibdded~Vt4mk+sH`G&Tc2=R+T^jtd^q1Pf$n1Pccod`(LxL zu&jWFg5RdxD;~|v7`8c`#bA*OX{xDd!!S@N^LL@tFs`K3`HQ($B53<+kCb6+Y?k|&(!V}0^nta9XoyE>9PM~3KJ-B8lykxGbK*)Qe|z_~ z-_;)-Ouepi+BnQAN$b2mlI?5K0pX|$C-cuSR6BCh-QA&@-P;tQ?HID$Ca5l>N`pD+ zHv^e7jH`@#$pdVwmwha7*m#l}!cJqm?WU@)c8he>3$+0q3L%2dCqLNw#@F=bY}=_G zb>?~LWG&C~qB?UxHnwt6w`JUmwts-p5~4ws%gIp?Ct;s*Ah*F zm+h6?iLak}g)^)t%!ewQT$q4IyzTqyVO8*_i`#od1o*hPH~=M36k@xH{*Su_Xu*KV z2y8BAH-8R4C}9j~o<#a3!7Iy}P19x_{%Wuz>$k+ugN5a2VciQy?>o_~D3pv>AN{MO z@6W;OSUaXgh3d8+zD5n2VFwTRNFBSiJQmycUWSgPx)KpAA33@r4{wq1RxXt-33S&k zZ(A$LV8ppsfYiN)k3z|WBy z!|@@SR$uX+3DX}ZC~lVglk3a|ZJ8VC_1l4u)m{pvGl?kllzp8($&2TYkhv4leK@5! z>`dBN+tY*RkVCvrq8GlDEQxIWM2pc-G@}alt5z%kj47(JR03`AeX%_Pr>{wA$j?_T;8kr=qMJ|LOBTs5y?Of&%6Vp8WEKzr2XrE zB~k&L&mH6!@(FKK)zSrzOEmny0A!^rm`)>cUgj@TgX)Lwv3x}^qvjSDhYt>_0?7wl z@#t4wf#DuFe*xekHY+R2xU#6Bfdt5$-;J7q+wO_@2Cj}SuC8l`%shF3yZ|T@U%q?+ zc#J1e5x~Z@U%ph7j5cWpnLn@|1egzcc6N*k-2re}R74$80_SAGw{M`0FfLZSc9l;4 z+Ci6Ba4AxhC*<4mBf?rOdXw>N1SfqwQu`G~oyoQEJq#;8R z-_p@X$f(k>Q(FLgSsI&F<#ql@U(tS}6dlXdmBanj?JbVB>kplwBF!SEMjzZot_MQ@ zRep||f55ZX`$4)lAi@M6AV#dLm<%eC+S(-Lc^cYSSy+G*Ga{xjf4MLb%BWjLs2m4r z2@Z2boqs0?j){4}1pKJzS(8IIj=aPHBm}6W&_Wm0ho#l?>g7Y2C2wqUG7OMy>`Tka zs`NMjO#O%br@r!h9a{vn`u0YX*YXGojA$0$OTJ^q{uHDhymkr@7|OssT@Xk}_~p01 z{0s_@!1L#K6!k=)GJ+lsqAIe4aW*v&FI1CWpp+yF)yIe6vRR#tji#^VSH3NX;Qlg5 z$`lq>iLO}7{cSQmM)A9OLFnlEhF+-wx{Pr*x0XbcV9%7Gj6MD9sLQ38Pf*I)b+X+G zmIzxj`RVsF(GJ#UQ)}(*CCjmKa<9UqoD$N_=G6}O zAt}liI_DSHU>Z*Td=fFU{^wdSAXrgF$|o4evbj6S5FZiahu#_{es_|&6j?0SfIVw? z+v57%@03!@8?lG0C5+yNt+_3@%>7&uH=@U!NuhNDE=pO>*%4IrWB$~>hw=fX(SoAh zr>+f~pSa!p_KZZbf~j6C{<2=RnOzd+4N#8^pi-Os`=?R-LYW~V-g&b9V-QVrh5gw* zee~ehsu$?0exbb<|N4Hlq2~8EyN&cLYvpG*IzhQT1`BXSWVheGGg>>mM)T|%y(0zR zjY$TkBK~uEE&H_v%=aB-?k%y;L66lsx50A$F8Vz?NmOvwl^=D*EzdqiSMR;>O$tqr zL5Y0+bk66_Qz1NUmycQL4#r$Bm?dnqR^%XGrL~i8(srWOvhlY`Nx=pW2(HZ@`?5H} zv5_c75v=Mx7M8ildI{X5TrQ@T@Is=4r(3SMEg!;`pDV^s$A(v}3NpzhO-)Z%18fZ_ zLdIOPA@pnXNTeWWHz(2yUINS5M3JuVK4Kpg^ z9eYy*agRT)9K#vcKda62Jk>bq~G>_LchfN%+JlSaB>DTzdFPIw5mA_9#84m*}nqc zJUE^E`ud7>O3}2M3=9m8uKfnHB%aEvwO>x8h`1uhF+|deDgt-*6VPj7VxoIUXjv8b ziVP}<5}||wmbLX|nYP%0NfRayEYHF&%`%KX^k)R&Y1+7lI|{+E<)b-xa0a9kiqPaK zD>I&lrYn^jM{KpmUcAs)+uc`?mM@v1yG63pf@75iiGcZuPhF-AhtH_3S5_Pi0v=tV zl9w+MMDLYIY*5>+NQ}ub@!OBAZWs%-NiPD%w%uxLYa}5Y48EA;T~_ckqr7zZHQecD$sGkea48Ms2Su2e&u&y=o6f5$`2Y;5bp&W@+Vpt!2jknHz;FbZ_ln}sI$GJ2oBIG`?+rpgf&+>e*6i#o0}~S@L4~PdS~^Y>PUO%# zyy@|Z;dk~unZ&%w3ZRyf$$5~meoexM(_}k7zldov6)7nbG?fY@eW?r&pZsjMubV}{ zCjps0G;cfOu|MBS%vagOlO33TvtP?Ex6N#OZIfC?qr7LKi05|P$J@QVwti%S7SjNUwU>WDty2P^qFni#r|Lk9Y&oVgVNQj)e`f#}C{gnj2 z430B4?gpUJaRE0{%c1|F#qGsD=&t}nDIEmk%Uh?MW%w7mqiix4pK_9LbkG^1g-9x( zx$;EMdgCHw^C1@~np?GVxIi3FYP~y6-je3g_FMco%dCfS>>{3U>-}<-Sa?fL3{v z6Yayn5q3E6VW?*a^We4V=Z^uSE+F(hWlVL65)%_G`oSComUn`G;WOgn@qY$@h8Nfx zaOKn8v?x&tv8m8OGpS5Wgm%{XTNWuXvxH@KzPu`qfXHWKk8L0-%ciG9%-9w^u1Ip! zu<;NjjRsyl$6<_1DuwGF%TynYmTVC48 z0e#ASBmEK`VEs`Xr$Oopj-h%El(d=MLhuw`TgwloHdsu1{!DPL_%{HMH?9;aKmBzi zVa-pbcvd!M18xhzdBS5n03OppYpg8h?)j5fiY<}t@BK~_&G>mRidq}OJ^%BY5O{`J z^+S8#m^*j`briPv&p}hjaS>gnG;hz*7a}9CZf=xQq^SMPIurg`Zn3njR(`Jg-uH9W zLqrRMw};z!A2{W}6*?v{F$AnXkAFntcl_V|?SCxiDWe^0u8xrxHi+-Ln2+H1O~0=c^1VfcBd|vpZ(PU#z2rK-g@FFocKxjD?pV z2fyP`#-&M`0C&+bp(iJb@%2$nSB@fuXr-ze(uR}=w`KHzvUFT`sDKk-`!zPEmY0{u zO5h|y&nqbrME^IY^*<6c$=74!+}sw0Fo|GT{O?>@`Dn$04CDN_;AG%1s0|156X+rN z!tw?9p+Wc18rnasS7lQ(1e~`9pJi%hr4?UFDc1A@Mf(x6 zDp)`2+^}JEuxh<4Q}s=JpO%E7MuE$W?3{^Hp3t0^DwE0aR$KJ6a`BM`w2sJ)wo`$VvX?%f@MxUvdkT-;&TST7)1s*444tN95uB<&tM$iZr6Ds_^V;#lR-F z)c9xQ{YNE$4V5rWG{dke*n_GaLgElkMT89h>UTqMyB+11Uo<>YK8!p!Y=uk0g_7;~ zwEgm`WV_nJC^eFYmzChv^ z<&#K`S~>lrwadX^H6op>Ni&dtQp}ogC868IMNL=dEcsDegmz4epI1Ofa@(HPgjp&x!BBW1}!U-^uA=azS%L>_xc9FKuzb_v-MmW8-J zsTy+|5w1pN_;~rRl*(YZt6c^iWpHu^soLO{*Yb;L+FL?TYMez9NM87pV2YkSGRQkK zAP7%3>EZ+n!{1%Xw-2fK*5gMS^!+JbTESLIiL^W6Q+xSc3XE26e@61PZItv|c)PFzSj_!745*QM`1Xfs^u?#F}ZpwMzVFh9np4e7<+uwr% zx4u3wxVo-%z=IVmPx_EnYp5c9#$D{(bH(o=)k@PlI&O8C)t7xfUpC*4d)o#j@wKYH zNl=(RW5{~E;Hie<_ogKU&u^1E!bOfn_ew62m2x3MR1dSm~^ zxh&O^UL4+xK?opPIwnN0!M&$p>D;Z&V^K=n`KbTyd+NAV9a$6mX}je`)&+8D z26!Fo#ojH>bYC4Bd~ct2i7z>a zu2=_O{yqOVz9v(ln>%9?_Q5yZjGycppsxD>P*+J!jWXXJ+>~|8Hsq*pMuT0n&`jUo zmR)6E5zZ|?pdCAn&`izbUQY+E-QHQ_SPjbG_rjJA+T?OjbPoNxwtU+wS3kcvC$LI~ zgRg^j<}50{Zch(l;SGd{j`%xCeEwGwR^=2S_41CG%JmWVsuTw_ zD>OT9QPfr+qey-Gc7R|b;J3Zxdv)MY-?C_Kg#TUghUGxQm*r;Zl3U`;%(9YLrl=d# z!Hi#RaOJljL!h2}UT-WhypTowoTWgB_3Zo{bdD;iXvoo`8Uh3$T?~PD%^klKHh+4wd_wd9&1{vhTW&;y@@-^0|-W7RmqbPBuMlY{nl~n2p3d@FQ zWwDKkwPhW{miyHz?H5_n`XTFeIP>u`9MuX53bZsg61AEB&yS6kyXLesOiq;xf}9xk zt}PEb|Nr%z`Xfz5jC{9uz?7Z4s{N4U{%FTcdZa67{>g+UE1}gE!@X_q+S0400o~ z9v(!Xul#FCMO2h}xghxlj}J+fh;LNfUpf#TSDk5}CNuR_38Ln}=+RHM)Vs>~r1JXz zG4+*ES*~5Th)5#{NOvnJDcwjT2ug~ebhmT}2uPQdbcwV`cXzjll(cj=oW=Wo=R0Tr z*kg~emFMBUuUKoY8F#a?m|S)oo{4C4JJQt5SRHSA+^yFMA2-vVt^0>|uxQY43aWJ3 z7uB9iqlA^?CH#zcd^LNEZ+6(|)_f4%5F--18s}d6XbK#wt!@4jFCLAIh!6!+3rNfE zOXYD|s+-%%xfZ|6`M8JHpQ_Gz9hamW8HRdNQs-HQBEQbxT<Mg*HH$aq1g zS+f9#9ZOb$FuI6$c8f=kWy`YW37fa}-q~mU%q)qc^f3A>v}VKW?AaTP|M1~Yy{QrQ z)!)CTOYUnWuxHYkT>yM={Kv&eT~$%G5jvdP3>Yj@ZW#7WRalbpC*RLxCmLv7w!2kr z{CFoOgIJiI9dmhE_o$p4qr!Sl5oCD51W#@!2)B*x(vksi8>8snmun?FGbaE83cMai zC#OYhq^|CPuwNZ99Sox1s=k}FR0Cd5LYkN$;`Q`ZJ9BZJPwT?F>&r8E+WU}i5FHie zBc3jbF9{|V_A7nVtkwk-iC^Dz4faZ=zZ@E#0@H2Ub^d7mTYGv4HfPbUifCwPVE>7= zQJI$))MDFsaB)o8w6!;X;(TGj1IfqVzz0wfF7^tltI4`Cv!0r^_c4JJ{z3s$;dNM(9YTi1SAs_I-! zU-(O(_t?0dP92^&%6*Cs6Rw}0GocTP%e4y2%5<{r)DGti-i6RRz~0!}B7Z&bm6(0$ z;Pl?i8qV+{TKeA6a~d~yVag09omZZ78f-`XSoiLv_9eV6Ebyp`GOUcXbv5QJRa;SZ z(H9QQ0Xu*)cCsVsbbtT^lctW}?&t3`t!`#|o+x$aX~^q266;h(+ZT&S8Li_65eU3o zf5lgO^=e6N)@L}$f13Xz9Xfu$7xt>-HDY)@N_ZhkZFy=~P4ZIz?DK=OdKqs7xfuW6 zfSc#-Sd?wQ?Gy4>Pi&6*@?Zbiy~F?SM7eRpmdqoR&M20eX?$$wj8=0wAI-VmBqUe+ z_l>~$SEU6f&4iMFVvaZGzFA9y)U=J5sion^2h%@3=zcr+E7qe{N0}|>Hp9)&famk% zHyQe~IU3Cq-N9QW4;Ed zxBn??Z=vfOG9v5eJPP>hN3J6yBLF6sRaD@jB6Sc&caX?3{C>8$fk8OM5T(9sAQJG; zi=_r_ym-$tWLxRGeaRuGN@5Aoed&MlWiB|q<-<6#jFE@`jMo!s7 zzg526@6?j6`XU{9j=yzrdW|*7>CT!zZiXZ#nm-=qd?#S!g$AloY=25C$43!CKZ|l| zgM?qiY=3zi?HWpBW{W)WQTudU89TBZfM)R$>5SA*j#%66@~)KI!I^u3R{7&im&E=K zC@vVu!sQS!Qct;BS}E^EKk(egz`2_?p58bTl!jjXT}0@L&}=Yev0GQ5qPvWQSiHe`kRr_9c@4!E;cFqJgW@lKb{_4}%CvRJ3d5$xc z&1GK5i{%ePBFyl{5tnw|r|B&{N7aW2Ip%|Dqh^mtX_Qa4M4Eig4gj?QR|N=8=n6}& zWqZR?2XtSlhpIWs8LG^~-yeRC>PwsHWNj$(p;slooL9;jHhYaHsQgB&c>gk%uKO~SWmPyq3=Kz1;`tSZ6#sttU+|QO$k$sYs(gn z>{Fmm7NVJw+CtjV)r{S{xLa4Y#mB+PaXV||VMGb<^i|AhUAOaQu|Gc~4ol^2e(N;b zY@f(u-}!BtiIrJ@?%J2-?N8Kf6 z`c|_$=Y(=0u9897fL)2{1pGYwfdGGqEX1gkoKc?{ED;d)!+B2}o{5x`6E^(rQkV<_ zljD(z(ehODIl0w-)#LWR_FLp(jtBT!qONnGfOTW2Z@_&{^9cnoQh^~bxyyaPoFd~A zdnX&uEWw4W_h+`U;C*_usRf#Kb6x2oKFL)^VQ-HEqf5Ao&rTOnfzw&PIzxq3y^i_* z-Mfg?>q|m>!iU4Zesu*aGA3Hp`<1Q^M8|$bM}%vP-CpV*#G1e!XbW2I9Wvw6Hnq4d zAp|eev89sVtbV;qmanS(I!`*ALwRxm#Q;|UP1|ZOB4R1^Wrtb${%Goz&t;w9eG0)o zQ7;iv?t<0b1zHyEACPbOG>k%|IfVEjnV>^_k7g-b;)}x*>>--7ev64piItKzX5`Kfg_A(?vSiY%oHq6aOwD0*1WvOMx)Yg@&|KND z_bg@Z5)mAAoAtQucZc4qvFJ)s;fR7358?~W%7NMfvqR&-Wa*r76)h5>wkwmXpbThy z`{Uz!Z$m;sLFI;c2T)Asy=+VPU4<{3QTS9}$;;W%!0-}E^kYiiuAYazrd7_6kUaNp zIcS+SD}gEK&&_tO^qIR}QC~7Jh88n7zY#Q1 zs?Hw5h~5arJAWh<9SI;!Dl=73%2XE3e4?Pkgl&G$dDqp0j!vVc2YL|b1z~~em1wL% z)-c2m)9zqEh{^1%PESuy7lmQdyj|_tx_%=SCuj0#j`{k=*5b^`pZ?shqqI`Y@Lr;G z%x-Pupb^MPOZ(_?f&Ify(n88QTGC#Aql-o&e>g%ounb5QxNzXXWEV^tii(~>_aK;o z63{9J>ad3oAA*}mT`o#oaH`-j1_V}_Sl0K9dR;R^$j9=amxuo|o`Sz^d(l8ckqZiz zRaDHV&h`UKvz5M-P$pT(6N!w8k(9IJ7_@eI5UPdMb-6#;xG)^<9*=>AB@?9}=|YSE zg|^X32=V8rwxSug?@7<1Vc&3YjN}U0$JW(p!$bE>4UdY_gYq0^IC={{_kc*!+AhE8 zqEAV@z7Ew>;J8_<9((D{JawM2`g=Aa@uw`(crAaDkPJc~D737PG{;(tKwaSS7_nI?#hqt^CuDscJtnrf0t3Hq`Z@e$j$XB}B}BFF4qZ_)-6I#n3Ak%DRoLai z_cRGm{ZqsGNom#UmFN$r3_7_-R%EgcUZDjD61S;LzUIcBGy4R<;4$jtJH~2N(%iWt z4D{8x7b*iR?gPS~n3n%{9O@;687&110p!6_nax&}VCGHuC!bu)yiG0*D;0xK(e?DJ zNtOwVPTWG*gvRWQ-d;_eTJhk^M;wK?2e zkhZ}^RC=_m-X((_ReRUhH;LDlV=a%Rx2&T4mAZO>N-oW_XY?7;%fI}OCFbN`p4~OM zA6)Y! z7GlXpRdw&=klW_{#Eb_RrvVr&n_z@{7Qm^bWj0aP5vdd$t$H&Qdoj+fD-{CTQ2GdHs z97WsglEAt@WOWqS&vMN9bk#edeB*OoV*_rLW>g8C#;wuDS6cjOTK~HLb!)c% z+W-BvoU7Z#_o9^63CrSl74fDPW`D-6EMe=?Uf9NB|fU+|Tm%`k@YNe}~){}xyo$M?b5 z4CIt7TD+8nQmw^a2Xt`Tv`>|;nwXh=%PK?iZEoW9a!aYGaOBd$f-+lg$Sk|EnANNi z2kGUby}A;@gO1QFk7Z_ut2Jo@&$Hg|>cz<6D2wMGx`bJMwqGcnfnN$8qd+3cwi~PZ z^l$K-x_w<(gscF4$|}lbl$PQ(4hG0&u7H(w7Y7|ZJq(Oxl|nXPCr z>RY~!GbadpXgxnWauos?0@7vERC3u8`+;&qs*DeU(70YnkRfy#1J4qJbfS0}oEKr5 zZOflrw>zR{G+0E#OdI{MH_qM?=t#_PWdtcE{3G=* zRoLUaOPeb};nck$Vwk}7;vAN6e_2#iTFKxZ9+ZPb$!fuq8?-!(iBO2L^P138H;e0K z_`!2sT1m9h>l}DHHm(cqAqY96e$6KHLy?)Av$b(8K8R*!gEs3U^m6iYCiTCiJaw$v zgulOj3=9&eLRuifR=*=8lF+<#Dr9m4Yu&cdbsSv>$mqT5MQoL>ifq~kMKehPx&h-x zts6%i)>hAyuFi`8cy2sFYD16?BM0h7>T+*vRAhoTUte$^8w}?OpK4Rl)8B)~qp3Od z*)za!G(cwCw)LN?bDhrPo*uRY1;L9y2UNX%DQ_i}tSOBLlK?>j8tM-Lvd!P60nn~l z)xCcP!qoA6wf&y_>F$BPEY|@tGjITQ*n$WvffxP#;I0#y65FAhaz(n+xZ^RFA|wrK zoV%91UWYOUfg)uRYE!A)*ZxV9P^MF_et-@KUJ=9q`i?E(r(9l9vacPH3EPF3j>-Y| z0)J_hosI1yriLZAyQc_ieOc&>L@UG9ffu&B)5v3b+!V}}OCn%Tdhl&vriy;^HX-$pm%f}BlXG;UV zj+Sd%)wQ_IesJm=meupq$yp3ny1EAr7fiD5Yt0uW8X2Tc2p~s<-xSnp;O>BytjLoQ zuz(e0zdG<@s5PbjVrczC9hATb&X?*pov@G7Yx7BAc}y=ZIBXIB`?rys#25XW)0ntS zbMMT@U*32iWm!Mm9SI>+&9~h`D*ZKwht{JfaPnOCI3iKUkIopC+MaePgBK7O**yl1 zvCC2UB&?3VP3aQa4I^OxVUU#rdWn9^%Gr>ag?F6;Gr*>XK9$!c&wnZ=29Dh0&6xnT zoMnYAO?rMI=3CKVxd=#?Qzo z9&&Sa!t*wZrxd48)Jg9zmN>nadGxnuuRngYXYKp6AN!-g3b?SG2c6im)ptAaPD(bf z8tM3i!s$gCfpD`U0Hf4K5G%Mib}CaS&-3TC|T1& z?QoKcl{`dCfO&PAbGMr;t5!&PDFw0K@%;ZXmaePWFDcj*(6OSWTHypD!t{^)AW1hk zqw)Kz!kI?Pwodp^U3#xScUeewa_&Dmk`ju6gG1N%bu1-iJim$f$j->D{^)Nhl~ojf zz@%9hjIz>WFQaHMa{sj=ld>?})9EUL8C?%V#3gH9%)>PqgJ|#NiZ?I6kN+A->8y4W zKvOM6tHRqoIZp5IX&wH9|D}16dPwA>iBsCpciXoOnCSG^-eQOM&X6pcyWT!BS6j5Q z=olXQNadRb+Zq*#Oi^%){JR3O3XcWC9sX3elme$2EYTa%3y`iGcp=0Lf3$vwGrZNI ztsJIO+$qBQIlTvbjp+Qp2TQM&|j73sIq>{(g-AZ)oXF z|GL(!v%ZK_G?fH-Y`QiGo@#>1w#LQ}Wk@5<4-PH8*(75rPqbfZ#%YPkF z>=!x|5OlBU=n4apyzUNW&!1G6Q?n+&5efjG+=|AAXy(w+&l%6B4%bnA5W_nql&rC# zZ^bdq&AnX95s@e!-K!q-{0gN@!)|u*Ppd5w;T!AJg&1|+MJKOQynMBycjG+|d6N`_ zg3) z*Pb5eroNvEHP@&&qxV%~o;xqz*==x}lhA(!ilp(|LQueJuFYJ)aX(jB(y34;S@hxlrVr(QTf<*4i84!J2ipD7@Zo| z8}7N!N#VJ6cPy!B`E)P(Pt}V51Em!co3rO?YFV#R%rdyfyAF(h?;+E9+8EO}icIgXt`~roI2n%?E;3#mn?5*XZ!HXBK5q~jPD?f6mvs?FyPx%?e zm*8YqurLhz8m+qIt(rat~mPWFB3+ipL;JQm4>^<>1)&KT_*>JDLFR8frKc>pon<7oA zDc77kjW@#Jrv#=$oxC=?IE97kXHC8*uawm&JVwwEy(=8sN{yie92VI{@Jr+t6Gv44 zJ$=@lBhp_fazKo<^(&ANbCE2`39@=SR!i#RaDdLO+%*S@Ug~N5ug4#Xgf21V5s`g)7S`fGE zJn#mED-(>bkICjP&%M$n*H4e|lt#v9`jhe=-zO7ngBSV3U{8EPa*re+E#NIMze%}4 zCyT03g#z%2HH>6rGLFW#ilZYF1`gin+%ED0jRwqs(eAILY6k%#!tK9FtpNoa0tZSl zG2xBL!ewUN3*?hO9)z7rNd_=05(m#WKuKH zpvFw!-hO!=$Os14?#sct2x-TCn(o4^kIP9K=Ll6h!A}HO^%I3}K-bCcXNS`MDLZ>)b93_#!$LJ?kGofO4fcdC)zv2DBoz&p=(jep ze{YuCEhlSB<22o7%QXG zlL3l3`ZvuI&;{-PGcSH6WXw&xZdz991OvzinRRoRgByufHKslk{;Nk2#S9uWJk;&^ zx`BDXz5&FFij3{3->D9O)-f&;A9qwv9?Th8VoHr{rwc3Die2x+!dyu(zLAoXGaHLI z@fQ6E6H0=o+MkC_lGv_69tC31KUOF4i&o)on7OGjG2N^;J3N=GlQ+Ilk=<@^TiEu_ zhqRO{<&#c7ET{9~H=g})l3WMh_Vm)Ti1iA?wf;Udav_3$Wht1UMFPqPB+Mh#>xhV9 zL-#m4JB#DG`;J)u4^?zzO2@y4y^mN~^-ofGPIm)@n~H?o&aP5Z^o%6$1w-Ojedb+= zoQ88RqM#tnFHa@?oz0M(^84MZgK(vr1lF62Rb?i8_Z55HG-ypzFE(?gN>8u=ca(wA zG624**J~F^{Hm?DSq|!zjU50yLvOaS)J?LYHkb}g%Q*(t$3EYaIcY^j?gN4+i=3(F zNGFXuI-ryoGW|g7LE2ct?)rfD+=H8}Z|e&!>HY>hEVf|s+E@lgeNx-knX9HHY%76 zBL)%9NjI%Z>$7qG(j44;b92{29NAP-Rin1(Wywmkf#Ms5H&@iSoW>DC`s5U;l#P>k zNdd8#dDb@sM{d_a^!4$7G&f|rikAMED@Cw-5Ra<6M-&C4urn+J^Aw-e1^c{>%VEWV z>l~>^%@ar7mHMi%{IuSR%OB}AKPS4FZ)W4YxWdG?O>~lQVM)DX1v!GbfVC5vUKNcN z+d8XG>z+0{mOmQL`6;YI7)isd>n_vJ3G)RPP$zO{@uJ6NtFTfu{-qQI9LT(h`pgvg z`p>B?9lNOJ0Os>XN_*D_RP*-yzQ|wL*N&5sQwMo)$;I*8<0U40e=0!F0laKBBIs%K z4`GfdJy0J5&dZ=siR}LX)1)(ZWm=z5fADw8echogg)f<;$cXIwo^GVo#v%SCfZD(| zk3jbPFVpz)Krfyv%8>XdVli5)kYXx;EYyTLq?0z5tv$1tJeKj#iHzlQnywCAJagw& z4Fmj)x;K&>xFJ#>mA+kRh_hjn5(Y#)nK%;7I#}qS`dVVZvWW9Y``Dnvx~_p?V}>Gs z&$M86qGVPneF7t0&?n%=KXC3nhqF8CTDK_Al7-pRM1MqL53xIUrNeMUkrK(j$c^RZ zp7QgvD>ApgRt{qjx~qvvGGFHI9v!92DvG_-okKNV zVDr3|vOHReGAwu+AFg8h*GsL;XA@D9xL_(ojlHCbNsf%)?u#a;@ypk*W!_%-y;BrU z#ER>EAqReJ$ziLNb)t4ExG?p>CnU6mF+=UireQ}&5WCAsOU8yQPT|Y_gZYz|8^27K zp)>g|cZZhc95Y3GP;9hg5dJvxiv!neZ4;BU{Muk|Z!wOMQ5Vkx0$difFR}QXFvA4g zg965^U&r%taGX64FrZ6(%xwI=bo$QP`qpyals)7f2zM9?W$iz}iBNv*tA;gw{Onbf z@q+jPRc%=L`>}lQlIZ%<(&)o72jTsN0EE-N)dtb`Vs{(^eE;#;S2>??cwAk5As~FE zs@c6=@0RdNRT5;6td?%XAgYizXC}4Q8eAVWHmUusC@zi&fiugwA~*Mxqq=(ffJMPQ ziRv1%UK+ zxyBg2*En~@+HhWOZL`r&3N|=m#ghje4R`Sg32f6BaJyb=Y4vRgII>r|-iL?mjY@i% zPSu^J`sjztrMumM=05I`;LkFgdMQ~{ly`80-HzdAXN3_Z(%;0$-Gi9}z>F4-q<;7A z0osrr;Hx5WVuaAG+*(? z+6Wro&HE_EgDJF(i~&2>la;6IgPzU6BV=5fAjgiI3;#3TuivTogNX+voQR625mi#| zG2y>K$bYA3G2fnAP07is`mD)mH1uc0ryZAW9KOpIIk|<$*~3GAa=92>-`QJY6PgiB zV}b#|DLL*Sb@Av_jAeb>vXy9cci!Ly7CgZR`TbJh2USy319P0JB&ZBXwL<;vS2s*7 zELOG!ti#=lF%Zws4qiSaq}8nnS+YrEd6K<7_UO9Kg|o1}{(FFzg4Fw?yoZ;Ud%8gC zxpnVs{-{EXiMBzC?t)=cUKqMvC`1(E`ug!hv^x(V>U-QOc-@oj8v`}HF>Me>bprB= z`actQHmAr?{&YP>@2j^kQ4i1hmS^A#e__6t2)BDQIaT8gE*Aa1X ztzk26@ozO{?d&)#Ew>Py>nVcJF6IaVxTc|FBrs10hug)BeBX$y;XRl_#vN zt1Aykn@XaDb#GB;dKczaw`lsxU_Jw*07|)B`)#=l_LeRHs79D|D&|T`~ z7Ut7}c<4&5m}B1chFhbNNtR5+Hj342594+moGNrJFT6h#@T=U7b#)-sxV7ekMnK)u z#qs9r;!}?BVXXoYbCPrCzuBA8oKF(z@w%@>h21Ll<&+$|$0L zVJ@(?wL!~C>+3RZ@4S8X9}smoudM(LbU_R1RmzXwiSfjpjfX(xV|PU20<{qSR9^qpCFKk-w01ig>UEB(Q% zulLa+-!!l#wghpJDe}lWuo@+9J^K3F$M3bF!jQfvboodpy0~ zx%jRu)w$$1)>>@CAErr)JcT)x?D{h~?AZnj6k3U>J|Cw|Y1!Qv@+mI~aOcYe*yvY( z{=2#fM5;=HfngEN{N5ehj(z&io{?>RD()0K_c+x@re6EbZHT6GMd|$f7_u(UzQ&d0 zv50N(rHFw#|Ip*0Y%`S2?+@mfFJCq&7(7S+TkvceYD{I%pl_GAm1W>_B8@oYUBx) zzThyB66EysXdvjSYQ}2Tc@Ya>^8_AionIWSP|?yrFOsrNfs0n6-Osj#=lit-sWS?Xj1)G5#;3@!Vuy=N!;3aH*@lB zNrXY9AZg|UvuOHlJt4y2q{WS(=S}V6HTNfl9^yXx8Un^mSpg%6UZoBWLgmxG6#@TVFQ`=z6E`C4ydmf1?D?lhl^FIKKJa-!#^9O)d1vSf0q`Tg#k9&swx9}m|anMF%ycPo7U`!ZcI(0ilqK5FF- zZVbZpK>FN%>fj~mvm1TG<05)ql4&;2vF4`m=%FtL`VF;~eMeDrC64`Av?+AN#Os2M z%aR2Z@7Bgn{v15j`CSp3Z)vH~N3iX2Qd#>n+Yynh#wY95k0RL#L85wS>LC6-=o^ZKAzOcfq7gxPtp6yZ6R$-b4GUR z$Z4zUgigZeq8(?;Cs!mD!kwPU+uGV9gi;#Aum0m_b$qJg+@ONk6PYe`|1=)2Smsp{>F2_1h?FL(gx@* zDz8*rppE?oMJ8>hB7D%tDGP>2><!B>J z$ggS?Cuu@idF!U+gcpi$I4QL&KDm8+(TBzlGa{HB`gOls^1j%~tjr-S?N(3>YYGtF z^+YaIBYDcjR-1>OE$1hd$-u)H@S<|2#m_&OC=_|3xZW0%*#5?22Npmo+&S%iU-^Q+ zrL#SN*~&jY)inoKxGt*Qm*oy+8Bv!+&geeVIM*{he=zpgaeKOR>bKUHM~}v;Wnf(%HTF2Ax%NK)L;P=>;7h;umf6^(IE}o>8<)DNJ$MXwhD86yQ#CmAs1MG=* zi-&X1aHyV$;MMj>PJRsUm-hIDXckoZf$13uvNm2XpbH0(S=&|-r%V0hN$Blnu{t6P zBNq|#)S-CvsGCj$7diS2<5l3Yg6&yb(gFZB>K~ zxKn#FbNeAHeMNdJAwdr~wtcaMn=n|d==mP8GmxVo-f`Ue?MEjIY4Yr=Kzq74*)g7} z`Jf*boY4i5!MF81LP7#DkP3kCjEM*o1StTFL1Legl|=+&K()+oFrkDxAu2iwhGPIf z5+cvTdGex&$-R^XQUG*$?Uq;*Il1)0J@r_xEgN{)m6RQ ziQUB(9u~FLoCC8?G0Y*|J@;F8Ua3CpV{QQYgp8a*n;!cCgvR**v?siKeUZRjh@aC+ ze5if7#2C+)Nt0&*#U0pF(**rRx*`dcy1gj4t^N@G+zicEkBoQ+uK+82`Ys{}1>(TM zHsxyi049p<9atML&A9;jo+y5cM;0D}X;u3yo?;;~T<|#**0HQ_g0u?L7xeBzO9M;; z=*O@lqoezCM9$cMa&WG%ZDyrWrC#i~>5f%rj+^D?=eKS-D*ZYoOPTcb^~GEH0Bsu- zhK$di`F$C~M@A_utI){?g@Rgs%p0qQz_vEJJ_g#rK!OpK(OrC(?|dF4P-9P7q-Rwz z<;|)-e)!_Wi(3Q9Tct6bn}>&x)69p-czqZx2%dKZxGc06HqRyb9e^{&<#xCi4JW5B zK-BhUaly<=pYxG8h5YJ`*uVNI~P!Z3oRW zYtu^PbG?GKG3B*O1!ryb>RYGCsHDERl(`U<+@-fpbAdAp^GZrr34rf$!bXQ`A9jWP z?(X}bU<_GB1%tf|zbraNh_*UCm8MKDtoN;`;9eO>@J+*!QIKh~;6CV*7RKZl8=KH` z;?-dDq5#TXf@oDJ<4+pDL3HV;#&J~1iB7#OO3RY1A8s-|9Cp2(tBB~L9jq5NynoPd9o(_3`Q1Mk&Ts0SJdR50>U zPu+p&6GS*0ES1x&?=(+Z_!ae&6)(oQ2DcW2#7CWcW1A}1)^Vr8M8#0cXH-_k zfwAaQojMTfPsj{B%~t6K?Kmiwo1b;!X#NI=I(>awXr(hUXaL!*a^9mcHEn*)3Y0_` z91TrP1+w(QpcqUTKv@kWMIaKuPW%!RGdw;H+yq8g<6uSr_#c40#^7;F>+-KtBpQrS zIwK08P`?$s!8|)s+Y;`ovhwoVBpIm70N2bfRENmmThHpa-gdCH0G1vDD{FYE@nBSZ zyo{t|yA0*(U~0Hx&f^zuzlH%-SRgVus(^2i5;ArK=uHUK;YsLnVd{M zTJ>MMn7u*oVY-eVaVA{)BPKiHB~fmZDxC(lg`dpJYBG-)qXZ|#2^wSgYhzs{3e|IJ zxa$bczGc+P==`DBi==5mUdKa}M)(AgTB0>(6jW z%Tw*QR4#K(}dmSuBvBevnx#D%?ta9Sk3;3f92{$(wu0!I3&badW6 z6g_Z(ws1Xn-xhKHyeuE5kQZj+ye4w8yR^cOe!y~i$>Eq29{gsucc=30eDK_F`R)RT z`@$|L>)kt-LsGsv2_o9NrR7uM;ve;beNMi7*Nizhu{BJ^q`2&Tbp7)RQQV*S&Te3H zC|micw4)Wxs&FHE@_DkU?B?Oo!B~QH^_Ulq`a7J;xj>MyyxnWGbvvt^v)U_S_WV86 zmV-ShDvlVgz&u~FFFv+2-=C7(w0dHn-jK3$GmqlFF+KN5ccz?B4~El)b2g zyf&eC(m7vtyB;Hze-#U8irXGLm^pcleecFmZ@R(~<~sBSe=puqoD<{8Of(V#M)9kT zPo@Jipq$kIHX!7wRqYlxti|H$LPDM2asXik6ZAE%)JSEPm&Xw5V!A4XpOoQ9K1dzx zBzO9=S7Fie!NK7NM8iblyv(GQ#RYQtv{h~B<>h5#t;J+e;hRd}JrOzT3<8+}>Kv)U zRY2*7#%CnNJSmu^HR;1T(_5u~Xj%R#qpol>983`cicUmC1lvN==sFz_Pu#S1)#lIfmYQswg2Gapt5vS5(bUWw6pLW>JgvcJe<2_v8tzOt^ zr7-grMNq~Et2L$=Il#8&PCIzO2sr4`~ej!`iPmCR9|pkjrF=yhxso0 z7(eY#Fk`wO-S~={_1+h=CmD0{L;a`c8m-}GWZ6>T;@LFwA5esN?%fef$Bc4TZu#{> z(&^RIM`vbkJ-x_#-zvNb%rCr@6h4e@Y8{G9Re)C#vhMd*)}aTN%Kd#i#S}qVW#tF5i!{k(LatxnM1h9t4zJBTLNFogx7=JbD2Bic z1oU6vvym40=gK;j#z*= z21xNiDA($54WC_XH&uxI}@y zOkQ4I6*PBXehKFt7@NccNorc?&;Q`%$q#xi>`$+#RKEY+OU+!+%E0#vlEN!0l9}|U zvA#~}C|#5wQYyc(E_YvWAhg8%X4hYS?2-4tl7Ta)NL|3Xo!38j>`<+k*41gVZF(w@ zn-fo0S7dv|C?q?Zj#W2k#6s!}J6@}8-GQdpu1iSbKP z_?Wzg6Y6j__uNOZr>fYI*vs<8iNKs5!D0RS^-MP^J<)uz-=3qGEM~SO@h~5uq zoKG*<&XxNyuY5PlA9!S1du zDr#zPco|$I{iyHVfZDdwpBNyQ4bj-|>5#aZz{C(diHsLo=3NhfvBiWR6v;Nm5DhG< zfN`^S6E2{P+VYZt4G7f6>P6b1u8so6IqWFMT5_N{0;x;7<6vz#6aE9GP)z`rdwSV! z!G_m|I@`?^%t2t*2>=G%-YsV38IY~=G{qG^{QoM5LFhkAq0o_k>Dn^$N4&GtOX6jI zcg^bCwV$Q4R;mibCAduxp45Ek{a7^u$+PxeD(>Nf0^yhyC%Q9?AMa%;NMjWaPv0mf zcL)9Jt9(=ErNxBgZJIz`*B^at%OYfyZEc`-4mzPVa!m4FzXAg)f41G5d1rxc-H(Q& zsw|1Z=X*EDJ$T^TpzT%nil_S~G7TegXIJ-5W^0H4J`%;XE;wQY{f)Om?svVUyV_GaOeseuI){~h#lTr4YuH76lbxtK? zH;x-ug)Ki;^B{33E9(>3uR%I4;4kyw-hW$CfYS>2)UJb0aZm4|WMouS$+{JwH6|t| zqJ?U=d5*0MO=jg$NlB2{`P+blI*0~<|IN+K$j|s-Cjn&)I6*P7u#oK`JA!o!tSK1d zLS@6m%1Rli!fBDki5cDf+-N1y4G$2cUlz@;WuV-kJ%UA=KDhyefAnuoBoS&zHKYwdT^ZGG3<}5?x3<&>JR8{?Ymotir?n4Iz$mp_N zd-vS`d#heA6~-mbw5V&6OgK4Y8qdBpzIi%ZiI;wCf6XrR@qan-|M?3WLBkYHICRKg zq1nwyIR>k+A0_Yna@i2Wv~( zj?RC&QcF`t)tmsdLGSfZmV~`cNSkFQseMH;vu(^q2}p+VfA!fh;FGt z6qO#0{%|O``QeFGZ*1XgZAImy9m@Q-g;_Byq$AribF2F1#w%Y|1y}nL5)K3g4?dZ#{75iL2_RJSTsm(!z1$iL_D zGwe7=@zdxpY2=J9*j4j7ZW6&3YBJ!Et~D6$PMjjHsPyA{=f^*T~D;WkdTm4ns9jtrx_RkotffS22Rd{ zog$Rl8H#ePl=~p#_qqK4p5!}M93<_4`-?&|2pONNzoSkLXUY&@$WeXd6QPt)WAHz8 zcpkk@`D6>_*JdC^64#5xzG*4E|GtF(c^x-LpK-(%XSh030s`r*H>*)gh{Acp)CcEq z7Y&o1c0crP*Gq?xsU7!Kfj?m4eYvjWB|gf9iQM{KvTVSI$fU*npBCMYjzXxDp4BPl zxp%;@gAolu6Tl!`BrX?Qm8O=K?Oglmxsw~<9mEvmGj3)Gl_;p#2^0GX%D+skJ1Fz8Xmrw_P44AbDJOm5`R#SboNxjz2u%wN03=2NwWPBgC{_bp`X>r{s zjsNvzab?ng1J-jDu#H&ZC=ZNOp(j1^%=0ZR30Yq~Ns z?=hVCpuX{mjU@o8G>8|p?fY-7MfbaC!+(HHtK;^c?%iEB$kl`<_XlY54K#0)X+CFk zC0aKGelxZBQxypnEW~<%X6<%O<&XD(9S+lzC)w~33{Ojlqj<7+}7 z{jEGhz!4MvXoh4kq#WE@tuvwDy?Ym~kpNLDQB%`LP;`Uqx>TnaoJ$a82u{pUYD-8+ zfcRi!divJXFE0;WRdvr<5RzY2Kr=LD0n89Mct8aB-o)f{Gz>JgwH3gy9x8U;WJUP3 z;a+@iV}k=yU0|Fj=HNBXDX|ePL5&WRF6Gy+pMz@ve6gjaCD8i_Tk4tD5Nz(Op1&@t z7<8175ae*?Fu&&10nwZ&99zWwY1FJm3>a z4v+uE@kzD_!yrug2?e6dk7J80O3^YSsB_{hTEpT+{BR7J}Ud8mes&m zzGIWaJREg6u|vj36Gqxb2TeRJLy~^uuiqOeIFQ-stl(3_UM$8NJ$GJZv|b&v3oCZY zm}L-1Q5g8eKgdj=+~f3T%=T)E1BU2xBjGxo#E8B@}}!j+H?tFeF%Bk93t zg4f?(A(!c#9s#XYliI;QE5GVSy--L}S1s7a-NvhDSzjG>FKq>WxJ$Mn&a*G@SBqzV zD=m*C?^}yZpRTGhkd^7CSn%jcP9E%s|2Ph=Bz5H22ikoVcz@Q;ghBiuM8;QCR1k&w z7z}6Un@C8UZ=NCfL8#@X%1rUXg^r1C(JRlh<;~ya!N9sT z>i^nqUR>XCn;y8mZ8V;z3e~-i*VTtxA7Uz0@E#^Do|FeS)hIf4C^=deL~)RA$&{2g zr_yF-W>9QqLH>E1u4e)OZRZykE?ec3UC?IWpuT+bhLqkIjLx9IkcoN@I~wdasRaZC z1xJnC*0DpgExQ3uMf{hClalrY&OcYvP5Li2m`J6%54ZHu==h#`$!NK7jM*?Kd z@#ou~dw!nUGiB`MNeEuIulD+8*Dly_ZC@{v^LX(JXMyt2eF3XS@W%$z&u_Mq|IT)5 z1;wy4=seSkdF8_WS4M_Z+ZZWQy-HGebnnH_(Yq{(26yzuaFGF^ zlQNL&N+=m456P%O=?(G8>ytveXem%?}hU)16|s)zM6 zRmE}U8@vR1D6CmELv&?GYRPy#7j#7v44PSIed<2?<5wP*82E4(O>jPWs3a8@szjbn z%}9&$x6*~bZFLMIUV%4E$?S!(gy{2}mQOl?Ih7@r$@izY$X&kaFoa7Nbu#+rjL_Pi zuPbEzdmW!N7NR@2WN@4y6Uu4b^m)>Fk4HgaA}qK2&3lsd|HIUG2T~coeWxgUWbZwS zGPC!d30WCslMx|%&+NTNwj{H%$=-y7GP23uoA)};?-}pE(ZPN0^S!U@GmGd}15+~M zV;A=>UM<+*rMtKXz7kf~TU36RZBhN+{Q2-#Nl^Oz2dZC3dzCOH!tS&i3ZaNZ|7rX2DJm6UXTMq_H= zE|Q?{B;~a*xy3zx9Ll{s#w3u1z3f(aURYf~Yj{vJ7F->Bq<_SznfCEF?+ou{lfyT` z^w*x*Dw$*B-F3(7PAucqiC4;cJhMCRLU4@9yXt=YsyzFNy55OOI>q zPDi7C_I^SvNyQ?b^$|Jwo8t&uijNb3ew92luNEL-{TNR}z&mc|}Fz?dduIp#uQpilP(>9$uAFBY^k-Z~?;xXlBL; z-Y)p)JcEQba9T1mYv}3q!w~?<9e)qk$H2Y-A1as;;DNul*qvAQL4^q){3zfBfd7j7 zP3JKrd_e7iZ_S)Hxdbje_Q8e*NJVdNJhOn)8g5Amj4i=Wi{NMW_4ij!*#M9MlTFX? zupEI5q^_D*tLf>553id1r?49Y5pGaf1I3Q{A3ofId?2Wl>FMo--qmN&zXFf{=Px~u zH)#PA1M#@S?q3PW+JKaEbHKhv-j0oq=5~BR1dTXBx(ZmcI#&;1nMK&lfOdjY0D!om zG@Fbll#SG`MW@o&MOCFD8l)BvFWy9cEcKgXkM(}Mi!8;1Q-|95p3v(tiD#E;g;Z-* z4?5Z5O>4ApG0h9)ICc)2f-p?sEjj0pOS4uo92ib>s}iI?du|G`IzMwBCa^d98OzhI zjuEA`%y)QjNssWwSH84KdA2%qWuWgdqwndR`f|D<{pHmX9hLhMNBdK;m*8rRb7o>umlxCA|%Xo<_(Tu}A0Aj(gI zdcsg7exc3uo86nmI%3uR&SCb#{2xQCZ+O&wUi;QLa_QC-2F`l3w_G0C4e1$v?^0qd z7UKLar1#>-I6DqBgyvmMF zr~k}^^(2dtu*NY3YV_88CPPjFmFH{XVnUwZy;-=2C!H>SepFcd>u+HOg_DBO#9>)I zel0eo%-)4K!Gp%LyY*S#*eCDZ`&y27Lf!9Bs*0+7Xb8#Gdn0X8gTJ{`w5NSy^ob?! z?+Ur)#n@uTdGGMY%l%}Q+Ic}_wT_hZ03z;hC%_d!Vn=5fA$5VGd=$oEezLJC<> z;{u1wrN(&Fli28-mv16naweULH8n?Mh`ykRr>yu#a8z-LGzF!vKhgU z3l;BAshDllA{K=h$kIGKcSoM($>9^TnV@kY<*s+dy~HPWmfL!d!gL=e?@NNLaGFs< z9F^W59oD5ubrUo;TV(+YI&tIm^2+dpz0dZq+{1(LH=<>PB?WS0)oi(QHgya-{#lh? zR(4nn++Rjk7j4cW(fBPrYCxiK17D*5&{gB=NzUBImG=5|8>^vD=drDDQ#2zs^EbM; zB3(lk(_S2;ktET$QF8}-+sL6!V+-pnysD*ytCOP8&*_RW{c$O+7SD8Hl2lB#OOc9I z&GX-hvR0Xihr3OrB*l!%X3gH`_dTLo)RoJTszUGL3&Rahc?0 zo9RKHG^NUu?ucQL=JEJJ@8A5oT~WL8XR=PFD=%`Fi%S$WG&G!$gt)o68^aZgFp^m# zb|$KCu<~%$QK_Q}eTLaNcfrMnq^RL< zB5fBetJHpuBUATsR$H76#@0hl9N#EAXE##MWGInCr)^w*aZmwnQR#ZrBI+Lbo;z;k z-KhIDoWH)S8SCJ-tq=cQ5O^zMnDN&&^h*&e3Q)lYu`V!*o0#lo(W^NzDJkkE;mO33 z+tvC-L|_UE3fAtnVWbK;GC|Hd5}Gu9+zG1s+$ZFNYszt9a;dR5xRSVR=bR-uxX*pQ zC@aK4&Q;^-LOAFXHDJk*le-tkAhWn^Zf;)Xb@5KCR7V1s1lT1YT8BU;r?L_cB*+jM zg+avjcgAIo@yQcH*kG&7`hW05T4Z}A5wdF8Z%%RshlD7os#?JE0zo5^Ik;fO02YGE z=h6XoE{HZsNJyx#8e@Wta=+o#cDtHISi{$yKyq=g5YBGQLk5GBIo#}!#0g;>Fy#Q0 ziv;p{_a;!{Kn`8hh$SpKL69^8)f=ETi;9XuJI4x=gd<*h@dk1S_xJaq#3m1Z-SAF- zaI0Eai~)7zJO_a;s6moy>h2IR4Ln8cqzn{xI__+bW>b>9gOB zR#`T;t$DNCyfM|Z*X5lD!@?Tf-vdO|**R%-kSTVMV;GPI%W2b)6JlhG^(1!D4{wH| z9V(?OG$roK2)1m|o{(#u&+X^&S}~MAp<6>?8yA#DQzpzKA8#kxeK%l^L2AWh=+@-d z)@EAP=y{jD*(nU4`JQ|g`B^)4wEdq*N8Lt_D|ZY=7|&S>xE_^?rew^i-P zre-n^xh>2&JzfHmOkpsJEN+O7;Rd9{7ueG-8)LKKuY?*_3;AEl=yh4orWlKyxmMdqi4GLCVM z89O9a%SpyKYWHOEH(o~*Um&My?naFro1447UV!}BZFiYAy~0-wG@D;(pe3Tdw`g~< zMuzAofFSm3d?&_3{mdt6pGYUG60aZWRVF5m?l)XKxLR0M(B+8!6+%^TG%xp{VG$$a zdT%(Ul$VXM(=si%AU`m_@8Rab>)aESS-EoB<8&*yqd;JTjFj;|%kO2jFB$s0h!@$P zfm9t<)(S1H%RHI$2AX$^_M3bu*lnCmaP3EUuplpmtsm@Ls`UXci^hN>@ow?yi{_J2 z1JEw2*#;s7U~ho;h^%@Sz6dRLHGe1vS&MJ`(<}^6N7sBsdHGg-a)G8^R4ghOUsite z*{#;J!17~3WJfNqCPPmo+|Ej;;9P$N98whXL&`goE|k(z6c64c+$U@CW$Mr;R}BvA zUBweYTBt4fR%sS#h@WTC75_MoCk|KRV$#v1KMaCh<8$#p%F%AOy<)@TPL=Q!?k}yB zek0wrr;d)_7sZ%sY(}lx998hkc)jTTR-`4D)^(^|5ZVLgL*t%=lI=Xtc+%|8d7OR zKhY68!q~OtS6QF+Ix1C}b+5QvUKhVVQ+`f$TAD-jGcI2?(PxY2*CWSK$8Ad|yB$*o z5tZKrAjS$rPvS*mBhVBBM;b@!LicuOk71BQGTw=PrHpd)vqCG81`d&0(6;PHQl7V zr0+hgN)i&dsCNTMFzW2RgVhA16LLbJpjzqO+u{T5D@_X3fTY;*w{Me?f=^I z>(sq9a{}Jt=)apW8r=@$RaK+oQb6SNTw6OnBVz#IH}IMOhXc^n_n}N7Bpu-Ra#>{G zkHea4`O>4w5V4^HE4R2;0R~4vTz8sIsNk|@XRCs668wFpa6UhW>1Jf46$%;GHaAVT zet(5+8(taGuh1IMv^61%#kdjxV;Gwm+1YVg=Av_1)TZdk(*Sk@Eeo*D@Vc<0kL>gS zmB^!#2gVjSOW%Qn_oLh^za^fEsDojS`pj~WaW-DB;TuK zRYzB`^0SDU&@X-0hfm%HutB|qRjyLrZ@&fuoer?uTK(7x^#+k z5^jg7vtoY>zK-`^ofx*^5C5v%5yv?&w|J$HYXsaIqZu&{PIs5N`M;H?7n(!8Or%$-qpR=aKSQp^dtUDm+y0$4+n}YLkinpQ#dUEpK(6&H1|9b8!5_n z*#9%f_+w0Ie_Ei&j<~g1l;Q%%Xkb8m@AR3cC_!?(uGqE27ffpfv|hq-hKY!JUu^t= zyrWr%Zc6GN{{L^l*7hwPoBt>lw6Uw^)T>aOgIk!PAN+2oD<&)W!-Pps&v(EiXzA~G zz5XZmVhIO%u_ZHiqwChYhD?Bq?N4`&;KVrkH$IRll>CZ=#5oydUd9@3C5T0XJd&vG z%Lq1H`MAIlOHeAq4XZ{F1R}jCm_y*x;0h(tc*uSj?2Q~Rvc_LC5}@zFY*Ymq! zz6$*i=ToDHV)VcG?nK_FZi`Xff6hCr*O8fUwHCLyilpp3akZr5b?u@U>xP=6-Xlj4 zCF`duUcV14?$Wu>-~8Fp=IS@W6J^=$tdC|I>#X0dKRP)VI%+&J>$v|eUbjg#Bt}F- z#AGaUDrfKXxSM{oEBa#OaPi{Z0!f72!!DPPq%VK%X%$)s1vCF+5}o3|&dP3lG!}2+ zIlH$Nu03q(`1j}1ThBAv=EnG5!Rr^E)W{ke42DgM&OYXuo$8Bwf5>;PN!hQYJ+{@P ziM|8}2ZJslMVSdql&}>8(4dl_gv&vKiD;=lKR@S0E`xKdD}odbA9#c=DnjE33>657 z5lVaR%v+R#8yP@KAgrPOue(+}QYS%%*D=#-{7F%WpFs zg~U*$&+oVGXu#nK`$GD`a|Dl?k$6oQ;8DDaccX`Cd(_ z--oEUBy7-JilDRDdfL_YG+lfQm#r7M!SJq1YmAFP$uJ7N7g;Pu8~GySDionrH07#vX z>_IVV7_laYWZ)*@QE@JcDb9x|+FdiiKfr!Rk3{)Pd0K3Ak1TOs0 zp()rQLJJREg#pH8e$BXb67ndLm6a7}5IEn}5S3mBfc@TSEBovv`ts-ffyKRBz~YP+ z&(aJ2$0)n@1cCwJ9bWEB9BBj#yuQ^mNMa~v^t;I{n{UQ-ZnfONIo_C8Lxgvp$<5F9!>jmD1u?T7mlsA2@{y5&N z>Rpl4)n#;j*uhCOIBaxr%=>!9v~s`kHkD6()MEEVs%~a$Y`tg|*XN$JuIy`w%dM`` zd6pj8S-QH^i}Y@1E8qMn5mS5=_4RHDn_**$^Tscvm@H96Y-VO=N4O6TR?^?d4wFX8 zf)Wgg|BbF_dDHlJ?%_-t<_TG~9Ln^;@A0aXi#jv6`jc1Gv?roP3<|6NsJt$Tecq6o zDI{bcWIB3KI*^vw`sq#93i~hxvp{E0L>SMzt##xNMH5oy^{J$Z>-+|^W%Z3=ZjRNi z3sZvb?jo3&u4s4VW&@u16=e(cY9?!|rDPLCB2h_n4Bm`uzoZl){`67>$*0WZ ziKU%vXa?zavJQu77>R`v<{Rt}$Ci^An3fNb{}4LG`L5jQWqHctC~O)M;OBL3&*fc? zszSS#W@Pzid`Abo_0>m3J6kG;E!C-;N)uxj=X#;;BL1cy_Ox4QZI|8h2g+rBZ0sI6 zah}e4Os)>ekh$?ibRGEgco~O*$QP_>$Q2}?S zsDFnR_RuJz#)Se>6Q)~pHRnI6(&A4Oi1rHBdEgk~90R@NcEgTnS=|a53@{L%I6WN! z^fmyguzDl73lKHQDJfyRX+C3uq;=S!0nG%!^SPGRTR;!BKELR^I++`Wq3d)W$EW9{ z`9#F7ZkZ^GT5Jdof;MKcGX-E8+FoAo6Z^N)uxghr)vadbm6k?;oEIPcZr#OpHf{tP zCi-pOPiX1m1O_?Unph!YQZ%@d1SoNA_9c&clD!Mt$Di~xK4CH^2oa_N_Mpn{okpK~bhX+TV(SsQT8aY~N`2nz|&7uOuo8Yp}ypyTx_Z=Aay$)LZCx z83rO=)JMAz38!`zhWaMsA`z%_=5$nQ32Q`m_dTTjOCRVTj3x3xC*I7Bv@>lPjvRgeoeb2%S5_7ZT>$_!=5a99q-oY-^mf^OPUw zLb09mn{gGL8hb2VQFEfcs1lphJf!6aq^9PY(s{p%?IkQN?HP!gOGEQPF5-BR!`p@= z*EX!E8uj_}OO})oTH2@{(QlvQ@tWG?sn23fwi&Uw-6P~p&aJD?yZ;>b(VP5<5Osgz z8-YZrJ}@~>FY8QF`IfRP8jW(r!GtEsGjU{>-b6<1ftw1?6~Ql(#orvS7lqDBd6jRG zyB~7ar*1O^PcH5mVlu`1ZWgWn;poM_(n~6B3H?9d#bBcjx3{I1Kr#4%_9~un!Xq>`IU80teIi z0NK&4GF9MF0jLXLDLCnivrKiPq88=F|N@a}P||6xF9>f3o**|J>j$@Y7|3V#J15?t=GQY3Rn}`WKLo zI4pFafnpd$L=^n?zVKnoKAIFD4i&_&y6bm`91VqbU5d=TiBuE2rT{ocXnh8~iB7{i z+n-N%i`qV9nFHX`V`p_}s3;ml)%WHco329scaZ-m7T4||y)LXf}b32p| z><`fx`&&7kU4`wCktB0&m>oolq8ns7L-fVoEt@@t3NGRQ@XO^Xi|M$r+ zoZYd!GEsS3KiixENSWB68rN2Sf%HsMz@07Z?_RAAM+=dIX}dVbTJ#qxg|LWn`?bJV zKd71R;yvSG{4M6^i=%QUeegDF&s$U(Y%%UchrI-&FQ4NWX!=`=MM+0&SqLJ68NzsPr~ z5*=)@jC70TNKRhA+xx8^h7q4C!X4nkS7Sd;sELVnI$8BKQkR>%cKctd@EUgaEyIQq z)Nq;M%xr@J6Pz8nkyjG7yot*n_1_wi>ebX}=*9+*u!!N3{RvW~zJkYGxoi zd9X|AA3B3Ytc|e=8fS``ye@Bhy^UM%NvKYM@#H^GCFsHu)VSt}?znC2HLX z5-o)^YjH|cvBfI8nh&!(onCa(^L%kJ7n=FEk!W?r6HuftQt#PXPD=b+AVj_we5>bX z@@sJpO@Q7vBUV=Wiz+2FEUfvRb=t*TXH-GT0vB(;!VB*ZQy!D@%n(kYaDVbLBm4e$ zrHqUYXn&Ip-9hr6Oym2%VznD?j^$Ob4fr$Qt^Je5LW#|M8n-g!b`x}iProfY4O%`x z3L`IeTC(rl!>({YdJTf+?|yeccT@qWIHKg#*4AvXD{>@g3fMcqivqx60OI?!G_oiv z5dcLnK$j2np~J@Kn*HkRs|bL>%j*91M!%4Z#p8@VJC3VNk z%L}YAYWn&ETQzgRQ#KOGHusP)eW^&$+xFtOFfr>!6z-o1SPih^>?j`HCi*arLVY%k z8z9Anu}an}PiSBJq|qBIUGvpyE6vdnm(}`x#&KTEL4*9p$~%Pb_nt<}Jpw>c@U5`% z`#&Q)hwGCpPc>I8?Fg}|)k1QuY6B!n*U)lt#XEgN@zB`0m=r=knO{O2oeaOv;m#$JQ#dLD5v`8h{-iyz&=;EUpTcVJarg6;A+&d(to%7hM_`n~M z;mLZ><#6G>G|_uv}cAX zl7nZuHtwY;D1=tZ%G)|F-`jd>M>)tC_AMBUs!1$`1(f4WLiK6iZ*pPWq4d7=7T7)w z{h}b#Y56l&*D|N5H=wjQqUKfhCU#_ow%k%5t18`;opd~pdz$d!kq0M@%I_VcDs3}V z>W?WuXle6|zy3o*A#BXSB|4-}r))c^K%z91OmP;BU_z@A3gnSAEU{clnzBE-XD<*i zqC%AC(2hdD!$w58?q=@()MKqH087g0pxbFBmD?bi@47ww-R-FYt-B4E$ewS1K027v z`I^0DBQO;lv;K=y+P6xW9OsF?|CFf_5R<@0gK!?qI#7@k3pkygp59Ls#=u@l2)8OT zXqc=pYDbndhi^Nd+l zo`MOn4Mczn-rl00v_4B}j$1XH!W!SW-^Yr83lKIWgv4-SL-&g%9(&`iB+vCyj#LQ0 z+djki_&DsVl`cDm6xjEO_3e?`+uIS|SAF|d6wnXDanL6xcCLmfX$}hyN34*5@Bh}4 z;Z2VO;KBQ(VQz1{+#5l1z?1;?h{nr(NWv9K2bdCseqg;RYHFgCz(ojx;YWdC2XX1n zk2XLT@fR_d)Yn56p5*b)+%O2)VWs9bnd^+-nDy8(gX@Tx8xViQ2>%C!^p)7ql~(VY z&3x0z?BZ|h@&c$&>gwt$PON260G;GpAnrsDb8u);Z-?MeuYiCS!W;ZAFFk=|1IG<5 z2*Fc#uw@+-(=shq99 zr;38o2RkI-jnBm&z>k$Daq<12sH~zQ27I@`W(v6O(!iS`1x&BUJdl<^fVP8vWo>&q zD(-uw^m7&h_^j+L#j9$FRFfq;+OQq%Z4n2$8tE?B;{R-8Nd3;R;}bimqw(f1gZgh& zBVxCmk*=S_Dkz+0Q8;8=hC?5h!V~>#&x%A`Ne`UyjVQVsBRl>W3)Dp|c(Dgvn3qz~ z%w8PTRvGKK8cFtjJdfh6kIJ@KAP*_D8qvtxDgRwtH8i9h$y;S2j@y;=q;N;>A7xAG z{$`6&(M?jJ)kA+8uCqVCPOsBvzjDqYr3JH~GcfDjJZNLjz;O53?5uwt?HqYc{irVi zsAOOmeEt@u+ok=?lcvG_y9|jEAh89dYx9mEwa)^HU}le8S?ZaK?M9(WIzV-5(RXjs z_a;rEIYA6lO#J@;)XO)lB(n|CIktb)%z~B#s(bW(Mp9xZZWKdHn*s} zn~^~QXGk1F4rs2MkH40Cb=&Y(1GS8fj$V6p{0E@B`FSItv0H_98rxyZIIZ!y;LGyd zR{-w06%K`-?U@D$S%iv;-O6aM2x#|04D3Ygh6CKg!tHR}K;2JXK>-w)v;tqD3!caS zSPODX9)idhtRy)s=&*&Wg{K}22}QU0OTzNLtnmYvb4@zS#{}m@?2@e9P7r!2x+m+( zvnW0OP5R{fMGO$2b8ljv&m10JxGftHY7z>#(sd*adh1I>mfVLxJVmqED2ya>mZ9V| zCq<6GU86tmj*xs`G)U?S&-O4kc5N*9Ep0vO8cu^hlk~LP*#?!cNp~sgrY5DZsohCn z1{HO>!AxYPXqv*BQe1X^=p}pML2Y{E%hJF8>5B4wPt==uGDXrGChZ+zhB#LyK*Sp) zs;kGfg$q4(m=IAyJ0++Jd*r#?S|EHisc^}Xko3E5uVtm;X3*~PHR?U2YtKt`Wpm2% zP5#KRuD)>evxPh1KiD{|o$p$gv*md2+?sjJ_wbcu2zBbA4R`jX)g!r@!v$<)2fU^5 z7Q+YzGz!tF@DN-(|I=9ATDD|H>OPb16>Q1kQ&jv2Sq9}b)Z8D@$utlDp{9PMre*qL z?=Ul1eL4_LL}yW=f4!%ue3$Yb&hZDS{5K5L-*1VQgpEFUsJLSJhWefI;e4lxPP0Yq4A4#5|wmCGoq|)+xk9OAFfoapVd`% zBB)zg>g%;-kkRrj#d;^JmtK{Umcy8|Bs$JxzH;P!y4YrI#Hhf7%jF|Mt_nK3zjQq` z-UK|id-8Qu^!MMGeVJ&eJ-c|qL;bemGEJB)J-AXAi-34iV0tdxTiOr}k59t%CmyR| zqQvF&*~{>{&13Wkv-`=@&xdjhn)LVfNZIQ6vx#R#WSEH3NLIeF514E{>J&bEOZoEb zm%5gLfxP0^_eT?nBkHRkistZVZtrHReumah2PbRlr~a6W)RoG7f2F#VETxl;`nB&N zHD5Lqu+64~(5fzkscPqHFho&qEpE#V%dBUf85GrQ%s%VZVtQX9C!Td}E+ zJ_ppI&BMhF*@#_h4+(#jaLb@kIQiQ5k46YJ>5c@3@YE5Eb`*4oo~WVw`d!&q1T72lO37s}}DPKS#PU$g6PKcTy6r zIiD9Z7BDD`@F#%09;TX7E$c6sVEPS`MEJq<^&t;`8G)G<72N|I*}-8iU&|ewthRr? z#e$z9QQPo62#Lpd%m-5ZK(Kuq3E>KaonYg(;QoCM!d5d562wCs9F0bxXZ$oC23{CA zzz|CSxPzW%iw<62U4YA;Ld;wE^*Ho#I>19+6;O)E$jHsPmTWl3z?uMDD#E{}uHFWC z;8eXcYhq#|%pWR>Tq;a+;BX# z)Y*P2Z&q}0;Di;4Le!H4?AwrTKiTBL*YIvD7u4V2N&v1DU~`~lK~)VrLQYPOALKq@ zQwl=f3Zh2{@-B*5C)WS1vDOhh7VAOg3{5fK^1MXw0+5%^4YD(>saddY( zJRSBfuHgMg45Cz2V4i+|e2n-mFzRgnsbPNzH2|R-`}|a34+B&dJZJl0lTB;bt`7&K zH5rU1&oniiwWP16#DAosKDgiK_ap`5jpUo&&X*@;L25jt{laq%m_r>31J48VL6AxGsFh@h!i z4?|_%1l~$wu)^%6xZu+oh8KMLvr3Q(>hs{K1x%T=nkigKl1N#2Z;Q*y%t2U>@TnlY z*9xN~tbcWKC0@06St}^@cg$nrV&WaB(i8ZL%ae;ROL53&m^@nXu5=Dw@#jS^%6#~ zzqDL(p|NXzaE;Qv!Cm;M)zzKER@FW~GXCF#9)>NNrip|I%;Qn9^o7_6a$sYm&VxU-2 zuIS?8VG*!DcKpdVktq;BcG$%Fe>OuOAs!VejJtSFfn9Dc+6NF?!WS!+`eD}G9{ z-8ZV8xxw;$e9ZF0bRF)<4>Nj18rxidVi3*ktSd0d;5LhS7tmi~J6S@pyC zDwL1HRa-0*gV_p(b&>5@P1F1q*ey5zXtN-|P?^p0`vkl0(90c>&YEnGU#za~&CJ=DWYLC~=I%b-#Mbv*T1cH7i(E?h(?ev7SuEQ3 zT7%!qK9t?_$oW>5$3B_eb)UZXY32!w%Ga@xO>DiQf6`UqZ1Tn_(+O(557G5Hju)5D z!!6k3hOk) zOqmExfq8eJTs7C!^73%x>skceBx~aXlh0q~^O?BAowbuI79+8bdEar;KfzL9t}^v{98z;UIw=@| z_x_6w_lcJ`wa;szzN541vupBI$K4|;f5TK?xmJmo4KYECCm$+ZG>Aoul$|xn%nmfx zH;xw^0@p;BSL$A7NrMWSkvnKyVL*UAzUKO;a`Z$%a942Tay~<<>&_syzbHyMGr?DT z?Gcubl?Po?Dwo|-JL;0?q(H({?Uisv2vRo8ZAxqMywJz~RrWZimMgX9+rp&@dg*KMn44z*3m37GWOWseqGsAsxXlZZK8%$T^7^7kf^G^WpTI!y^*xGtOC zv9?I4Fm--hE;c3KWF0e~bqhta*E7c$FT`+XUV8PGtW&A3rm}-3*G|)@gi>Zav-fkk z&HqscbE5+3^?m`0I;&Iy7tL?>$cX zwZ!eCz^iBY#-yS>q?N&F^pLHV=3b`E-^ikLdt4gQJ2gI@R0ffD!S$D@FD~nBs_J66 z^`j?SIvRM#**wfA#!Nnc7$Qt7G^+U{01wYUHE)W57EEN-hAb=}eljsfVL&GOA^o(t z7*!!|ZEel_*0NfEXyM?s{SDm{MAj2! z%U>r9O<r(c8k5&)(7-0;W7Fnj!*m^gqdlLF=}0KUK_CIBx6B~xlIUbz4A zn)>w%;cZof(Lz;t4;h2_F$9LZoia;yI9wZHiLHCpdi(mK zjr@6az%5x3#jEm4S8;N8EM&ZN>f2aivSO>BQl#-efBxJE8@RsvdI50Ma6>HA+eC+i zUYx_gX6dvhhO#@?MlG;O0vU7NN~tlk)lP&bzo;wG_}OQ;(N~($3w?jWh3;f&Tst2IKqZP zWEvZy?>xH;$DiXC@eN*$NpdvZa9vaJr#~a0CWz?r*&F&lADsN(Y>cXii#0WyY73Kr zUfP|!iQ69@pr@74$=`2lDJI-?!qs(oAKW&|g9V}%6%{P7If0-6W_$!-3AYn`n%@E! zaUb(8l(36}FNrFS0hS0!BO}^u$kzif@dM~}U^a?@v|~UQA!VU^^#D{juy3e1O&Gxk z3L*K&czJpoL_$DX*iRU^RD!8`z?>UEIw4lA($KEHer4Wj=V7ZXA6sGpx2c~=j7BFD zBTk+;l*}g@S;8IuQ)huZ?{}^)AGl{i2Sh6ATU1O;3|CX zRM2?hDI}-g6dD(Lf3(7a^z3Q^N9_r7q^dq|bUgFDT@SMu3CX3lKT2mdTN_S48*0y2 z9@aZ>|J-7xA0E)`|5Us0|M0e9s)}k&g^?|awpU#klIMuuxy_ zYU4hGet?8In@XO$ogndyeqZ-Zb&_bK+JvL1DX(|Ezem~R&~~z5-MPj%ML~3(WA$lt zk@klq%jx4QvgWe^bW|pAvm;6@^NG{XrgwJ6O(&#akZuSYuHh^;#q%^;4z<5yzm0Y?=&lM0+hE}FLZU%`wgNW)9U2fcT0t* za&kxNt`;18njwzko(RjGc=ik}XW^vJ=29QU#mnXapQi<{Pty*;)sX!_?e$ak?2FOc zkLwE(65issO!;t*_jAz@CfG#wi)r`rU3*f+DJ+@HWkh}mcq7u{-`~O?5b+wrMWl*= z8OiQ+lR|X=Yw9!PmRS!x#6>M4&AmgMSsSZHy1iHJD)rdKuqH)yng_=qu18KxB%XCA z#qXp1!tB+?gN)RH0_}wAJx4-UW!jbU0a}4U-?>Ne2F9J1s14!Rxm732k6%CTkrsb7 zTW^zf)~ZmFlut{`b+bS*d+o)IVX%}VT{;AV5bm3s!an{k^2VdSE)WF1M)wY9eR87v2<~)5lC16UZ*YoL%L+_EL%ZD%CziTQ5yB4?O^JVa+!*Q-R881T|*n)V^#Xf zSI~|aMuQ5QKi~)eWO+7SsXAtkj=B@9;;#0NSB#-X0R%Z%qP{f^b$+U;}6L zj9|I+H?9No%)~@@UbJW*LO*qRb^sj6yx%>lzkn7X9%^d)(-6{8@(^s=011F%7qEq8 z_&Vr09Y$n`jd;iqXfcrAAk=`kqoK482x3|ITr<0nYLNxxR9VZlJ3?x?+j`IH_3H%? zaUkM)#Q;Hvc4AQ41EBz;)9CNteUOwA0&Rm~tYsfSstyY(oa=}+5E3AY#@v2+eYPS4 zTL@T80sFy4_5+I&(W4g~@Q?=2`iH{8V9+8%a1I!=s;E26r3~)5<*xhwg8fNWicq z=UivheisyF;F;nef$dk8>^d z0|5{xStKS7j)tzTfGyV_5X*p)?fl~6>}Qc^C)jS!+K8LQot>W;mY9O^szM)}#b2GoW*?TlIdk-qYA=d?-Y+^8E+NJ!= zJUTsX1hG;#wNHi|wO4}2c3nuh_tB?mkDVrj5J_!93h%8;1jYo3_GoO2M(49^^jwx) z7Ic_-Kn2P{u+ZbN^GdOb?$Ienxj>&)Ppz-G7GdriTs1U~)}K$wvFe3#j`v!9QIJ%y z@W+|rNo_m)b&DoUxb(Vu%X82K2_B%~J}WRK@VcL7X{4<3yVx$0318tGgN=d$Nn~Lx z$+WDr1ck$*P>Cwk8UM>>QQtu&C61zeBVImc!jmQ|?}C;2RLrh+~NS)lMo*75POs#ntSKNTo`IwoAvOue`j` z_SobGOlxoN3m89sn);N)(J=G~P4wZ;^ZKYq9;1Musi}vUrXG<@4zkaz-Msg|_e#$3f>cv@g{b7t; znxP3PnqB#C3ftZ1rqhPZ?s***j<~lJ*rms4{KZHNZ-rlKF5ybJxJr0Tl72TuV+U(j z7Mdio8CJO%Mdi;e2av?e@)CU-N!C-lr53jvLhx;q-~Z_w2ELi#f5N@-?6!s9azo>U z$&M5b`$x5RtL}9r(d#=*y?z*Oc4)@+W}Am=>5#jKEl`Z%17C{$&k5*zQBKQ{ zl&vTI_$Ef@WSFDQY|1pftb0dAjNGEY#H2n-guO$7TlXwA#qA_WYp8)YJDUAt=j(~R znPI!d^cLOTL?!bNd`g>_O80=Mf8O)B^4XGd7sL7w`uqEz@|RN|JX9%k@!?Fven61_RMY=*2`PAivR@9S2 z#|ydF9L(#nhxbcL_x@yW(`#4kC5k;>Oj24^*SA`w-^iAdGC4~;%QuBPj~1&*p@Wko zY9(FGb~#QpVSW>5cPQ`CKuUI3_mGbt4f-ds7xJo~LTadO3t#IBMz^?yMjHymCt%|L zd1-6=w*R&zE7cwN zbuyTU%d{)_nsvGn3@H}Q&FB3{9Pn3N`fx41XyP)k@-vH8^yDbH&hhN6-SxG;lOSHa zz@|G}V^VIMfw@KhH?592D^tR>(_Rzi2ajHKWgLC7y!N^y`ZXb2?00A^*ZJx)c<-;i%ewL5t2}sw<8rwv(Clo0M=sVF8}P@SzpB4$(1p4% zhJr1h%NIwr7%QV)X^y3!_a!LFr(^3*dh6(Kp;Rm&g3w->YxUB4~uex%dUoZ0Q zs8?{Oe%%N^o9%Y_>wv7#&zTpK5pS+Gmcn%-k!XJpRq^Z z4s6bhs$7jAC220lzqB$LOEQ1#T9ncaH;u}V+U0b|v-P5Pv9U%*orEa0RA_Or*5<|Z z-&aDS=&T>|9`gHc>|_i&iV5`s#~W|6MQ=)^%Q@xbNrY zK}6f&22-hLQG3TAP(b0HmqpYtxlnmm`bA-y$ztcNjDct7RduIVz~}&2{)`|fgvvb> z$7@XrF#amL89~G&HeOY<7m!a-Kq$I_ zt0A7*)zs5ddhvn`<_v_m0CWxDKPEZahQLEaOe!-oK6()3hQUL>%Cz@BJTbwc6(4`+ z`*fWn&_aj=7T~bs!PfvCc3%v5&pk!K<_!4-dQ-r?tY-U&0vym&6~PjQ$iUFiLAZ=S zm4lEVe0_m1H-cam1Z-em0KOYhS`Ah^y{j|dQBloFV2YQ4tJsx2qNgoVm>xVf6biWXV121tG_&7~X&7U&v zAgqHZAP9Z?RsJ&Cusr%jnwFLpm(R5)KsYcO0mK7*Jzzz^cz_lOyxa(#CBSsf;sn>5&NB z!v(Z9O>F}ixa5zMG13R$X&p!eirHrHMQ0JC%74QXBLHJ`!gtrCf zXhc89(69NulfMGj$WtLy(#Qn89Pft2!o5V?1N>TBy&I|c2ot&0Oi7EzBrGh*mzOnJ z!YI632%JL0F!J8uARWBL^uu3kyoahwOuun}$0P8frtmcb+eGfuy9wNL8WL zk^?>|Z9jH7+S>!*y~`UTjajBaYN3W9aD-%t92Gf68n1fFzoa!Mzypx2oJQljVYv$j zZgOar5)8PzCcLRu!d~}_`g?Ob`_(j2{>!*&QYuBy>6>R_G<_FIQ!}>1KGi6B-e^L9 z#NwJ?>2Tya-POC#L_%C+yh5geLsCR`5jDIxEeu*6ipFHX3O+~vQ=Vgy|D=RB7&Wqw zOerQR+EEDWll~*#Y}{VH-`i_KYCJQwd}(_}vL?E!{yP1ZM*344v3-@c5naht4I=_} zneqXHZ2z_oavlQ1QXRTI*K<(*Zn?e(JULf~_UeXbAi z%g(O2;1PnpAD3J5oFH;y)@~^mLy=>R`NeGWksZc(q7}gsGgLFTppL z-rPNy#P3ew=8kt>C01>i-fH+QU?A30|FvLsI_u=vDc*FP)8(D{^aiskR+Xd6J?e&c zyzWsU87#z=(S>KztwR~mY&#N4SVp^(q;a96j z;ks&|uFWRL)8WGY7zbzUq>G7%hwGPtFRjSdo8005k>LEjxjV{UduwXF!)uejOiE5( z*O}`43r|F9D(cOqgYFRC;=~I&>p(%rI4TmxvsVj}9!t~D8J3=NT6eSWS{I|P;Yl(H zKjxc_Ay*?9!KmMrb);3ESRdpSbT{~aJe>n@U2V9wW81cq#&#OJF&o=<(#E!Jr?G7t zjcqly&ic+j=Wl2BWZLf8?QXl*v!3_9uj~F1kt~9&q4E}nGxx|E|M(_9*_q{F#e!$P zAE{5ysXnB@ihz4#S}nB?U5KmxDsA-X3fW-<5pLpG2gl7i$+YyQD|ch!m)`^5*1^TDNF z_w6FAE&t2aY_bM9Ltl{M^H|6@fvmm6w>cIp?uuG zJXu=&%osO6h}IrMH*xX5k;#V=o}dEP_1zO>5*!E!)O(n+pg)!eKRlGi1N`^b-&U_z z;p)3>4;6J{>wj5uxqn)*Kn9O_WE*nLfq@17^pjI3gv6AV;`LXx@wsy5OKV^c%oOAZ z6%0)cAslFh0)v1-AJ52}^V}HfTlRWB^PRxOL%7~xIv?u~APV=oA_?6-JuI!M+TXP& zKI&oG27r0m!>8l}osV|pT)(`K@_)-T8w{mXNJ~Fq zuj*jsEl29!uChYl*2`AuCjFFolcvTU!V(sn52xw7PPzXfB`!LUr*U#BU0TQ!eW&qI zZ?)QBaxhS;NIbH!EIYNwo-(aG*SY?DU6FWzpLjALn^T=U!8KmCl~`mbLPB8dHkE*- z9mAcTY`t^iJ#~+KIkbdsvQ)s{?Pw_Aw9Tm?a5g_@Y{bJP!Ybig;tBtvD}gk3o>nfiArkyi7^T$~bZGuQRnLRaT&K`-%_ zIjo{hd(f}|cq>$ZrV0W?Cu>YR&hUUQXs1FtMb!Jz+(YNHQ0a3n;ae+W zcRIKa7q5u+uaBgn%pVS_5W}tQ+i$e_ADD=-DpWW>P*9}CnXk`2qJ6&N35yJkEZvCy z0&igiF=q6xpinV~TldTU6ajFg*hKtCqCdtY_ZVVOK_K1*B#rkAn za&;uQ>s{KdX{BHs=F*OA) z*1)u6Vm7QV#fpOfP?3861Nran?$Y#O!UY309SRIMKx;^iLcPD~Ek~IP6y|`q;hYbE z^#Y)K00lNdma*^nPF%V=EV+2jB1(Ho&uNSjxXc3$TpP|%>|06QSu9LU@jo7z;ym=X z*!>-gfC>pX#sd5T1r=88!zX(~k%gubQUZ}fXp}`jS@+NhNE!l8Gf1FKnmYraIss>% z*j+B-3x50<@Rcc8ft`EmHyvO=0ru~}F%1n3O&Hp2MFoKI0^ricd3huik-$hMaVK^V z6IWwSu2IB9u3n4kq`1Hiq-CW^P=HqeIsj3>f}WKyD9`Gb0n}l3wmh&80&qTEdc;(Y zMp6e=RaG>!PMl8Sqg$hCK;;*hg}@D+maLj2_Ls)%qh^jH&*p*O%-gb66R`2G(`1;d ztD%7d;=^SXc$Apn{vc)zxBxT=!cgw5vZ4Y70u*RA|M8}nhe{j^0-lUk;L7xiMjMV7{ak$E&*^m zz(ob7HW%JG_GsXk3w#%c&2b&g_yM0!Kbrb_(fnq`+SsOx2AhD^GzY; z2wjXz+{$NUPZW#z2DzQkae_&*KROVWV0hc+LlDo^-b?7G9TouCocE%a^(b)Ql=yl= zfQ3#8!|^n%@-#GFVZc#zn4M;|A0A(x-2v86^V~Ak&RAWVCRo^s+$y!QGvj zsplS{xcJZluk(J{{CW0p*F>{0|L!flkWlFI94&cSSs~XEWMg(5AQIJQ)v$Nt z0gSfHt6Dr57>5pLi?DK3Z1Pj3n)M!#xTjQZ|M-V{g_-WG&Fjo(NLg8(fxTPr`GZsE zKNw)KWnvPPD_yFv6mO$=cra#MrRPivtioa*vBv2u0BTZxz6e1KDJxq8kSLP!5;(<8 zN4S5QTVIxUbkuUugVmuppF6!L$JhIggFrqLiwbYWo@^i`ffQWE=NHt*0bi?GMN==w zj6qNrg!NDiJpkTIv%tgJiQIDO1HC3HmtOcJo%AE-%)kZE5^xvB?47tz-ayZQEI%R5?cdgR zbfxB1)wZ)=`6eF=(2<+LDcx%PQ&j@P3qW3pO%|(+FIstg1(Ok5g(q^3073hbGv%QEvlmTyiXBDK@oEK*>Lh`sh=s_qa&10 zX5#ym2)-E!tT(q@kF8@fH_&AR1iOEROl;;+g0UZd=^xM?=^Bah-l36SPjBE9s|fFV zTbn+oF_bhBA#)_V4-=YlyM9|OJ&_d^E;j1mgxSFH-V_2dG{CY;NQlOfeC^+dHEcSg zZUj`vxCA^-CiBg7MA6my9;44;xW;W_Wq=(TrVNb64%0YatX5vctwPi6TqMvS5)94& zRP^6q-J!Kz@rU9sD$_Be`DMM|Brx2_#C_YV;kFW#M+IadZkK)9N-->a@T-?4yCXsa zNr|HWB&&zx()~*;5w13(2d=9qK|p?kNQ;T6me+zfiwFj;H>2a=kQq-|A*7$u=piQz zMU>E#`GZ)INIl*C5=VlN%Hg9H0ipiCjo~qZdV-T6A>4S!a#{;!pu5g6Q%cO>lw*tcmHifmkq#bSk2-A=bzk z)lXFwgB>->i`@S=xRyF_EAlugXI7-jD*IQM`g;#_7ZiX$xv;VnUFzLOL{Vj*ghC&% zi|-KHHNX7MCtwH8nTZ#(LEFk~L{9DtRh_>R*5sJB!=m#rnnTj}o4+2Mf6vDK7Dn}E z4X?6g%!Nnr!=rM4Oe(S*#*I(nv1@Ax8^{7JyoJzErMKi*AL-0glN_kv_Q!?^%cO+Q ze3}W;yB!;|;dtEo^Fr}80%!XP%9WXGd3dh)jr!|JTDQG9>S$jJh zaPb%c-kIsY7p;w(aLUOt`NEzl$)8^!wz1r+_dC&@KHIczZZ1E>dFk-V(^l?F%>-`> zJuM=J6R(zT?xN36&Tk#Vh?JeN<5SF!f;fe>o73&TMr7L01vD?bRN14%p+?1l)1S6c$!Vg0fX<67!UTk|EGA)DYr^ zsrSmZB0ypZ;7G#10PPO*y%(+*nx5%z zFnmm#%%E zFKcVfTGGr^ATKP?lBIYqXr7cLH^E`teD=e?3XT5KRYA|U)8AgOCE!kvA+L%v_;oWd z3lHz0JNF8HB!x;$Jw7;2krbLfm_lWlO?dO4pWp4f_SUmCI(;?W&N0))Q9UIlM(X;h zoxAgv8f2ptlAKw1&AS_JPlvaVodygWFM<@1aR=TfgBkjtlO)l$GtD>2p{euh7ohBV zK6yE=%gI03nbIRRRNINlB}>uUcKI6SrZ6>qeNly8p0YPQ`UqH^zqz!uY1Ils1H0uM z%R%YieT>BJU#2`j_L%;vbG9Fnn6~8RfO+~6WEdk{{M?zxp)7R5uDmzL@Vf+M*f4qH?G_c_M*esT-n`lN$xJTILzCEIrlmp{y4 z9&-F=uJvU9_^*dEAd6H zrc?= z@TUaItUxD~p*IO@s;)yqTqz3e#1OmBQ1)sx#2-eBfE2`dlRtOj0}CFQ(tv;nkQfFc zUTfMJJdPe*1F}886=+CkX9E?{TF)c+d9&b{Y_5i^)UK!7K{b|%l%W(z@QuFp3~MLG zyx_yjlcONSB_s@oRzK6&cYbPcc0IsNq|})07TjHXZSFI0QmV2*iolZwpWRUF2Xehg zh$UZlOv8wjE}yTqAKJo2%Cw%1BewE8ygw_ockoKrQ?l`M_X3-#n-?GMp9;Xf3HRix zw759_z8Bg0wV@uO-kT#wd_AJ40 zl8D7goiJk$l)|~e>sgWxcRO<0)#)lN4xoCU^l#d&!fYCV0t2upKOo)&ti`wqk>KDW z;#|CV*K~jdVf~Ywa(>`iS;$iwVDtFtEjZf*M z%C@5M==NCHCijD)7xCaYL)PiHZ+crESVMRg{bk8)iK8!E!xvdDR(EWk|18MYGkCYT zKre*KnXl8ZCm09=wDK`1K_x zTC&Qr@r+7@SHEQYd})H7#9-cdjgvqgUwnX~r-en()|TGwoh0n|=pF0D{Lfw!JZnU+ zcQGOR?#;=I^z@ZP#P?<7=G~_W;0lo1-I^3}s|rwJ_#ZA{1$|zkS|J>O5}gtT0Cp4T zBKmx_0(X`4!f}Fp8B%20b4MmVF!>zNeT)(cdiu61^&hK_l>ZBu02x#?M~bJl<+ z)!LnAV#u%OPhQ@(IACI0RNM7}Q>g#XC~rG*C~v=1NKew#lkPHmn)Z#PUP-oQ zdH*&D#|f(SWf+e_DbK!l;@>9W2_o7#69Xmvz<0%()Rt}AlER6pkOxx&zP}UGPivZ8 z6=~^erwB-|&mW?1j-H~rzNQ?TT}0hq3r{dFrpn4wHk(_+3F4l*?o)EzcY(I=r{Viy zWE(D<1b#1fKLG>R@y&*8>1so1V8R}Tpx*?)!XonZEP1G-x9G-w9gkF)iD?E6z3l!B z0OYA=Vhp!?j|$oWpmxAV86YYH_RZlT<}4ZghTyvPP`GP&y`1{7mtX?`%y7cYqz|*N1m+S7rex;{D&P6ojQw9F z3GmSSO4c)u*)DF{~Mh>l>k+w&Z7%-1B+( z%Vk0F0Q%j!yme@33KI68{pl7L4~u^ebBnwF3fNA|B-099IVmbMl5TZ_da`wK!D%@% zqgKM0?CeTlB4PwDzqg$8a^eh3$_jH-pxtXb+0nB_kj>(eu;2fse`|aQ!Ev%?$j}%M zrZ-<$+b`wTDCVB|ew+soJ%hgES*nxQ*m%VUUOj95`XtP9S3zsSK5n?4=ReX1*r|z)vA%md3O1z z_~n}UQ!toauJg%=`c3b2nBr{ZOC7mXCq$}03{fE3JH!#tDp}t+?R9~63b0zHS!{91 z>14yR@qQNx9yT7pnKK;djmai_?l3XKD4A2`niTzVg^>rxhq6jB2f|YPui1qNt`H|> z?kuza3J=TB&CNkLVE&9`BQ(Ew9A9FEWV{osZOWR;({+{dFD@g;v?_$S>sj=f%_in% zM_DuXMm}YiR4z}=^*kyG3SnLugi-rB5NPPf8JE7rLvz^RlnJqp2B@_K1;E9AE-UGF zfj)MwiCcxhiUdJ_eV~Xw!{j^NBp36)MS8XC@N3S7e)~4J?*PgD?#5L5h?Eb>9@E3p z`?=hX5(?RQ$r=qEdV1!z(6lVCWXk%seX+apR}jn>u3q-={?jmo_rpS1y&{-A^Nri7 z3Ykx$3dcfFFsegHY{3!Q{-YfCDo*Z68o9VZ#p8GgtNo0CfZLRm)+6ict7j%I#TVrj zGVT(kF<>3z6TdNF8Lk3z1Ir`r37DS7=jG<9@dzUR~vkN*EmL3d~yJ>HX1?+q|#Pj<*3L;{Olb z4vO#HW^+Me0SnsI72Kp)3x&h~iPQau6st52b75)A*1)N+CS`lgIc?S>SGSzmu;!PSkFzLsGV@&?vOi$)@Mr*^}*{hCKM zcWJ6A>MZ_`eO`htkw%g*7MDNFb|INQ4N4RrCYi~5#PVkH{91&l&q_ck(CP5MQlJ+= z)b9VsN=bVr!_C8k3&^E>O&lpYJs4vK4OBPw!$9oj5=5n?&Bj?^?Rx8!OQ~*0Rrs5zK|09 z^G%#7ZsFYM%WmdCAv|so%7~p#EB;z>b2dCU zp$dkl8_`x$-+{iD(!qG8pp2P1l%Ku`xK!B986RRZB}%&z*i` zEZS;auu8D;>>f-5t6$Mf4^UO$Jwpe6MEbYM76p)?JZF0zU!U1oEqh=ggrIuf50IT( zwU7W27N9oyb67JLdHvOGw)2FS4_sViuYNm8CJ=Or`XM!B)nv$;VQFbAmLdw!Fjs93 z7t8lgC;%4|R=amQfLSzNp8m7=m+|Pn937@WOj(&#y)ybSMxA$U{rZJ}V7i)Lof`&5tpbX8BgOnbf71Q^1u3$L0Ma5bYhGSX znV6aEyLAB5YH?v9rdGVAwJqt%)77UGq+iZnz5%?{!ie`8C`xfT6bv(}b|=aClgcS%)*Vl-_Kuy1h9kWly1 zWDyFYb}CZZ#w3Se=-|KZ3-7H~G;pQXEeg(i_=~oUjGiq(L`$ST2{~O>$-KIP{tOC_ zHx)8E^YQXZ=(gdn_WTk;=D!Bv+H^q&T#6v~kB@s#Z-62L7A^XHJhqCr7uk^cEIwvl~YTIrcSFt9A%FO)_ALA1~bajEu*Z-@fU#)g@%Kt=g>3 z%X!s@H)5azXYW4$VaxL@*jo_p60d3wgL|@e>XFsvS1$7YEDVhwLMA?n05YD40w4#f z39!?Gh}?xS4USniHTvyD#I8P;XC9=`H` z6qTmO-vj>`vlw(TX0EP;!Y(wPUlf@r$TuftYq*rv(j`1C;YJjY=I2husKXhwk|x$` zIF*#LhXsVz`d;YaJr0|otd33D%+;|J1zfZ2H@X52Wp7U}T;?~9ifXna^_YNQ8i3tn z7It!C1yp#f>Cbn$Ur_)l<>mH2O#x65R*%F44%zdtub0M5{3ZjENR37@Pd%q(A0M#l z?P_PA^03#H1=3qGPoD$vWh;mn4D^Zyk_trO!%rsI*Vg#}qzCXH&!oMByJZW|k}1#V#1t*Zf8@(bXYgT*pq#v%%br}gIWcYn zu|(!pPkOeVub-V$Q=@vs1vI3{h`T&X!t+@?X->|}M<&MO6XNW6(*NII!L0#P5Qc}a zyV8Iyk^u9FY%u<{Ozlq|f`8NbCA=b<33O{i;3KP6PwE-4Tofd-#$$%kb-$0u5?^&9 zc>HF<0oVOuQN%R#`#>jb$p>^xanPdc@0*cHDtRTZIILLWn+nFMxp;$(?m& zb$EUKiR@MN^Um3tXQTS&L+CQE+)s$MX_@5IWis<;1k8yTqIfcnTOdu@V0&o-1ffW0 zSw?IpF6TxJinktc0L<<)jl!E9MiBPp$b-v+I+J|rAu!aC{FjO}Xe5QJiQXzr3a}P0 zEAW~jNKqJ?jQAtjoJbD`fn2O?POo=l7MdO#48=}@BNK@c@T3NW!_BWWwSdEWspgf- zQlU?TVOC7;CU&LG?TS)aA9TVJ3d#f76oq>!2&GYyPVZLlUir7*@Tj0)jOqL~K|fGY z#|HZ+m^e_pXfL$6;NfZ0xcwS)FD2LKe%ml0biBI|ImSoDKRvp|1w-aC4K`=no}jkv zo#C!DL^Cv=qd@vkT{Xu?p+ZXa|Bf0bCgzD?HQLUO@+V7hqyzPP?fQu`M@kkK z|GI)&by8=zgDtd0NTpv#LRx!lfZc)Qwj{e((QD`y5&`$&ehDWEbO$nrz9*K zJE*gsAx&+A+4a(eHF-iqlAc%!t@MMIGWa93W7VxSTeTm;4@(^?F)kbu911TZ z#E}bftRK(qJW2{BICWc4K74B0G`BjhZJ;kCHp$sWgSbls+4s#FE*7(1b)!J;^O*MomC&8g7eK>RwxpeOmF_~-lMvXJqM>vk~= zI&Z-Ho@9rlt{Hrh0Z@om*M&euML`|ym6Oc{=aX=|Jg4w90UwAFARH~L(pQr>Oi*nP z*~Cz#yjicgBu8|@y~;DHuU|6~6=OBev&lVJo$Ce`7lTWVw(j1P7>F6l)H~zXn5kP;WVH9|p8$#* zQv@tM6w$|r5{ByJ$!IT{TXL8%6_%dIC&le(T7!{rtki@cb=%6x`P1y8keuMyJ>uK* zuE3QcUR&t}4huRPhQ> zn{Z5ol+Hxct_GF(6C|-{B0PusYO+=t&ky$}q=@wHi@-iJuPD!Exip?t{-akOkvLj~7$F5S$EfY8AHEO%2P4T|IeE>i_=F9=6AHKeNlV-4y;-Tw= zWH_p0qs-uB1EP8;5X#C7+yFDHUPdOue{0Jj9V$@DDk45-YmU>zEX{#CaF_c+0ydRT z4EX78K_RVlDkv!MxwNPKk<=kGSRI}AuDLtjE~JK~fSJo^JJwngO{D-h&{E>SDPdq@ zv1^Hp;|k*0M7tzcqBfFl**U$-E7xYXpGAj|A249s!@rk!TgosU5V{bBr6c*RS2JS5 zvg_)(-;S)XqfflQIX2>aNKp4LIN*q%1TO*q-?`Me z9zhY~bk(1u5AQc~(5L4=M+3xVZ(c+#0)(w*W>`Fs3S`XWwl;Bmu6CM!O3Qq0N{y3{ z1`>+g1d@pTtaEp3tbYsu#GCP=*0SUYIG;%H!C(hRm`)X++-}}*KePX+s?9_{iYO{l zD;zWP@OVCV61gN0iNmrm&rZ~vR%-s5qtn)g_I%o0hJ_3Sa%cnUwRhONF5DIt{PJ$< zoE3Bcc8mEW`UC<8508Y4Dfji2HzGoYC36aZ6$ccKAScM8bQUWPH_h9PJ-BxXrUc)t`?BMxn6@`#EdP8@9$(zPIo-66*0l^sm3kTv2m(` zRqFTy1K^X{Eg;fCK%*_Oh=Q-_j?U7CH+uV+T&O4PK1wd24+J{YQjMNZfUB=> z@I0T=xc1@za6#c?HfHP1?#vmJlUZt_vUiqeXE6qKD``qB@Tn926PG09Y>{monCu*X z3u%C;p<8`Jefb|Pv29@{ARuUBV&;!_{C0_8mpIZc730`O5bJ_TA_&VHj(@zO*{c%u zlj;tFd6>+dE^@u0!6Qb0-Q+gs&<8~n>{r}%hzZe}Z`QdreR}3yUuz(`7^rVa7}_Gr zJNZqKtKo~Q1gdCzkOh=)ig2ykkZz%<4A!h^@YOHh6sfZp2?X-L-F9;L+@00tM-iTt#Y_rd(xqkKyw%InQ>XT4mK?Xg)@NFJx)Z);wme7L)UwXMyd%7{ z{xm-wZQ(N-EWmQW774?^(iTy332?P>bv-?Ha6!(Cg82(eeXoH+SQ*~g`m1OE^jOW9 zefuWbq5bEvtjZSb;B2=+lh^zRK*FXwQ)HXxxPwem#V_lz#I|REf%W0&zYi~Tem23= zerrU9rRB~xlaalQik76k*M^nEs8UbYlpC^1!68B@2-@3bsRC?HH5RJb9MIZ2I>44p z`dL{?DgMNprs(=#3zPZ&8XSN{3vGRMg~!2xF<==ne%gq!`}Ev)Y|he|2ya#b36cDc zfCy#Qn19Y2yyX$qj|v&7mXVbLhLkBMIf4UHQNa2uCpA9)`KiZ2H9f1D7pXK@@qI)~ zRh=6b57zN-iPf|=dhFqmv(@w5*FU4Ld{Dv9zUM~A?Q!wPLyWZ3FX7= zXHsmOhdWa!F68gHUtgG5uh???n|yFDzwY26Dj}Z|hHiZS`p=FfYFh7Ex%^bqy1%ra zbso{@c@F1yZ1xygam7iqCnmBEyYpA}>2KP6l6^{1ssB1)_r^_Bf-JP5IfHXlKlY%Yx! z3R+Z}g(Wc{FWl1i=NXE98bL9;d__gm#g^ANaP5P54Y#gI&|KhK;ZyiM5}U2H}*6QtyQod`|u?(bXjM5uv73us-|CPTUa4?V;$k*Syndm0oVfF?@8Q-=yD<+Il4T@z_iKTTa zG!FXY7K{WJIo&|xtK6-nxY#N_c%Nk%-*%HJOv`gv=2%HDSA(NBk3E~o4B0gHQgxwu z9K9SMz)3t!+myekEGUO6-Ly}33Pyr?xVW%)zkcecH8Z3CM=02A+3eqEa+}Mal4R9c zeVG*TdVS}fpbI-Od))HQ`uU4D%v&1qr{wU-3R_rlNs_Q!!P^PWNX})Ss+Qc3cvt{) zAh;M(UZ2*C4TVD#ffgm*XmbS_n^_p^Zd6T6ih>GDcN^7nWKK+NMn^)%Yq8oC{VxSQ zD*EMw5HA0bc<+4))8)!LrF($S()WzCUEc?7jDlQKmu61$dwv?hx|G=dn62-mwG$gF z+HOma(C}Rcl!xOCjI}y8z(w5Te|(nyTf<~%z&z-@4qXNqk1ctry#s7~D`G>us6qbN z3O-)o=2wg>=yc@rUGersc7)Qk{R?w@m{_3zIfBy(+$+J7K4-~27C=EUSbw?2Fs>iNY`cbYfgOyxh&5NoZ^min7zrulBiY$O;_C*dK3@kpJ`Qy#o zQ3G@K)`1O@gJ>v1V5JT@btHPsX53c!=%(U3ouzfsFb`HF<)e3^mEC=>`lMzK=DSYz3or8p55O`4#4I+fhVCn? zP1bxPI@-YDQAiKlG}l`$ zv=MOEW*!}3DdYeurS=9|M!MaDF-E}kH@iP{g>SxFP<*lRf&kD;9k}J#@%par7QFUw z%p%i)gH#zAnQ&SqlhwhM6_^3hK%jNOU{en0%PF_`2%)e>{I=TvO&w6-> zc;VTZl@o_7gYt4oH6usyw|hud4xU76tMNg3x=a$!#Br+lfsh8KWCMjisYnv82vT|? zqq`lhulQm}5hnIwMnvrAsiH`FjhYL`Vc2?@^L$i!Sn9xb$=31+IU6>jg`iQEJjqR<{uD=Um-AT z!oRAM1i%JbLc&}uxH;2M#NsF{B@mkJHf4Z=c0d%bFesg+`=cNd>{r_*3RCy2gn4D| zlJ$7oaqdX#9TPN6uv*HuZ@ay_B7dtHj)7b9aT&sA9~Qyq&nEs)6TVO3sNlOUpWDRT z{~)^m39%Cg$SBrO#Bd1U9B+$|E5%DH=7(%sh=CghK}KJB@{E!O^DB@7l35`PlaCOY zHNKIT4`L*T_dyu@9zULeK#>B}+gEE# z`tB}DrFs&m1AsUI2q+mViGpocu|i9ISN5ATeFK5IK91z{8c9Y8ly-0Dq((}~z<`EC zK+yZIk$IMQCjtJP)(ypQDgb)nb`Yx+VBwO!|6&QdB36>wJ`>h(G1})dlERSz*N|`nPUD(Cy9bxK|QySf1r zHm~m+6M8-E?~&o*G~nAGkdTY+CG7OcC1+EI}M|Y)va-+r|cp5s}7_w3Unew z5@{mKESIj8;p~WXJ1{30<#>$c*O_+7* z%4xdRNZi1eBh8ToUw@gK4zH9=KaVP;a$rlhnxi}HAD&1kh_u1_8xF&`7zW?U2!icN zfN;znqhaxUI5>Se#u3R4K{?7+B4hp335;bC;w4o9BD4C#1Q?YRa3JwZ1~<^CF$>pQ zvJdKPFGmy4tWf=7uu`h5pew;5EX|l)gt2-vit3}!ZiH}aBNnDlg<*cUGJ`gcoqsD5 zk&8`D4tn+mt%Wr}BPkl0Ss(O(P5?)l+rONU4kVu6cVqa@FQ3D!#i+H){GgrOSJmKQ z$~Sk3T@)9-AZFEmPV$h2h~7O%-1cInD&%^#rF*3)F~Sz#o4%K#&6M~P!KQ>!H-j;8`b>@{B4Elav+ikaBD&|} z(w_hELd5TOldIOi5@>>`EkSsPpd1=&;-4F;@Id!?C&^rrY~i2r+%^m_beF)^_Ceth^*&lMtxt|h^+ktDoC@jno94L8q`=%I+i>%z$sECrxI+Ln@m#1pW zE3TXDU7e>_^>i7t|0p)!_B}Bb6)nPj2UQeUke&#KvG-B|nV(G+59o#FG~F~zWj8%BAR+TnCKg& z*vjL?KK_`Er=d4Dxc!BD(9%PE=zFEr+l74Z{I5+XOg9R?~*RMf5nsny&S$PeHxvdUlc9Ikqc&7nWCtmxhs{q_sXMrkY4h$-u-U zDq>z4FB1QssgWq=lw!Yz0;N>7;~t#0EsGx@aUNdx#6&fai=$ssdg_bSyR?l zY>+uLXJu-bD|VE6Mi>#W*8=vmAl5p-4^Zg zhBZ+STxU&>r?acHo8T&!#;3Dq&~fnlm%5T~JT(khR%u-zJi6IN;WtU)rty5`8WaF3ER2HTv-PykLT4SgkGM00$>TxJG>Nh!`u!&Xg7YPcF#Z~;=LrkKTtm}&A@>eZT} za?v;a@H2H@4^SzLI(@sMZ#N#DNy%ye#zGiGJX}dtHL9cnc%|KM_h_)8Kaz0nj=ljB z%Dq~?>ldmY9GGfzn(Z!>U0u|Uyje*}Df+$RjSrRBnBLMU^-8elk28kz8SXto%63|FBIWsmQMN+qpKw#(rK%WyD zRee@XMlF0Ol(3Vrs5>ZA2Hq&;TnGS#TE!OF8|_ zIH#oRITXWPM2Tv#Hb0#&{;zBNgCFHN%Sq^8)R?j~6Vyz#BR1mg-v6%no?7U3sp;``%<$MAZM*Hosv6w1>8dLklVn$3 zZ*T-i=-ba{o)@bNGy3*?V%$|f)Qyhea|J?o%flMoPJpIV z%Cau|du%eX&mGv~<#}O6zqE9C_6+dL+`leibXr^;r+GMh-UrO*e4PSb?mA(>Hl9;V zZML_fJ4h7H>^FW4&3tVqC&|&(LPG@x70@l~w@_Se@H*@W4{zhu>lD4pDu{Xe{7b8( zOnKjk9K+2uk13|I65RhzxLjKkKUcWZ+6%FFU{4euHLHec>JqdEKT~`>-IE^@!0z)5 zE_WgHTldHBV)jq(fd)(R`jJ43CNgaX56&!c7Ym51;Raz0%h$z`8$#}&Kh02pqUfrm8b;(F7aGx2vp>((g`C(Gw!7!;Gf-PR+sux~AP4crMWj$Mb@o9L~g%tKgxnIfJUjyZG>tT-c49>(g zriE4*+;RK|Z<&{iUa^wK%{7xKV++`(L)CPb56=3+Lh^7hq)J@*CG+TPS0{T@^8^_W z4D8hG4+dFAZkPdDWWK>?QS7fE8T%fYm6~0K)LsS@__M)&yubmv{X#s@+z@%7F9pTd z$T@NyZH=KiN)jO!h-W1xnIKM+40~TmAe8?@o67%ZK?|EiZ>b^F@Cdtvq#8s0?=ouy zB+IDi3b`oj6*;g3n1Mh#@DDh3*aIh8KT)MpD3LUz3@+h`M@ar=XMx~nv*@LycD9A4 zOn&M?Y4Ij>HZ1UdzsD7m`pm3<0*T1|Rc!{1*Cd25e9lO)JU`9HoavXnRVof`E{l{a z%9l0h^0Oua5_GRvPGQat9+fXclx|ulbwBD}EHQf-Q|arVujwIyEQ-(0$5nA7zhx|Y z1HOt9Pa!F&TKp*=|8!gdxhmHF&!39hKZ3xY2=dD6AcpqMbW>^daDJsNJbJ*7C?b%P zu^cR~I4&!_2ZTpdsvFSO&M)ES9S`ZzEl+PHPL+1>bo$~`M*b!BKDya6ep2>6{e^Nv zd+~al8!i_$>$2;rTHS{8^#i&tEuzJdXDh-9PPWSUqwVT zFq?d8fI<7DApOIF3jcMQV-y5b`Wf`sQp(?e2{W;iX~%)b-k z%?z@GB8=!hVGv3G#8>eLZn!M|>)FEl2juJie*#G<$+cFOaGk|^Nt#hd9ms(&cly{G zUr~*Ss8JBti(ciLI^nCfN5MjugGcqsKlH;&tUZpg$-}^ag~h3@V0iVJ6leNlsm=|u zLhbX^gri#P9OcQ{mcq@gGD^Oml0b0rR;qW#@eLaJi{wBO7@L?m(3&smk=x__V__aG`ErK95|2QiN zr{sd?b{fyuNN%6avXp1{Y%On)(8A#&wY>+I+*0K~)K|Iuo+NsVIg;o~@Z=|O0o5RM z1z72guwxYJ3|K>_jCs|~pbe|vDG2(ln&gKi0f8V|<&p#i8i1HL%>sq%^Fm+)BS5K?!pi9=hfF=-;FPFs%QGT6@_x_7qY@}^0XN8^N*Lqgbai|LVr21R{3S<` zrFkeF0@a(+jP5S>iDC;Q&m*&N3vIi8q=ksl%p&=QV=fY1_V9{R$h1f2n-DbWi(A9CVkC9Jfld@6Ne zx@ig3Z9fKeDT_Y}HWwEM6DVbCH5o!qy*DATtgQHxQg}gV7#fvzZA!~VV<=!p>%&NX zGek-i{2pV^-dj11qKE&_umV6z%zdc?pY_JSQA?nT#h-80h84?3+;~)Bc-n>~z5%Bh zWNOKbHtM)a7;$3pvWzx)?R3@Mai)&*09C>y!mMLT%(xIbbp5+%AhZ&OLkB~W{3AJD zw9_=t@$BrZ0Y6c_lzbDPNTWi2*{Fo0QkH{T+hkHQZ>?rYa*bO@c*S_DzIvpbWqIJ9 z5g(^Df3td}oNpI(cg>AS`cmciYHL1Rq*g)aq=;uadV{4`mbKMJQVKWP2OXW8LBr7H z!{b{yjl0uL@Pp;CI-oNIh$w!qW7NM5a=NL*IYCw8gAOus*y}Y0by;|t(ZW4xM{l0e zNy5nD`waUD2{Ce8f`PK|_xkm^q-4We43dnJ8e(T@mXhy^@2*Oy%^7Ed0^ixwYt=PK zJN9xX@|!u~xNQ5|90dRGN-Rla4i@hZs@g-GxE|fs$bKUrh9VB3#4mr&B;>RT?qOqt z(6XNG!AKrK)}J|XH7EJ{JuK0QzwpB%F+MVY^}(mCu5P`X>ByE~*CL|Rf(x;EV{Eg;?9EnP}& zx>HKJyZcVhcgDHn+;RVK495`no-Wr~bH2~}yw6YV=8mD<^3G#K$G~$*u_0cr!y(kj zAz7tuv>-vwTTnJISeCkj-yWZWE8G>&rBmO(c;q5bi=nVr_mUX@Zi22m>$cV}#Mc7by5H+o zdtlid@!4{8Y7fqL;<}sr68L|*8f91Md<0Nefvc|^Z3e&utLce ztjGt|PPB9O2|N7k-oY5%=^|N#U=$VC4V1K8Xz09L@?H109>c!aZc>{^ez}AZGYA8R zig^;*X40vIh_t$|Vm>s3E>`|4We>w|t$fNPOv-g&Fmt@lJ3>vh;+}`%d+)xQHJfNJ zMeK-8a6{}DH+-mLxqbV!Ab!_-FC~g$P_rCIG}|t%QQ_%DIs0S<`aI8Obj5oG47Jd< zZk0WXyTX0@Q8;^WLFUtvv}@NAN-D zAg&+2v6w6FB@^Co@y2Pgpho1@t`+~C@$;wNS(>Lf=tc2uj2ds+1u~}cK@&62@P7(`|C9o3qUq@o$DSl=$}#CEXmCS4J(~0bi1l?w zXRcM#v+w!}Zf-U3LFL+9u?`_HW7*r;$;!F-%ye1ciGlTr!I5(SnD zKZT9R%mcGARF~(fKytP1>ZLDZ*=FKK0$G?A(WlF#iYLEjk$LtnnMfXTQA6M|JfJrQOphm0r86=i1>>ovofBuI;lvi)P$jWJl8#T+^tZ=<|H% zpJgwF9|fVVO!%a!^Ll3vDHrv%CcM&#$z)AOIyk9$^@&dzEM8RcXfla47t=8P93I6T z=(njl>TEJY9TwHA0kiTO%)Vr@suj&JE+zujcJmVoKbZNUzd}^*&*J5~3F?^?f^xQt*7s@`tVlmQWI1Qz- zWk?#KutO`H9beX^?oYz~{joH-t`PPUUk{?Re>fuHyba78tm{4J^c|K&nM1Oqpc0w3SoqPoe`QN=BDG_#c2qK z3|v{EIqm<*@&8;7H!eZ_y1rg|m?u7*`)+I^Ws(IZ@1SZPOYed zf|wfynGru_PUZ=4rr+WTVn$LAmBeca7UaI);WLF3heM)#O)V?=jbRGm%T`6lV}MEf z@oD$?{@htTs#s!o#qn}@t{HR7@(I_B-oh{aBX2mT#<-P^ssKydR=mlNi26;t&*RJ2 zu*Z*MP}kAI(X}USkDGp<=U0hxTa&^MWO7WGCr>Uu86z`bW|&$y$J3f~^5=m3vzZEc zaT`~ZxxTh z@+$?8)9im(t^}JF*oh z)Wn9^sMzmpy1mW+I)(cFnj8&cX`-ZSWsBsbl4qM^IN6sH?b|{Kx1`*1leluRIJo(O zE|Jd`l8NjvVu-8>FOR`f1{*79ERp*Q^$5j5?89FtjrsNaXB6|seR-^=?BY&ww*Y){ z^j0Q64;KmZ)RT8mh)v^!h)R?Ec2@7C5*(gwbhT-Qw4ZjwF{MB*YV#@#^=Qoex$q-i z!TX!qd;>*mN?bLYW_T`@lrZB=GkO=ZhP>^uSLOr8a3BI34U6~pzhl|AP z&ElJu_2V8hKQ$N?Q6+8M6ugL5;96AHMbP5uyFqvk{2hZiz+8SujUe0F{nHhRh zh)n);MY5CSiOW=($2s5nj|TPMYE&gjUk2=Asm4nKrV}(mLP{<^$;QIhB3xg`M-94->;Zm*uIB=8E?tR3m|b7q!O2i9)4iEQ1+BxjHterm<>q^9UC2YZwDN;g2g`!Z!yZBGH%YG?|d-`XLg*Q$3x= zt+(#8Ut?r^blulZM2q}-@L+~Y`h0xvdUa%DbMu$YxaEUPWcrp@*TW^M6uQIq z36hNc)&-F~QgRP0BSqz*`w4Sild+)e z_t|DYxruWj8HLwfJVNgN2cV@ug@we*#TDFdoKsZv)rMA1-*3k)J2kGQ83u13&!o(n zqR@SvS_utrFZs0nz6WadBQ!Yo;^(zp%^}57xghVnpt~om!X!R%^jS~k;g{ofb05Bz zmp{|K6{cU_8i^ZyR^(E8{TT2iieylMk|!tuQz*mRnXItpOGot442e6xJKi2~ij$s- zTF&oeBen^5np3_tLitvqryKpb`@~~2%Bh@H1i?eWi=XKfEC4$)`UVpPWJa)(xE9@0 zM(@f+uEv;a{jJ}=yWP4*K||PZPOo>mF+V;r1IhL){I`1=E}+GJlJ_Mt+=`G{cX>%Ori_Y!sUj?LkKCX*XU{s^rymRUKKf_J+7 z8>MtPs+3Qm>nc5vRM=*kTsa&_e?*1}yO_v#G;u_cACu3B6UI#(+v14IKWZ0}m7#y@ zl#{2-z%JExM65p#r0q^98?={z~ zDygr8zRerPjd)vVeKN8mFp3wOXAiAk1xLT`aL?ym!8bPnW>e1p>+pGc)+yve0&kWc z)K-iLhaT5}wjJB!+F;eIt`XjpcXL7L7WB^T)cdT1eM6v_VqV^u3g+SsR|H83R39NC zLQ1pkgK2RCtj*Kwcn4m3oP_EPt8^*o{q5Rl@JHN`CgXs_S}tn?=vU6SsoaiNouBuZ zFC3H)VIoHt2lFc}#hLxMbx~)dt{i&iSa4g_vr86xaobPjgswwL?dBycsRCFRuI1q( zl=W-TeI%tWe{|?T^5)ekk+qfyBO@~k6uD}?S{zKEE7l$oj*@$wbr`2gaw@9f#>x+E z6^!AS#*YSRDjr3TpBlfxG<5WO>omAXgA@6DbHMk*w|CyQm?|vTmM6@I1L^CHWDd`g zssB2w6?uhKtd+{&O!wP5#N1){^*EvzQ4&~GIy3^wgz25}5=W1{@#K0f)4!7lu00xxGt z8RgvjUHm)c$7aJF)^ySpolcbnOM9(VBVpo~E#GK-3s~z831X5)TtBQgkh+}5t*D;0 zJ<|pmhAuHGFFX4MY1@>q(c9LYgh2iO&aTnRn8JBE+nSADZZuIDGh`lq9+2QvOkwMt z9XzO?&@J8gNPYe&aD69vSfJg=>Lv7ema=Qf=(uKLl*8|#RMW$`)U@l)zTGz!Vg|5( z00fd%U!MT-(*W`1n>abIeIVdA+N@B=w90_3_1$CBI!<_Uf=QDB)0L$roU-; zv$~%QlV!VNwdQ=&Eu?7GhFSYQgRkjv-skM#+4D#BNLS!{IwP^%2-N6R!gJQKB`I4E z)YZ^0o-ZO>o@PdBM|=9m+n>;cA6L2r>dH}l%^FZoZj1!MY`Wh<;55To=Mm5EnQ7v` z^$Xgk?!$pybfgbs&O#S4X1n{S_Bou2NY@vycp+b{f-6_628dniPw%z0$EdE6SFWst zJ08^7A77pd`q{QT!u|d(tKs6Coy{_y)O(tMNRA#ay!;0Un)>K-UTl4bEyqZ|fpQxHScI?>}hmX~^wnR^FsJz0;uvciQ|#{0*+9s{X@clQrW8inIw zX53a$^|zj$J?URcIm3>fbrWBZF1`5GzocZhVz%5_EoCDy%Q=u}W6*m4RrGSs$C%%G zbTP7`IIxR$-JvEkBZ`FlN%>VUw$0-?;uA!h-pELq%9FMIvF(va5GV5`Bef^+2}O~l zD+C_%vkauWq-Wh5Km5K8RVVGZJ7gvCzMyDEi5B?Nbw%78xDk_U^l(%7dglmnVujSS z6E`<^Qi&{!g%y3B*~falzT+ow6Ead$-K^-7m_SDw%m4i^RLdAXotC#ftZn7O!LqvF zi!RVJRl1ebq&nm7wAl?BUo|0JebT)uGa?(mq@V1Lrf^K#!qBxKv=?djw*Z!C@D zg8t{*->9hM;pD%+4_G&3CVeqN5^v6MN#`=GvwQex9|zK)eMW9{yX-x31N!#>S-1&Q5&RF{gBYe^_HJ z#h=O0!RX25ku^1j48|(0o1uhhR|eCgWuLW8XX^h||F|Ne5#v)$tc0{>znDMWTex;% zk{?MBQKTOr!8&f}{?XU?c6+LiTIBz+u>?%Axt9>Us#Rr;YZ~Q$PJ`d*`xbLDj$J`y2}=EZ!& z=t*`F&B)2Vzbsw;cWYspz6WjYWFC2S3{zQFYq;DWs>!Mjh3EGRUxkMt6jd>Qc+`~A zWvxb+J5>4%R5DewM~^xb>6+pg84ri5<%tR3!+LL73ZDAB2jj!s1ZKqPXspZ6wbKH3 z_s#$$ZB~@)n^bfb_nLXN4tJK#9WCcSWtr7* z^7mX{EDi!s310%E#D&gLsQahLsT+Cykj}F9A;sE^c4qeIQKtBI(tbBawo!l8*k%yR zcX~H{0pkI&3pBcqTBW`E$Xgk<)UgZ?i#6qrX7Zw+j(t%;yqlDAY&*BX!#@YUhhxPf z=`22;-72|EQIa3!eX=#g>X|y1ID|H%0i)me9g#Br0lqkv#DK+sR;#ml+Emq`I93ce zKRq1aO5HB{RAhB9f14&h4G{)OK8C14L8d6A`0ue)tN4xg_S2H6uBYoXDL!j^{cO0^ zY+sbqN`Bj-&}|Xl_{dytwWvAp*C1(p9AQcDg`^}o7Pb~XVf5KS)C(L&hQA{n^^QH8 z(+@j^A#VHH1c-20?TEAaK3pX{%YtUn&>_GP~}dU)6} zdf3{k-Q7n%O1g!%2qr$J}?43(*rde@1(u5*W0VOlGGkl!zF|!<7wZ zPpIj?EaGo>qi4>SNQtt3S+D(m-NNJ9*FWd_V|e?A!*;s0=dN6-sViQj#p1I8ZnVG* zw9>~7rQzWY4>(IXOT%yGnWL%>=e>J-jar`tkzKo{okHEEQlPho$I-Pm*65~j|29GU zeu?;lMb2MMse^8-J@1~bt`(PkCShUPp92C^)p=SNB3`14KFjb*@Eiz=PgASpXL7qyPFEM~Tz4X@k)xzW24vm)`pEi^cS4^(Q_nS7qA6o(HWYjVSLXC2 zS5U|E3;eX&saL6-oE3xCr@nQii?eK0rnTjJK74}6oLtB26+SeI7d{`ptaid0vc{7> zZlEzA;jd-*IG+w?TIcjx%G`8Vbs>#88OKGS^id^uwV;BOd$}2=NYc>{0|iG5{1O6+ z=(!~&7@^{(c>#(IQYF6;NVvyeESR_?+4_*f@Um;L;^VEh{(u)Tzg}!t+{F=z_teYxBHjm z2(W;?m8LqIY!@V~*JeITNJ)00P z&TzdB;rmAb01#uaz`qVnnr-f!A*iGUfLYhv%m)I!Bz1L(LEeUV?)cC3GuxK7&fO;i z55yB&!hNE@b=tgaECcmddO|*{e-anc|9f2Nzh;*D)+v3B>kR2GFn0I5>a2DL4@cyp zrmS0GHi{ohFZ!kS*j>=m%d_OYk}3&Xm9DG22?%PA;0lL`eeP*Dm+5kHu6NDlMm2pLh2`0HUkEVPzy~tI=ylvG?ED4!nOxTa5Qq3b!RnHPqL(*T9bQ zst1z$+3G(N$x0jLu=^KK9Xl}O5jzs2<#E8BRCVri{n26{ee>e2`>F;hV_uv7Zwlmx z(>VB_SH<0ieCqVw!Kx$6R%Q#=5;k5OfjPf2g;o02+)S;0waTKRq;|X5p4lB=vAka= z=y<3KF|jNk%Qav{T)ZoWO_)i^(ig#4O(eat%Mz0awGa=dln)!>UM8Uy{u=f7YGCm> z9v11qPzT-$MrOh^vghCwqwgoQQh5f}?_$HEem=I@?#n=nsz;OF0^Urr*RXLr)c9(p zPqCt!t$E+X!gkBcrI|F@D4WpJaML-uU)&SfTvn0xX91av85j1d9HN>s;w%3~u87_7PvpOVNTiD7~Dr^Y~8$+ntNzMHl26S;8bouU=Wuv z%zH$0O05uO)8akdAP&VdkAsWr;ZhKId^|2M(>an*bIMp)R#J!$xbARy2Tp0Dl~u+u zAwA*9tjX(ngJT~9*9_@l@+sBpt!T|UNxO_Ow0;)(7QDjEfMwU{Xpge>^dO~Az&^`J z#W~r@6@+_0LTM4D$veB7opD%o+w|ODxW~`@R=rwgxcm^z7e!21*w!_Q+TM~86T@=p z#N>Sq#c6JS>A99G_uV80nYpZUmyMN;=pEk2n`M_7OcZ(!Qo?OH{e=KB1kXK8xp5A` zY^=k5WM%#BjRKdE?GRzUZfkJbUL3~0p)&kge^ctbQmYIj)cF`0#3I5{&hbXbfky15@EB%Ma8Ms=+?8>TkI2NY91m9{MeoTc)QL$Pn6{!+zZ0?GvHf^2+VF1sBv+ zpAn=u24u@yw@Yq^GPk!9z>sw3IlX2}J%ZBjp{pp)XrsCTo$IZe_OY%m^fGmH-Ir?9 z>94O$QhdpIt( z!|=Xk_2>23ZE#wM8AmA9z^=A^rg^@+#l1ahm>p@BQPr5A|5=SCF^(Xis^@5rO|OA< z1{E$S>bz(i)*R|F6RLX?B3966xhj{bkNC?^EVuPq7ugOsN$Y18C{(Y{W1-36utI4kBSHI79A=i|fy?_6g@N zAIPqkS9%tfg`(w{N;dXa=EALFZYoC^w!y~k=4r_sAco$4UGDS-CCGlxBx8Z~n+y(* zr7kO1h;^?QAkgKkCW|kshM7rMPNb(O)iAKLvi=Umq-IH$pPHE=A9Nt+@5EAO2s89I z=KLIaR~g)62u6eA00rhBXcjG0ylUa_->x$=qYfM%X*ZYTGT`kWfGQ;I;lU4}vu1X7 z-&>B`|AB6tj}}9r>#KmA2g)D7f3<5_D${LAsHk89S`zvQ|FHmw?2&PFWG~gIECBKE zfJ=wgurRzHEv)z-Cx=ih#p%VQlH<h z9#>$E{0C0?N8be*GF>64?0kH(pi=s`VdUq-7f$xKx}Ce;?G~cL`OSi({y&3kz-!bR z&szu34h3bCG8V|<7I?gv6u8^TWzekh1qydyNeLa;#u^qKkTvwZI1_ao5CsJV0pjl4 z-JLtwJNs9juDAgw8PHL|mU(qBA3zfZ;vg|YfeQqLQ(o5s9xsW<0jtniOtdl4xsRpj z*-E3O`6&`bTb#1m-@pF7bk5Ef)m3>X7jOR`U7ZGj3UjMdRFpXVV)<5MVCCjjpvE}+ zQWLq;i}s5BK6cD2Q*|AJm=}`bVqEe0iZHyYA)ad(M>jo2fz)uu%JLmbd1MA$spht} zMhr7AHKkE=H`@B4SVX4$^oyju9IKSU!Y_-B%A6IRwVk`lW9rZRxt;K{$8k8v$6v5W;DEMnChP`AW|+Ck`am|v zJx!M%FC{#rnIzd`^hEK0G%t<)1MWwzS*4TdbZdLE#vxRx#^#7x8j8rd7X9c`Hcg&xoYm zb4ylZP9UGbsOB5X z%rj^U-e(ke-8&{71Wj3cG7>Kw8~uDlt0QEBS|rfW(E~q3tV)MGB9S!-)GA@FrYR!U zkY4!SgdNOtA_5liQMA)`%zQgn_LTn_i?c=M`%4a1j_#VwgN}{LjVGdn8!6jya z?qB0CRV(>l*KTxgRTbjn($H2Lvh{>sGindq_Cf1w9VF1X+bm!BH08$oEYE__rwpxi zUJjzwo$3!d<<=N9^tI@3dP7eLmnZs`AKzbGhiI{M7)TByk5p#W4UcMcG^M64*L@q* zSLtWAF_%PJjhvlQ{$xc-lreJjQO%^#hfG|e2}BX_WUey`E!wc3rz}DsH^7FfqQzUB zz*u{FX?wiwn5iY{w;&I$+wbuU9E zyKlrJ!jSGG99F;erf^EM-lrpDLh0xa!P3BDPoo+}*XK?V6PW4qs>bAHs?*;Z?+z{A-mdNBhYK$)Ho}kr$+x^2^hIta@hr)7_K1NVKe+Rz9K+$*qK;t_*G${q>Z(eCNLug|uhCe;An)!Li@}e1so0u3wx2<6j^yV1WQ=R}nyG z?2P9^AdoR&Y*gT0>i$PV1vP{`6+n}sguD#t0{Qcx*r1RBXs~Yp@O9d<@)*V4ei{j= z82@&(N}or|1V-)Ne|#=EIpiFge>gAz8U4q)2PMP7QVVW)Pv_a@;O^dDPEAeh-kt?` zj{~s{098Q|V$(nfG`){-m7nXvqM}e3aF8qAhAnrFjwF?_{-NExpYK=JFWmtgHoL4W z!q4x8rx2-LWnwzN%USbmTa;R<`stV$Dgc?hMkU!e8)T-&djr@<$KKa1w>`|>zb|L? zl}t=1m4qKTygM=hAa#6hu5Yy~ChfYP#>KQ}x{`bk?q2m8;&R~4dQ1!RAP7)vy*dM)Xpzr%T zC9xqbPZfd4TTN`&tV^vz3x%}gk0|c&-lw57`;K|O)8mQ}3O$Ap5)jaj$9#V?DBr*% zfs7!-ARXExjq8HD*68qy)d)WE#pe4<9O?{wBlKQgn8(7H$|3t-O3;I)^hP#k+z zU}bUIVJzK!U2>3V?7rFG_?E8Lh=RgMF5CPinA6-PF9NTeb zlJ&O+5G8q+%rstZ(~)ZkoHtWFyRO;p1BZp9vyT~+H9b1HXik3i;NY&Geg4L&*$_LH~w!0)33d{RT_H?A|$)hhKg@1AAOyUSNfW-Z8?6f zGF6(L`#iwtp05{c1@@>(GZ6h!Ay$gBY)HhLX*n8xOT^0;RrpI@A}BJd0%mDxeQK7s z`ZMJgXY6Gzka@7F!?76{cqS$2rndmpMsc3RSkOXSr*PqV8yGV@E`C5%5A`8N#9l_z+~KPYR(TE1;X zX}`C`l89}FoHcr#D}3aP);={}DO_@J@@cgXh0ilMtVf>X5xuE3t~Qe-2J2?~*BZjyidh28pFh0vf^Fvs58o>2|* zEL=F7r_>&|Q`Cw0y;;o@Bi!xnIBM85^bKEXWq0@(KJz%1$%Zj{ZoCXPCGvRoz{$JW z{-6wj5Ob9=udcq(B!<1efs6dET;MvP%Ct zL2}462FPwZ2S`5)J9I-Z#sr zZ7Q}Y)xDF!$j#0D4|lm*GXl6O|BKK(Iwv;w^?4-`6NDYIB{%Msl>R#`-z*(_14^@w z=V=cICnu|rkPyBGdwF>|#K{@3l`xAl;6=zVLaWS1NdQONw3ZkBJ-`Gl*(e!@0#ynq zOsZ;>Xb3D^TwtTJoU6AcM8;(jkEQrGl)yu@HEiq6?%a|t=y7G&PnlR{1VsVD5e*%k z>;b(%e9GrpC(sq4R?64_@AxzTWd=m)TE}h0SFc}#BRFW_aS)`Bd#}CDVgMT097vh` z=l7V9W9~7n1=LJTOiXZg=l`OwjMd!S{MFjpWIRWrsAQnK8x9P==s?DS276Uwy}$)N zuKIKNe>mJb2M6M4a3BWs*Vq`^e+ZA;{VM``=vA_8*Y(Z@G2%jA%PIdKnTQObQKP)O z%>sKXc5RaThVFv{7q{+g45ym7n7Bk*IQ|+#^f*%lAMDy2Q6sMG*Yck@45%<)us=%c zr~I@m`()Ic49Oe05c7HaOyTui#7$t=#6hliH`#GAgP?dZc64NMoGZPa8CN1bDkG~R z4*OfJU{b+=O1#G|)_{spW<_POpa5oHSyM)Nfp_tF;3)As)^x@Amc*&M6brDEy%###^VUj-4IV= z3jvo$%GEq$D6I?1x`$(llA~XB&w)!ZP`AiBRM&ZXl>FD6i!Yz zFR@Qj%&I~k4@nVDf#~tk_M^}69{EfKV?oi_8(*4{41PjxD)c6qLS#WxB*86w6K-n; zYFwUl2mc3n&3ee4QySJFuW?d3d{X*pV-tOwGtSRz*Tox#xYtGQropOc0r2eIM?KQE-+vV<=_~iSl1{#kgy6gzTfJ{+9ip` zSDJXxVObH(1+dfn+P#giVp0T2^MHr}dD_7B_AvGlr5@WoPYZ#<39;u=R*48jT4PdB zF@muSC@5I*NJ*v8;Ec6Qt*jz|q>96=1=@tG042ZLiOl>j?qSh=|KBaXx4&<0ZvNYf zD|eqyN$?V@tE&qfgsAVh@}p*)1hY}DTm=yGFH9130f+*$2Eka%@qda_&l3^wRUw0$ zo!jTE8~_X@^1{T#1hCTFJv;D++t~=QwNy0utK!KK*mj~$CrnNBofA5G<;b(!!$jHF1 z)owiD`-9rXB^#^yn@2t%G*3x;$NDYVkWKEC~~z=wlf2>+)Uf7I;V94XOle# zdyaJ~_;VevXkJ=lUqoYnBD-IQvs2_|4`__p@?>JD$T;dITK~G?IKx$2$9YSY*yPb{ zxU6b6sT9pp-Q<*1`3g~o7B<2GE*ql+@7X%&np6AOYO3=9qZfg1Ca zj*b8~4k1ot=Z=VZeUr33I{3nwOe$oh|G79Uvy!8aP z77%Xc8f-~x7^tt{^_m<^$RDc<%!^9Ga%gs%qjG4#?@CI50t61t`cG$xyT`}W2@cVM zlm9IGHABPPEB``uz}#>dYeDo)P9!2v@dy#x-}fc^#2|3L8Ve`ve^PUpy$DZO($c&pM$K&Amd zZ{MT?GM&f%{2BQBm&~*_`SyI9orgyn%va>+=Z8Ll76xkV{19lI{3G`IlYLZImjr*- zT%n?;Hv;Mw05%5qJsmy07SNHxaT}Onc9Xp?A5B)EXQq0ql2u2S&BM zjGOJTD)+CP-X60LwW45LOPT7O2cHhuF(;WM{KHrG75>R9e_OXXJ9iqX;~MDF2ny(dv$ZbVVW*6g1!?F?;Kie34MP(Uvce6_+P zP>63lL1HF75KB8&GQWv&5Gc&0o(&pS8`OOU(8mvCA3zNcA`-Y#!Op>aeKE4G7AEi_ z?Z2JE{~4Lf3#gz$h!xMPB;~~GUY@#fXt{_bBYd&AysQY~xc@yTW@KPCh5c{vR~R@I zcQtc1wsNbHydpU%2mE%e1-e9xZbyRxe~~`F{4QRu{L> zJ+ps0vuUwQDSrvFtr}Fc5!|V=vq1j_(`!^)h*i3uHX~kuR3Yy zgi-V_KA+^Kxr|VWt|B<6#=9xJ6=*QRP321Kd5J3A+qB(1iFmwR8@=svY%+aj0ur@& z31?rPoUCi}nsvFS#nFAqTp48_J*=1Vdf}L0zlj$s4mO()H}qm9%UeO_@0~ zpwSHsf(ZWKi@;2zP^NA0@YHo!4#gFd;+0rz9)4w^^!5f<j`9aIkat3thV(PZpDYx?QS)mSJ<>PF(zyS7Q$mx)irQX+w1tGQvt<8#{L#ch zIKSt1>7^*kz2tBK-Oj88^e?gUDS1zL@=~V5XRnMVr22jr#MmZFZ$jY2&N}+N*ew#@ zTt#}y@gwmPjTY1oiBshF+E!2)Q>|=?mJ!aUAvc+*KBD- zP}ttr>08n1MUU8?)-fc{34PrWi)QD zk2JJ3rk*5HbWt$Xj);x?FtW+l7i2d)Givo+t;Xj@K0W22h&+=o=7COB%N!AU#4AFB zwN*ab7W0*3pmrg1TZQx)jVUp_()0X&YFhPt^q$modLZBTgNqU~ar#nP!={y$I=x_< z7lUr=_sr+LYlfs1V1E{nGLhg7i6+YZbx2MS{-sW_&>&-Fst*KIAWD&Y{uMm_JL=OE zZX$;Z&YvB(U74q@NUoF9l_uc+bKPo6xANM<2OGHSMX`0GI6V}V$ZWMl0xJ?0)O zWW-6&RqojoLLM!kcgpf-fg4{%n4(}riS{$RNK*Bz?H(%Xd;a3>ns^N?%52$mIiFZ- z#r!NGBaiV6^(r?LucOw9hgQI>)ub~A$CUn72hNNN_H-6g~{Sj%KhOHBHX z^yIYeIVzlr7>vc_qky?AN)J_vU=C3C|*Gi`ylSP$Y~oluzEkaI~? zWQTY1Y{j-JF`?3mUg`a&d_gR;l~eCIycdfIx26O zhKcY|+S2W!CL_}4a((iWpS^|%nSjZX%NS3ANvGJO=D~W`cPeip4dbGIP4~Z@-})XS zT$oFejy#`y)S8hk&($fA=nXOHU@vzO&r!B%yo&5Q z`?Lc?%Gg9_sk;)WP5;%L} zO++Kwq0QCqR(&|hCtndnu)f`q2TFMNjp*o#>7rR&wUH`p)I`pyKv^IuO@p-Q~dC!cXw(M|ZlYdoiY<5a*;8}KK zZGAUtez%@;_KH1TSjCGMn^e&xt?+7JXp-V2^O|G5PJ0yL1<@R)*hwszj}b9}h33m} z-zFXLpGbkxB}J@np=Uh(1bh`)K@cK(`LD{vbsAE17@-%mn)?)YPu${py4eo_&Sl{n zTGrnCQVSyEMP+v5UK7zWIOdkbCetM~;>qoPFdljbJ*zcU&I<5Uald|x1q@l9tvM%$ z_NcaB$EE8yZHh9rH@@%<2zh1Cqrfrc_U4|?Qx4DMWA2V5Ar0E03Tu2gTr@3DLN_3E z%42QIV#dmmxr<7ue5mpVE3FzLk$R3X?bVx$i-A$^rN;Amf=_umkAsP@TJbx8tm?J@ znCqkY-A>X<$VD{}!pE1)V~1dA&U#d5IhL#JDHXl?xf#!%P2nkmRbbg4M}@_suvP{> ziug4g5%L!P9Y^&u*?2W#nj8)kb%(D@NjLyR@OX#`f(VKsJ?4QxRFT;4M9#qtLP6UH zk#4X&|8rDdfAhQA?uEZhug>Rzz8UJ!sK_t0^k57s%+VWjYYjubM}h{KYOM1Mc(9We zj}jLS6W%2!OAJl>(#MRymg?Xs6?lY4gbWc7MWapp!2Cs@h~KL z*oICfM&@mD6vBY`m??RSgPL(6Kb3J+O#i4A@Vk~}KL^b5ZySM0MBP$8PQHJ|Fx zLD;o|b7z`eDaHs&?j=wC%&GDa`R!BgdXvy|GBR!Q;HC9cw9XNG)6dMPle9t3A9ATp zCGD3SP=_WVwjLgB9riYEf5y(8tPtiE$9LmN5j}avz2lvjU3t^9X?j@ukeu zFHaINDSPymPwq--n8Jj|=+1Cz+&9nqXZ4mZ>l>=hgO)VQ?XjUXl;NO3G7_iiG+Bo@-=^rYZpKcsbMZhy! z@;!yEkA@LKfsvh+!+jMn4&X!B&X z3v{BUEz;uzft`EaO7S4ka%$Vh#B=-4)!^=SM`xwHvtoYaWawpbpmIy$-XOiQj3?E$ zY_n$iZkvx$N$*Fp&RDQ|F?1xW!b0Q7pQUdexdOea-#G6)HIrJ4zEsZI;iK35vayU1 zvGc=gEUNWG-uCMk5aAzf&|t5&(5OoJET{c%*yIY_Er^^@1R}K)XG=}oo(05L0ZGGK zHza@GVM|QAZ7*oRu&|*0J@SZ}_#-qRB~%raJKQC3CQdjk^@^6srTXg^^p&SoXCxgQ zh{E=HreG@aNa^|>H`BHtHxqQ1<^1wkNQwufQHbB(NR8yQSNH;3A5GY)1P>;Qrx~7O z@i)GLcZp#a-tRyB)P-;OFlmc~=R-E|OFv*PaS%(_DEHYX;P2!({<8%AHeWgxR{?8vHD-Tg0EcqqOY`g2ez6cwY+9rJxw{rF0BdjnoJQe~E z;Ba?#mn(NUR7Y8HA^MrLro}fK+Awjk8$C+WwJh|<_LdPmc8m0hlTRJO)MI~w$x@5F zpl^8+nbOs$=Vla-1)pIQvM&bczdiydz37)PF5AxKkE8wCwor8yiK5c*62j%MjVhJv zr)zTThkGHr{~L9FqtT`FDWWM44@QKCl(7Jf&mMLqCRh3h)^J@&c8hbEc5tv1U8N)c zlaEqA{@i0ME2afrab52f}6qVC}rN7G$pCVf^$|vH>MBdZ_T;lzwGU+ zP*!f`)DIQJ4h0n@%k9lt9d70PNwdtXp~Z8o7SvGN(lPvgU{r8xHq{|N0JgLt2}B!J zQU^k__ren~%gI(FK{~@frpXBX(u+xxrKcf#f2|%V2Tvi7!&8!bX?^uPJw-mre`F#v zWBv#(ti?f2M@@uwe5uG}_~J=OS=BljXp{SGhz&~u$@ZjUarD2%A-z~%ulxkS1(Q>n znXdYuJ`G81D;17t*IK|^s+UW*cHDHHH-cXHd!9&-GvSSKzSj?ew5OpUCYK-oDuah}taB_e zVMDKD#y-8XsPZVVe&I+C;*IdV>2B_`)k~0wAQ5+Xh?1^{Yj=}1+iktFkcKd}ymxbO z3{Ds`1ndLfC5H;LoxWmq%=^#3XFu5|n~}iCpPgr!m4^8IQJNGUl17GOh$P46=0mrF zrJS8Rg%me3XQ-E=ym|BY(%rsg$@BI+_4euiFm+Z@aYbFWCIo`J1b26LcPBUmcPrdo zf@`qg9^3*&aCawIaCdjNd(wTo|9&|S)Tl9ls=fExYt8x1cz5UC*0Ot9UtA8vl1ZBBB8hmzpZNa;qg1eZSt1x1cOM#4Uc`kmAX{ zxz4XVG1!qC2DJp;W<8o(@~_M5{lMadKooqVXbAHbz@JCMClbAUOweb-_T5Dwco`dn zICy>*#&vM$-(<``da}LDX-)5{wIF-->vHaC_nYmwr|MZ{p)z8-YDnIB z{=tN1L>G;gLIQWa@RQv(&Yb9p9nShR(_A=vY3IiJk}9^(IyZl(2nz{^l)1!Mob_}O z{1JID6pA`VnbSGtZn<;zpa7n2IbA0z{h+}?ceBJe$ETwW>;%ZOq#3D+k z`dU!;MD=wNx;f6P#nznZK1Z*59CQysDy~l+!q9X|D&(j^&7rFvLcZWE$q2k?X#Q;r{xv>vj18$K|t9vWfUay z4U$Vy-ge;ara@2@XfRal49)g4>Pz_djFN(x;$$>fNn=Is4-=3K0{js zjWEGg&CT&EJ4C2!fhyo$QNi%cQ*e_@6WSuXkeoyi;YNdHMe}E3L*+y zfE@}YSrk>XXvmB`kU3Q@7Ah9!qqM9p@7GI^^EFe;J^HkJ%dpEz6W-kn>QimNq3E3C zx_7pt*XK{)O0UianJ2}Ylfkf~{RC=OUBhX#ux1)D@c5-#^Bemub!L@b2U z*Z2pf+f7#^^o#92+`!TR#vuw+Gq@@UOCYWs?;~0u91Cz?kaiof3-6G?WoBlhuSs#nre>wuW4%w1u1H#18{H)XyAe7YSM7B zjFTWROz-e}1}qOBH7l?>*W*cG0o^R%!@xnb(D<}3R=Qh$r>J^m^MD;%6_J`{~*mo3KjgiRsX#!<`jIQxJcGmeYOod zR>!wz>$fAVMbGt*G~FbHlY-K#Fl(QM%Z_heZvXXPc=ou-_z9tw`3~MjPY+t8rX=@G z94ZIfy(v5PFtq9J|8d_IPYf8 znnCfS)&HKqK)ko|p??zN7Bd&68~t4Sp7>qC)eQ0ein25aqCKE9m9z0R=xq5d`23Ht zo_uQC&+Gr7-M8NnT?rYn#W^w~Z|(pBb3A2%zys=3d+`kF%jByrU22>+9tiwZy9W0D?~+N*2SlUjQNaM4TchjLMA z-sjV7jxlX;8r^LXnu~!t94W>>b~R122D!vaQthB`>kTrije%E}o!ig$y(i~H=b+J_ z%kh`ePD?4Q4wqHJB1WR&m_1R$M}x4V$9WiK(E)`9F!%kUtIL1S>J`ZX=&+5Ajg`#f zSAEi;Yhr~X@C0V1ho_tURPcD7$QYGhLg%=Bv2{f+X`ffz3NZ9%SToJD*2r?a-9zY^ zE3%Se1J>5ZkE<(%dZ)6a91J6(u5J#0q7V~WZbEV=raen8t*yk7^mV4qP1Iz9mGd`A zs0|NH)`~7QVgcgj<^7|T_c)}lAO>*z!(@H}r1KQ}fP(|x{ay8QC7A%)C2*{Itov~T3Yot1`^kfff9|X) zt7IU?Hy)VFa@j3OI64cvLWss-uu>B}I1DW1_U~L2NQy^L;aga;PDKihXm*4ijdPlvFZOKp zBdBPk^o9fb2^qlBl)&tdDXRh(u?ZzTpYMHrQ#d((mg|*I0Z9LMr|O{GNX)HaC~)s4 z&-NRAMpz(A$)p3h1i!kvD-`q?7J9HwnjTd7H$&)w|IJb zJz1NdT+mLdQg(M-CN_wtfKMAopDK-7WB?e=ketQnYWWR+V`<=J3L*-uU?GRDPM`(7 zF;S_AiLFsjwWhFssmrqHtTggRndZYyk>*L?JX{XfYzFiCRQ}e+1ZGU?8>F*~k?&UQ zl(HdqO^xwiq^W_F1^~NEBP6`pVIYwN=aQe=6^RWwsI=k0EBdP_R-?0%H{nh>S^||3 zeD51~bBlrSgoai-r~Zv*KyA|skB_eaB!&d_hZAXWS8Sfc`^}r%l;1G#t@nIzYF6e~ z`?rHXs5x%7QyN&Dm}2gHD!s-xX~8GXIa80B|2uWK48ZbckjiVu9ZaO0=|nT=?!=gc z`X5wVK*#N3@JI}VrfposY29> ztNRRE-eN?Nt7(!FQl{NmG5)@*e>PK@{f=%i+pwKQCUdiagVg1i1T20({fvOz=U!J< zRvY2fSMzd(mVRW&=0V}#r>;?dXT82#GdSy5C0Pr^yvTV7q#{BrE{%qM$F7@Iwq*b8 z=4$h3rVH4F$(xceunyr>#E3W}hZMFL>CbTldKHm*w}m4CfQ2*3E_TC@~)wn0~B&Oiu(J z*LiXJqUnjHITlh zEfKJ75&?=MvIN-T;pA+!Q=GCm_TR*j5{^6sdI7JuFP-oA@4ps7l{#Q5QKD}UEn(FI ze^S2q))=aY&13eEpVFWi7A&YE7Gq9F75wtKCjxZYrlzK@ZrQ+0Tt!=3#^u^cLZzUp z3MqB;pT+~Y^DE8(PMn;aB<(5-v3!<{VszMt#a0jEYZ~v zP;tezoOp{iWv=}EBxqmRe0^KJ-<7Gs@Cb9O`Np_>MZWo+Es!Bc>=W+CwBu>ouiO5u z%$%m>*sL1Lso+`aIW$?+UiK5sXm;35Ga!7B%f2+D!SY9%u!Hw9;)g%=LUMB1zWex} zjlfF6Ppp~Sb{bmENOqYDhudTn)B$MQAs%#kw#5i=KbqsSt=P!1`|K8MY-@`c8tOHZ zO%+u=hnT39=5N+o_NG;-?#>3mCbXQ~Yp9L9&HI^Xj|fJz%)MfZCm0234>}~2cAR-n zuU4C=vAHia4Mz_=3&+R5<_ACD!X+ll$TI3w8D+cR{C9ref6bO;K8pTuV#*;ltWTAO z9G(;`eoNW6Anm~bjGz}AfFn;y{xDqmHL+|+xS z(Bz)kf+2rSA5tlFZk|}zdrpZ>Q{-0O7ppEF=%+b#a894~O0ag4WP)FwZHV=ql#sDF zQe%1@$4Wn=E_0IisLGPVKg8C;Vf;iA{!}JZ9Bo~FkE_u`QNd6}L{i*mX!)%m3N|=S zM^iKC}) zcA)SzSYaPqkce4-d*cbp6SLF`MCk}1Z8ad+tMTx-ifbG%tXiE+>?gw1*p94fUwNsp zco7A3B(U>s9dWw;ZZY@mmLC9ujh#n5daTW?`XH7>yr6%gOJg!=B&6_rzlx15p}?Id zihj0#&Z>||{`^=~fKYeqI%jU!C+=G$CMXpWRCUjjOCkVm6>s=@1(K6v5V#Qe91P*H zx;g>;URDyjQ-j_M02K%D{67r(t**QcUO#N-e*I1ngfPJkcAQdG*O11fbk!fUX`E`i z2mBwkcPnn}CIOE7AA*BOuzsfi8m}G<;{pDGrUTtnr;WSzkU??v%5n)*5f0ghmO)%Q z!u(%TqmhGgz|JgvCe+oU>`+isk!p7@thk-{FRR5lO~dQOP=c$6F8zxfm1`250ePMM zkzT`1u85c*gDm>o+*}rqQ?LjL%eRHteiNBQ3BVa1O!8-bKD@l#`hFxEA(A4BERmuX zsLJ3G5X!2nsQ`TfZuGnIcZG;LER_bO0L@`dC`z%b@Okz1Doy(K_I5y4!_@IW2J!L+ zk)53l5L8G+03!*YYDU8U`;mnW$Yh5F_Nk1C3FM_EJ{;m)Add_)x*wR{^_kT2p4Mc_ z`zm>$tSQK><_^JH1}AgWr5rA#OSFU{H-BGAS9RDIV=HM$u`}GAq4eDsJIbl9(jq^> zS1fTbi=&~dyPUxP(Yc}@pkq`~UA(t??kl_eebwG(&1rjdb?!e__V-LwD5W@^FAQH& zmFp5kt{ghb*5ldXHkuPT7ctGG+=>k>$>P}14AM`imt_}FNmgL4-(VCdFHH-OjyjOT z*Ae&FOm&-o@=g4l9+&)WD>DX9Vr3L9G7H6;E+MC8OJTqSiY1H4U6k2Sh(?Qn-ERKg>z&~&b>FSvCz~2XI-|Ys ze6BdJ)Dnujm^`ugooP>sOEo@xya{A1bQeawbuTO^zJcMFRY_3af1X{CBP3MAhKPhz z>v?HX-SK2YkVFUl;R7MzFa^6a2sV0jWa%EXv8lX_1#!SD~ z5O##bK8Ia+8vYCG$JDRKsJ_|_8RokF3GICqNbyyM&OPxPLjN?$)Xs0?#ILl3{AVS3 z<&jtpZ%`9;t=8-AFxS;DG>M?7k^wc&vA@q1Y zt#P@`h^9vigdslKt8%d3;_ejg?vsddvyJw;8Ww^uOB#B%|JpTt1`+RYN{OlYc(t#E zhFCUKCz3GV6YF4G(84FgHNDfwLRp-5{B@cK8JO5@`viYwkVWZr11aH$pD)C>@>MV4 z@+=H4-P;*e+9fBo@}Ze0EXCeJ!Mx69>4(pmZU@D`eH-<^`6`hVQQclQQ?hq?MW(@< zmi3A6(X(8Rr@5mXpzH6=XE}#Pj#Be|+ukmV&8z8R) zBy<1ba4o>NIzRR$nDDwSz_qsXOvr?Mea8m(e87sv@Htny!-n7#5M=;3P!31Q#pnpJ z1^vP7ppiNSKv)Jrm6X0c7++Y9CzKn1cEY@uyH?m9pX{{Z8r;V@4kAWHtreJkx@uyqTaIJ~5zDvzVoHX@9UX$y&jJKpO}X zREWU}EbTu{!>mtB-v~h%qqSCs_5Vus@%CSYFsxIfx0ENHCuCmJ1sa;`Z9`ml zRGiln;}LKsR~63Ho{e_I`Fh5N;-+wL+Lb={g8E9PF7+b57G6oY2d!58!7B+v6D7zjj%|YX}+mUX0`?(|&TbO`E8XF6W_M6t9Y3`dX zU3J~@DX$qm$D(~J!F!=KdC_Ai8tWw0toquo?0Sr}Q6|ta3BPsj> zSgc+5uyAskr~%z-JEQFL)-5F>c-wwW}_Z-bU1}vZ*x2x?yI(73~iunOD74pRtyfEHF-`3ntxT(eA?9QYeh5wsXhPMePx+8qEN_O-*~ww=e- zEc>!fi$AVyLnS44Eb9WV$RxrlgTJ`m9QbAli=fF41?Igjd}%xuDjc$2$S1h^l#s?a z6ks@za@b{vaHt|!$T8dA2rX)sXS)J`F)I!^H8qTR zJr^YV#>{`L82HeC&ZB<_7oc=E>4*RKkplLl`&AEOMn*>MDoqO6kw}h_Vu_f36JR4? zYTiKy*7fD1FZ&RizSajM>0NmEeZ!a%Cxo1*;m+dgi-}Gsd1J;FK0-AWOk6xX!1D$e z@+WFd2YJ1&D6p`00h+<|>Z&3@61d*uoSK~-$`=pE#mDbIbyv~X2Ua)GTOAo4)oFHy z26{0a9sUg1^ua9mvs#B+H_l1+&Bf?B(KUzIj9F!TmV6e?#g|HoslLTao@E!#lU3>x z>R6|U4?hRH?j;ZzFGh|G*$Pxr@;CpC&NM;34Vw0O*D{_bZ6J)h4zzT-~_ zb@4O#aVdR0V9R}-+4ame7Vb%@5N- z4GloxpWl*dLqTbDsbu(Jt#nQKdE$R2Q!e(uLvh_?s3OI~p%xH|X{|$3jAWg4PU~r* zQsANnx(2>}ugOebe}Ho{ipirOGm2d{Hh_RLOq1Vo1P|e= zPCExQ2%o)weXUD+dA>sdn>mpJnPk_sPS|72BB(JXxBqDoFs(2JkvC-&lJX;AR61)PNxZ7?S_Humh|P zZ*T7=;2LjjZ?A;f377#Hn}JgIyLo!+SxYovzNS3g&LmQMMyvpib^@hL&9BLfumuF~ z$k~XZB5H+Jaxp-l&HSwdh(cCwAxloT${NoC94SK)Od|)U%8VUt%$5!tDmGLHK%%TN ze#jI7uTNRI)-9&S&H9w7QCZqpR?}wf7m!R?!0;5>?66}cfp(K#g|gk9?f6rAO7OsOz1MWic_bZGs=bkxBC>_j}&(!`GrT}dLbAFn#WG8p) znzU7~M4cNjaTJR&?`;)ijS#=C?9;Yv2*@${jay4_{Ac_&7s;}L4-*dI&Mi^E%E9<1 zz=|4U42}vRXXO|VCOJTie_+itJF*3E)99uccvL!oL$jdIBsrOxdwP%KRWy}TSP z+8P!zO@R!f14lDDhC-C5(xgGg6TT7=5h`LpeT)iDV}^#_4INe@{X&u|l=O>^{h$f& z@AFx}0iZwc#21^p+R)fIGdCyc<>j@78$ltPM4JaLYuPKPS4jQD^;@rjulXV6#UDG8 zMD)N>@6cA_4YKL4SpReW{{DvECz|Fm9`-Uha6i>t9?NqZU%S5~l!Tl6T@I3nZh0TE8&A1+dWQH@_t{Q>2P03^IK$sy}aDzekZF4cQ>ojXp|QQ)P<9oh1B}1wd<4nqP`KF{0sIEqrXu2EIffO$)Hi^ z@82r3ws*38_`>1WiK}qO>&we4q!Te-g(d}N^xe*z_j7zIT3Xkhb8PEndNE9YcBV0} z`(a)FBupi@UKzxQpth4q9C?4s%v$hnsgL*SYLxsgoZoWM5vvLNaPxE;(`G!}W55-kDR> zPy<}Rl0wwVLG8W@@;iY>v!r>&YHcMO6f+qHLbOJSj2Z0YD$l3B1;=c{Q2{FcIg zRk5m&+GToNyti2+mdOj~!K#>!8&4N}Whu|<>u7|jq4_xSI69QM_c3i4r-NClO{dtV z8AUNP$WTHh3=1k=WK%=wr&vP1PeJL2l%tvl)NAOL08BC5zopL>L^gWn2NO62bf^eJ zvoD454K>ga1WIh%$IzI1F6Hsh$jDB&yRj16@T-ENVw+IH?RNaPZqU9Dd!eA^)xl`y z-{kO+SSdn(E6cY$uVD?J_o6F#OEPS0a{7xuFYyNGGxFcxuovbB_DY8xo}#!sT%gYD z&Gj9nXuQ0N&3QxUPBkW$Kq?I%}~MPNb-FScfot3!h6) zQF=AN^yTaB5;wN+FM*IwlCaWEJaA7pOO0w*`FWyd|H&Vl)LEkVP1kG4KQ_O$0G8{! zFJw`!Bl%u7pYqk-WWRy76(1A1u0j6Mz z@GG32MvCj&C6F-`NwQeh_J&6hpSef;#_T2kdFlZrm-?57a4^MYbrse0beO}No;R^4 zEL6h9)b`lxUI03uXWAWqKr|I~`n};g)!#+Q>-e|Sx(cSkmm_*0f5+T}P(LJ&xX^J< zj;^}>2{X6#-IaOsho+6ND|_5D`pdG%pZC5`QIq=ei@T}Q_kYNf4c(x{Cp%@PS~wSg zs&G8lHl1ODG@QVB=-xo^NRg;zWh>_46IIL&gig#MeV9U@Idl*clFvrSN+zWOYEv+i! zqjzE%X>(V-&Qfa7*0?YipVlS~kHzftzKb0p4Mc~W`pEw7W3$*{DE=rdB9K2__Rfd6 ziZX2c3yW>Htdl68ZP7^uS{dpDzEt(7o$RN2Q(f|smb0^$DD-;dRg^1Ripv6$tWWue z0HKP{1pA>5^+hA$*(7BofL>?&SGFe(#j?nk$H~kbp{WMMx0mFr#=gmpYIp-d%|XkW zRmf@<3PM^+r@m~u?MU%INlTX6>dH6QA@Pr!vzHOkYTDlwqCl(Khg~reV7ZVCG`%E0 zRE4Ffid>|}G}-3N$kH*1n8U}yRBWyIJb4H9q^s$O70E$+D#&G;Jt@|yXfLWnRc0lT zf#>fjZ}=&k$6x~;AS~ItUEzBDAdM)!Mq0#D+~nI^8w)t4N^IfaNj^R_L0_lGI+fSK z9j1=XI2DskR8s;w%gTz_&-*iIZyQvijN0qG%_|2^T(_z`CV+dkmsPQ=y>kcis(1To?!0ZcXOPAMp|)yMn1B==3U#{KX4MZZ;haX zC$POs$~`w*UHW>~ZYj*k=_T;4N^PsDarq*Ds&@$L*#}>P9YEWO(G~?Z7Zv>Xe`eMD zhGY=qmj~jq{RCbW5TdbDF2B8d#h&{elii&W8=b$2GPRn0s`Whb@$~TErYxdt%3_*L z`{W+9BXY#vr^7hqEgjevitJl)8eJtUyNQ#|BpF<}InCxR+T>cJX4cp6>Btl|%Ukwl0f;Fnsi@t5q^ z&_d(!g!NFQybL0J;ddwZ5&)9=erP)|e^j<7LAxlVGzZyJf5hiX>~v-AWwsYZhAL~i zqYHk%XTRwCL|4<9bGN<%S6csa!nJby`$qT%2YU3!1_SfGpv7lZRi&UbGr)xi% zX`0|K1CFIxW~%vMdI@oTAz)M%J5pL6Hh-K~!9Ow$O(u`sve-l$Hh65Z2BN;+$F4J3 zlr^s|x3S8Q+m2xaaXC$2vNuvj5#9I~D*4%%{H*5q%~w{P;%u=$F2hOhP8|V-W^(%F zUBhuw$jkqPa>0k5fjO}5z9f!!B>$|!@g;hL{*&m`y$5^{Ss=wXwPJAlk5fAh#5k|Z zW()?~1IzA8t}lI|-&3E#t;Q@%yG^ZuS^`59pZ^)(aUamlP){v{87z|^!jOtHokb5bEBM?=zv%Gv3P zxBbyv>Sy|RtLyJP0J^n!`&}uf=s5?eEbS~w1+ntGyOjCuiz4+M8(N3=Y1(*=!sT@I z^`Q_y+YwmBXK{cnQ}UyQ3$HHZ55&70&{vg5OAKZ5^~&!vPB20qS-K9M-5ILhD?g-; za`4@Xv5ys~!_L2iz=%mm7bZ`PE7kg#^%6TiT%|X^t(MHa$-Dy-L{fS@EY5U4D{F*J zCwXZaDf@cZN2_c0wbIB9vFhWm(r6G6Y%OCRsN~}Zia-2x8dfdPXR_p?=DZQ=p(`YA<@emfFyN8Fg@9lgfZ(S8i zAeBs%n9$LYWJwc2g+eAED*o*kGp&kJXv!)lzf!5M9}9(<+;nh^!s_4-r)4-bWLx7g zvxb{j`X_Yq7roSKXGVWB6L0 zzn+7Ogjw}9(%0mDbAb7cupLFX=g+ln>FWif`sxGG-O7_!#@l6d1hz1Y%YT(Q|F!oF zTcyDfKfo@WYyf#l^J7w|s_Ut02s50)`A}X${7k9YE?N~?t;Oh)N_kYH7du#a6iFP6 zwF$|RAg&1PwA3+!D2(Z6^{dHd!D;gt$`fH#uFCo?2&WQ3p7;<^vJ=s}p1pfPp@+pvPbl2bVdTa#4 z*NL!1k)nOOF1qF%;gN$FnbYIkCMYZALbGz$7wUU*cklfExBuj@eCLu7;h}Ziu=kuR zC$)TA<|nMW2cksEy0Di}ZtJ!;(MrSj_Eju_-#$d|m;3UMPwiUM{MwKmG)<<6P*;x+ zHEV-=;)=AK)kdfxFR&i%ZCR7AXP*k-sFUOBYQP!Ht8YRXFz`-GNxsMV(GNAkhQol= zm+$SDIc4%A@2tiIb-*jpox7%J_fNq;E37ZZ%!UuIZUR0=*gK)OgFWR18q8QVM6@6& zCfl?mR&R>3^ctzCAqAOxt(xqcN4w$!h4VtRo29yPR8DY_^n%ivDWA22yPyTxVayAQ z8iDdzDq2|uH}~|uc#9qQkyIPhTY6%aX<=$Bm0=-Ig1=f*)nJWDUT7;f8Lx13p%6_t zeXQLsL_K0%Cdn(x4AoZlp8hs4TGkWU&w;)DhAmB&umO;gZfwM$LylWe2u>o~duY z!pSHn<0Yu?e1e6z+@N7(77FUThJ}zLle*p;#1-m*2{a1em*x@@0fA`d>{X=_)T|Zb ziFqax1f_9KtjGyeymse4q2y^W9!==+fkp$5?Gmm~Pw^wKdmWjOpw5y#R zV@=x?yq}-nKZFy&sLAo#!v!!=fJI#H$&}qp9-_DcB^Gnko8m{Yb=f*uLE4i%eUg$? zN#|r(lLB!rd%~WlGo3>_o75{0#^vOv^av3BVONRE8R+a|7HvN`AwcTzZ`DMz!W}p= zey$_^G5PHYR1|oI6yjA|72f`lJlRLT#E!X+dUzuV?Pao0C5)7}AmKnI!AHHGWdj4J zNmyzfg?uO1cCcBZ;J%t=bsZ@wApN5{&N2>l+v$$~!JTtLts*PrB;`h*T|H2bmazZc zuybV?*i9Y#SD69pQ`y0W5+^2U-|deusuHS-=I$$97}j z25Di&F+zOK-zCrNK>`mc9ft_sEpnH7WrfgWtk{_h;Dsue(g=+|`bsQWL^J}w>U$v` z4YAPjJF}|hULjH%K&dEcMGa}b;MH0{Q)c0fE;yx6DYBA1tKB=!+u#>Y_8q*dgakjS zGob6kNBToI8%jo6V{pYb3_>hCa|b9dGuy+ExZdE%zT;4SE{^cyOdwfXj?RcFlq&3N zX~Fe%$C#*7t=A6e>w<{fG)DjSjp7OB3x@30$8Ys7=aYx+@1j>)4BcmpW;dbp2QS;i z2_HW|gcZfRu1USdVkPrdGq9s4C)3u`|W%e z2TtC9kG5>1#&66hdeyVaj*ZJ;HDDAI&ktxt5hQnqK`}Tit-Yz&cXSJmyOB{AWD=U7; zjwM57p$v#ok4}eecg6QU#i0v>jzH;ddxx1GetkN4Cy%iY3-&@?L0T0KTMFP)Q4Yaf z4|<&s6dzaMvVjaHQ$0ht4jpZDo{Q@B)Pw7Z8WLw_+)mBZoKZj8e{pLyR)7p2(^szE z|2$c}XISkYNJz0#3Wz=gM{Scs>GirXVTULG?)I=ycd%?H8KtU-9!l5&R&Pt4# zPmoE#5oJcO@qWCMCf<##inhXM*vPH+!Uf5qv%)~<@Ib9H)SQrF>?CR4W7 z8W0rDcc8H?)=uXR@3WN+vfn!Ky~+}AgRs_;jt>aIiPMWTn%+O{s5BZJ-?RO{_RMQZJe-l|NAg%_|^l!{Qq#oGW%{K0K}g^%YVfk86w!%LszgY z*H2rWu=x)?hlevd4dXlgk{N|p#=HzWB5*%*v--M5)IDNBwB2>;qC$NLIEFobb1LWC zTL1?XIILrr|1f~fklWpIfx97u5lKElBwFl#gLw~^e|x>JZ-0TcV|Li<33v*SkcRQR z3=onYk2r$+9tjuhy9|dF|cBO{RJzuhm0CO2Y(}6cu8C`H1oclyL(P+{%Y%o z|C^@=z3|H!FGUg^3`*?QXlAdiF3jUhJLAs&qU?y{BlI;~Xd+J*G61y_<`@C0N2d7b zrQ#NDvpId>d%DV^v=uDGTPBTIlA8+>k4OE>|HFO|7;Sr;8=yxf*PQ~!QVMjq#9;~` zVL>L*Ob*H{crLk%C_Y?*j8&A&lI&0-6KVKVsb2(h$_$qiPcRggDB#qU4`6O9z*t5F z&Z>pyoT~q^oE~s>Y$^Y%5VZ_m6t196otey}?V6nRA1;}J0Wy9qzd5YOx}1aC zH~7$sEFO5}awy-_rAQ(t)K%uBfXy}zSLC1!=KIllbx^Ee2KCtT85_uEmXNt&de2>>iO1qvO2x?{BHg-kC3~$ zuH<~mSs0|}ACc>=Z1hHj4?anfyG!Js(R)$AV1Z)EOo$?)0yn@wb}sf<@9Gznu8ZPv z%qm@W(Skijy}-hsIHGkbZoP^RfE?rL$32F%eg55muH)R_4c%W5t@F{A69g2wDC(hW zFhl@oR=T^++zP?mBwL?EY&={DLS%D^b3tBJ$0D)NA6~P%OJ8j?sPmc4rQ?y);_YiO0Ic8`!G;F1g!8j5M)$P_uHa?&pe;fZfqKu7(VqaWrI?s7+T)N%C(63-o)sR?^* z-}_9fI)%4H$z**m-fxp2G2U8bzyH7Q?R@VwWPkEDK4<#1Xw**^L2pVRATY3D6w)L1 zStvJpZWJM6a8PE13m##;SqJhqrys{5tLXk>jlmD(O~~#{)gFUI2FdW<0ln{Q-ho(Y zT0Ke>dRSb|H!w#^+@c0j_Ih|7O3-y*@o2x6_%IU76OZR!P&rN#V>y&l*nKZM+YnQ*|du0_(@S0 z{@|g^&l5;UJT6&DOg5-5A5|1mph=9WnVI`mij^8pvO_B|*(+)>^rn*IW#NK};76pj z`74qbrSTsQtVj#k;hkVg(Q6uKRSnq&Rx-NPZDwy+r|`MS(P=Q?%DLApwzDEh*i}g^ z$^7d`?{A(!5*9}Z7MhW~6;X=x5|&&c6)Cf`Qnj4qqF~bXy2$4ARfSj1OlGN{c{%#s zc|ufNF*4&I6SG-j`lD4)b&A4UdjG&t4+8u8bbR_^ni6l}Lp#!@BTv)qUtO=q-Bg`M zd%{#he_jZ`Y`+_id+=6I3dJcI7CoJHi!+m-k2lXns^D1DuSjhUx&4aMu@-Np>$Tsg zry(XadDRhfxrT$I!rq(7cYGcKqesdwpF6H*dmDznpkySDR8O^@OIlQRBJyGvSl%OW zRJMQ0oEhHOJe{p>$)eLXR8dZQmvz&a*Yy3h z=DhdNS(P2^?u?uabXzx}1_CHzlA5ICzO=svj^EuWDwEqun$y5SGNsa|pd0*1pn%I9 zcmInSG zhLWFjn2X$sx!8*w8@HlWmeY@NWs{#)URImsC(_!3ZL=};e6AY7h1M_fQb+fG2Zt0$ zhNHc})pa|yyz^F}R^>URP3`2zYZX3urJ)vrhzjYfdeJoP`)L)u!YinBbbobzJl(Ss zBn$M9)D_wcTZ=P(+m=(Wp&&|Kz-*7{eu)}QI2yg3pV)hnJsn?ptoR09e2;+mMJu|M39DxM_H&Vm&ts9} zV^J}eyVdFNlxpiygb<_)D! zRjyU>yB^1=NisF9U%w03VboWcdUE+t+PwR!Hj=9E^(g!PpZlY;hzd!9OjWCpXWt~y zaL;n5-gHd-CLLB*Ib`W-1|C%fTf8&M!dR*jA*?ZkJQ zx2WBghf~7-d|vGEX*#zxrc>wJDd%l5K; z{!W+#>>*vKa>P3m*mLEC9&mtL-OAW`_ra&{8GGwG_UM80;o%mf*tBsL{O z_?D8U%o@<597ta%90wNX)xs(x^lA@qC_tz;MVPH<+;0&GDmV^%903babQAUGo2+CG?^VkAvaNH zR+3@`7r=5x7ftc9Z@Fy=CI0Qa@ytNW(2TfLfC8s@nYk*DOKI5t$R}MbHXyip5^io= zY%(<&v{@g=hSDZ&VrOLY&MW}H;qNb#?|=x+Vr${*S_}0C254nd^Px(KQShO6pZ%Tz z`$17w=TYW6N})v>W$6d3003xle>>7Mbng5Pl7d(DhI;!stdp0S0JZiVGK-vdqN@r^ zw3BB}LS1f_ziu&}o`_S$#h6a+pUJEADSB$yfH30P=C=B_2byw*8P8kisF5g$58<{) zJ>;_Jk%L&lqUlla+{|r%q&<|O;s>RGYNuCv!1JOTTfiP}ifYSQ77?lc;<1?SJSrScBrTF9ns2IE9X!POz@Z`|u6Mab1@@et! z-znnZ$WGg_++?sl>gd{uA~UcZcX(GDsH)bqQ)l*&%y#()b@CCnxA_$44}YuE#ejfB zdw}>3;7kRs$Jkdqw__iC%g$GTysTKMOHToeQ@~!O$21RR4e;*VBH6)0=?Np6u$JVR znnOLHJJ|-gtHW{ncJ(36XBV!>9aqS|R%2|ZL0OE(HfA#izFga0d`>Jj&k7Bghj8sToJM$Ze_FM1{L@yUz)F3LET*6 z2dy#=3rhx-DT=ooQytql6%1>~m~SnibOpR+Zkf zm4U~Gj7fVRFP|*>k`qvZk;uaHx01eh-tAmkvERJltRUsZR(P8`a*Muae|fYX(#@tj zPETDzX*!nP(1)dYvXg^fP(NF)kK@lV?5<=J-jx(ZzTLf?PQazWY%)>NjoN`0V}(J^ zjG3YO#!wuiNJYSbq=<9gW+YOXzOVgT02&&JOi6R>ptymjiya0}r{RKUM{>af^r_v{ zOOK_5d{>)~)ICZWcVK=&|CP_e&b&~wzMzle%5X9achLfn7^}}m@HB1(c%Q@!X|^w< z(`wzC7)u!7p`|UNK5Cj2&o`*Nf>LrUbdaVaMFol3+b3sh6kHZ;@TE+vKEt#(mp6LC ze7llzqWp#ge$ZAC)3p{(GSnQrw2K2E`q|D5H7vPpJ-$1*Y?p4V1P0V{dKPQ92#20! zSb<>(c(PF246h4v5{i9$^|c2-%wY?lYodlIyO>-(}63 zQu~2Zm9R!IvLY|!>d_YVra@)8DXloVGuR586ceW7el4uhdc+2CWXXMSXa4#GugSpN zy@`404Pr1<9V;Gh*K>Bl0^0b0rtx;p-|auxH)i9qUkzO^{^3aDq!+Gw_hR@8ei$dp z02(8srfl7rajtB1?Q1)1-tJY&K84>SZ)Q1S0dXu4VbC9jgztG&R?@VSC{J}K^a+&$ zjw2<%^^EG`#D&LV%xI^V8v~foqEF$(Wzb=dXTjA8pt0A?%PT9RFt^`Khtw@vfGlR1JMTwHa)*d9>WjsnuTf7IS+Y(}vkyVhvI7PXV^3YGQN z5=Ituxn-bYjsc5po1*HJ4*cKg{wpz1lf|o`looFx%Zz&mi6=|;+?c25xUS{zFNA|x zI{hUMJ2g;=^U)4#D~I#coHO2E1;+{)+?0Yg>@yEw1NEPUwsKeSt zM3P$YFiLKAk<;l^H?}egEWl-rl80YhCEL1f(r)_|q4S#^7eR`a?$C4jduLKY2hWm4 zWFU(g86NG?*z||v?ik0RhhGK|=9oXptRD7e)$9zRIUy6{{~uFl85CEvZEGM9B)Gei z#)7*BXxxGY2=49#cS4Zh?gZE18rJ{sjv7)H=BR7}`Ko2`L-fW$$IQD-10`~>>{m-!b zzL%t}C?3$zI4vm^w(A6|HhAaxD}sjzmdK3#;*RvotO5-fv@}QcGr||WG}VvR93cRe z3e#zmo@{r?M6$_hSXrp4Ej%`;f3eaIw}#=TCQA)b*XglJ4&f+#DZOGTwcSUTTYgF)5lHg;i99g(-biJlUFfZpYIHSh^u`;<({42a@oWU}ze}U@0mW-M< z{BtxxIdxHxF2TARE&^+h#9hHObKO}+P%-rNU2!Uo%Jle-+8B9-<9nzZE5#DB%Tm*5 zJx-%7@0Zk4#)qS;rE_=1akL8c5G$nt*Hg_ zMLyHxNBPaODuiun`ryxl)#0nQdrMXoJB7k8bU?^wnRZjGK8st9LJ3+x$fuRHj2Oi?Wy!E;6gV?}AEbh{sQ3PxDoJ;4KifI~_n`icK zj0V>}f9V<{%JZiq-WFGy7s{9yX}duEkE6OAu}#yzB{;!J(aVNFrh9~WNG7+>@vIy1 zpHoAhkJRPPfBj-~ZVM!p7q^KWqo%0o`Y(ymTrm4r^gvNEaMaJ@wzkcHfZi zd-0H)g$0+!XsMn+TBH$sPkhoF6_u0UB`Xr&1yv#M3)(BsMg!Kah|`!TI5UEeO-tAW zHI%$el+Pl>uql>MBG%#e25XbTg+2uOz8@zpC~}8WKGTWVSVw;6D)s=cvS%$man8x( z$Z#)HI7bvLpKUcGsh!y9CPJioEv63FXc#|!r=p4eF`XyIhi%Jn@>n5p4*5J6G`@qE z&>hctofl%F4&yr$loKW=Aj#%QZp!xY+c#e52=gga7v6;Or2;=HL=m(Bt}n3V-)2V6 zbhXEhY-Y8U@HZD<$|3p%;G#Jejq3SKdF)qpa6FZG$k)rTy^6fcVTBI~d zc~MR&U15e`b`bnGrI&L0yHUcId8)qf0nr-#)En+qct&Dw%DPd6Q90I;da`MGGi!10 zKl768dJ(6+2URSTeC(gVEQf)!Zu=OU9@O?9zc=FaHsfequ>UJ6n-#=ygScvH7~&W4 z5Xj!gd1wU+U(gwib^NzS>jzusHF|34F58A0_bXFNE2|W4yS4c1VJt*%1$51vQ3*;? zGY-I8h|psaWDc0SR)m4f^Ye2SKz%98)bvB2MT#7K&U}fZ(jyFMr0RJe zdSZX7WO4arj2vxvc%ON?rg_t;7#i7T&Ick|`l0l>hfc{z08If|Dm7Elb$LXZ1%@YV zt_rN|L`cZP=7ixZL}DSIH{}(2o~NTMYMXz>B-MX$8vazU<8kJTuC9iYGwom6hHB>S zK4*hsyCBsWhQl*7tgw7G-McWhS_A;@_A;zUv+7-9yQ#3tb!-N0_1A^E`XiNY*6!LC zb^asJ_|J97x)8f(Z_B4YZ?}@o~3Yt@nMGh6bA^LIlGj z^ZVuKH&~Ih{26(>;-?!CmaH4-PT1DWWtNs^jaJypk)&T&PlDsvsH{C)Y#G;~u@F|X zJ|AJG@m(5!S9{wTuK;R_;_9u?>)vT;NnImVxX{OkJS~1g?at7|KjH1J2H9kT^ncOZ?p3`70;9 zoAJDW&-p~qOj4x7MJxo}g)Ot~o9jpojaB$q+TxU)b^a4|@(ed$rZho`B!~RoBi;ny zVM0A{m~ws{8DMTTTI}l#NuE9m)Z{mX*cpqBGc)x3)+GbTLKvGC;MYPj#k0~FVblK6 zt$67d8`#$5lwO9HZ!=WEH`e&G+=n#@_$GhHZiGHey`&T8URw>0xC(07Ib;tmf+^$4 z7qFnnXR!3ky0hvcZs)mJraU%kpMhzs2DJ~ z0%CS{%x50+&Gvj51Jz#D-Xfo&wqukq1zV|~o-m*r`XhjGxCAWh%#b3pbE^-nPd5@T@3|LDs z$wgSa+j^^-7j`fZ;y|%+{h4m7HgX#f?vJxH5EQNuRn|Od%sXXMK*+EqJnr`ynb|c zA_zYp91-&f{Ft`LEd{BW>XVP`;w^!!PZwtU6V>@ZYYnxJh?23#!aM^D8pwWvp73rC zvhakJXA|VUKKtmv<{ZDz={SZbdk+(PZ69p^p(jSD$Fs<&-OeWlS*>i$wiEtfok{Ag zhWYlF$KB*Az2_E^J$r|iO`~GOUwhz=NtIjt`03Ap5p-97TIkK~!DBQ&slmozM9-6A zcv=DL^~x1(l`5lHa1_h^@ot<@T`dKCz>g?W(A@Ng&tCe`{-7)gAQ1ZIdgARqF1)Rc z1es0hM44O4-tgErt+i?DU;8*6ok0ue zCy>AE{hp(FB$S-&w@GgCJqv+>^(Ec;& z$bCiJjhPSHtqx3TI%NuI9<8~!^lVda{RO5$ur<-Q1>zBQB}N+trat{$;ub!fNGh8j z^dA38No~5n!qz*axq;D0&y!|!6=x zKxWIB7#v~0GHBit$H$_uB$1)ra*V)CR-IR+EjV ztTRnZi@4L)O&w;hhWANru{~?Xp>r2Z!v3VROBm_9j2`vQA!WaycJmkjG&4Zf0$?JB zzboIwgn;aMNWhYm*3BnsVT7_8_pdb0c4v9cy1X*lB8~-9^j4NKw;!cc0&xz{$O%3u z%~bkL*1vPMS?_SyyGN9v?6V)n2s0b&+m)k}{258orJ@~Dn1@6|V79*xEn~*~*)jcE zdYS|ElqV!s)t-+gF})$S>T`gbc7E-QG+VLb{RFLSQX&is54O==CI*wX9(2dKeY%ut zLAgswiDV)tu+d?kG>=WQv&?H;80^qT<}Fs%IWaJ&RiG?Z)-dmf)MKCyU!#F7(o=%T zJH(<~$U$mrPp9u6;SG^dB{XU)@iph}cTR!_#~Yj=o`mNQ$F&W?w2aQmU-b7T#saA! zh{Ot@U-L|zrou1qW4zn;1qOLsa&Hs{60{0mkrjowNksSLP8Kb3;+B8)8pbCk0?k=T zsGxsgZAFQBs>CKv(xydfXl`CISJE#a)G%yRf*M;wNCeXgWL;YF4;0r8T!BNz_aI>m z<@#$a?f_fjf3d7{WtsqP1qiDV2Ygw;SoV0K>K(wd_(!7C)g`@fd#>%jb%qpka~Gtg z@}@lksw(Wf#Zy=7f*+jpW_h}GB^&a3`8GiunF?ivvL%FcPB+TDS)o;; zujF`~vm3ncvid_w6FT+8&zUOy;s3T_Nqi_FM~YuLhQSLL!jL4I++c^fb*F3 zt&M8B$TTa2q(R3kL?41vZJEjEVkkM|Ug%H7i(R@lS(uVONXMRgSht)jgN!iCGr(GYpr(JiT@hNBrc4A`_tliWR2 zh`irntlgb9S$kw>6lU3of8}g@9Jh*r&o-6{EHwjw#wXdR-smBx*y=I5*4F{ASHu+Zh!=Z%^_1Anlbcg!77+Z?SmxvD zNp12nj30gnn#ljR#^2V5D>oq9l;5y){-UHOEpXVcc?>)FV%mKBQ|yd8>$QTU#<|MF zgd##;JWIc_q`W%aMJ-_8fVK%$rd-&ahZm_zp~xF;0ZD-{z0&HPJGQ8n2tAZK$@McV zy)bk+K`~npp4j3i7B@0CJU=drH+}gZm2pn$#KtCKWX((T1gP!~ivVf;z2+D8kc|%_ z1Mf-@xCm6CB?no^+E3v^8YwISQ*^FRzjfH@Y5401bk2yc#_z&Etc?<-XmZ6?XG{5Y z2((VjfUZO|{e-(uJ`&odpMTICh3aTWXB0 z>B}tD)fD3Vb#=;det)Obrd5zChf1?4WfPlDZpr{BgH7^75qCjq zu=;a+PfSg%?K+=XNmp0FoUsSU$_aQUpv3)WoQu7(J?c_C0nj1sS)Hgd7JpdLpk>(vtJXpi-2>dxtS(Gx1#2;;A7ThC;n?{GF*^5Wy`K3?JN@w6*4dx|tTZL5HblHC$Kv(?`W z5ZwxmKkPKca{GQnE+&S-)LQ%V)gRxttsO^mPNOR4$LT48WaK^Fr|%92y|dO!D`Ffa zm9H&G<;?|&t~xrhlqsoxfq|^RBU9k6B$^KTQd(;B$)Y5;4@)h1?I*?qqg((GB}o+i15tN;=oL)QbBu0e7)Ki&cCh}+PnT$oJj<3V1GTEYQQ>)D>M zvZ4}pB9o2`WehoKRF=&4AR7Wq?^!zr5e(9o8YB3%OGm(U6JrjHDjl)KQ;LWpfRPye zRzaF=Y9(M`*J$?<1W??PO4y>==)gSB@M5bMYmd2UJ2sRRA-MbRcCMz}Xe2>Qq^X7b zpJVS*cy`Kjxie`i8j^cwX=C9DDMpk=I*gfLVFf=#& zndSXw<>+SyVyO?}+8@C5!iVDaVv8uY+c>C~%z{mzBY?~YFj3tEgs{bT>gJn6LB?}` zigyMhMvShF3YUv2MZqEU*BxzCGJM1NNZsYZ1zCG?s&AOg zbkbXw_|p{j=s*$Nx2^u#m*=D( zsH8bZnZha#C!ELv7uY6A+EN!wv(C@A+>H0T4OKfkSbQ$wr;=piutUtv$m;IAmI9Hj zjUmrC!=WzDQ{Hc4Gb_(N?@7G_N{Gt4RrDmCO$BxC-hv(#ePdgKt}uu(KeS(Y3!tEI zyj_FtaXBWhdwu14J&(A;=F4+$^A}HXq zrSRG&rB9Ou&JB&x$e*LYBCJ>!?Q(ppuP1?(L^Q#UfER7(N zI()~UF@GqG9#$~qlqacdJ*9-ooNkK;KpB4T?JU1o4Q4hZ-+;V%yS-b8MR(3JXYRf) zjEd9bGpu1%1o78M7pEbngb0)xTXLNwKV*iwaXn^93tBjjg&C@iGq(m2o5E%(S?UU| zk3QN-T&H2UNPJLa`$V3?^O2?M&V}o)L=Nf7`cR%Ju6&K_vUkA6gWvRneOXb#C@u^> z#z@NPp6M_0kwc+~=S?h&C?pM34Mt#UWFGqS;5q4gILqjqFujI_a510?V z59v-1g!SHUIJ>L0(S5^alg}fp)WJXkE8kBvvemMr$=zyzL4E4rT}X%#}0j)y)S(?e8Ny zbUq>-9=2F}dxvap^6AiWwyEG33zy%Qt9h(hqVG^3T z@!Fe*gScI)9K{j2+nW8E-=>eWUFAOoiaG3#%L;xb#t(BiU2-IKtBgbQtqi?uDfDl0 zLZW4Mx;T5Q3d|o46G2D#i8EwXTG;b%Gc}*-6O?jAr0H>5&FvWm=yhQGRD>1RAg*i= zr43mXv|(6avw~L1@vmW<>?k7W04AyMo^P`Kf=n%jb`a}Dm&J}WmRdeuNfk$44YUOc zqYMQH08+60KVN7$@>lJ7yoMg+kS48fJu|e0mRsFMm#Q&U7zXlwjOLXHk{Ghac`SrI z&eQ%pXfs*DTPO>kUC21;#r^siUHqv=BjXdM20D0-L)CFQ=Od}$golK+r4ovkzh6lJ z?!?5_??J*;WUfNLZOktwD4q!+D-}5({jtuV!4;o7dr_@ti|+=7g0?qi;#=$L>aa9% zRZ-e*XKw&*`QoJ|-ei#+<431X_wOS`%o}U%#5r}V<6A){$jFkw&Ur%Ffs{lrX7aO? zH|J~D9|ntbO|Vu!K7+d2w6me`CeXZ%ul`LhAtY;9Z40zwvZ177;234xdajteoJvF` zbw9>W(iMv9mQ)!BV@d~cT3LZ^KSY8tX@{t30$`=ZDbV9Fdg6tFu&=oH@YcOB^`aQX z=RMvs{sAA-Lug>Q#HlA!zoj!b!dcs5a25q7txo@3s{1_gzN4Ok(Ov zOzPj5PP31X-=d|HUaVjIf`z!PkDfOFA=QuYS6sU_0bmS}JQIuBTCdN@QDZ=8sQq1h z*kd=eeQr*#6$uqPJvicf4^zJMZOi-JHnT>6tHR+^^;ArUnrvi;SYyg%iI0@@(Ykl>35ftVih! zY>ABHOjK*pdAK(F|K7I&?W`G$fh58K5(XKi|2re|HktP?B8J~Wq?9RA;~jXxmLw+O zC?6}E`u54<29`G)uoVN?gTw3&`y%a z6@_a3tA8@#)2CZfO?$DZD46E@amYYh)7aQ}kWi70JQ_++Yaaa46qwrkf%C?;IQl~l z)`%}fV#!kwlUWO{P}g_*WFI3w1^B;YGt2%7vrku|@2OyBi^e5>7!_F2V1=eyoDxO^ z>Mno9wZx~0gYmdzW%z|uW{NjKmG$8FWX)pKGsbhXnzF{v-uhLJ@#e-h z2l|A+v_D$XlaX9lQ{=ct7$D`=!F#>>|R!ys(mhZl=p%Va{oeX?O&wSSc;fkkRqGN)I)< z!8{p*?6@zq(v;cu7eNW>zPj#~FLAPzq)Kl4lP;#?V@4M_lrATv1w|bqC+-Qvf^2}8 zc)af&T3wC455?Wua#v1J5Or)Zd~Gb0>xz5)&kAO< z#VN!0?+vw`4QNWgCdwVi`l^$O`1(0jd{Z>A*h~`?bQ~~1y1qpv0sZI?9l3zS4a=3= zx%hZ7Z`2f@@?)`11lr21OM{!D=NdwzaIvPw8R5>2`Dw zIXg64+(OzN{j|BUDI)Qrq$+OG8zw{QzJ;&%yeD52&^MA2^`x_|6U~fSZ}whBz+nAE2se zM=$k37Gf|mm)z3tw7JuU9GS_UHVoTdPChZ}X$~g6`f%3Gx-ZyJ+BQUN<)~&{zwE*l z`t9@cGIvSFh1*Dfam#(@86>sYoKF0Dj<6<a0TC`A)ei#7%UYA<_Nnm-+cUPb0m!b*!?x=p|qHNNs0>Hv&~1@YH_hx^?TL+gIj ztw6CNL;^dA+;I@x@yoLBXGfj^t?J|@w3U&KVJ+J4{4p)M0nFCfdqI0eUgI}_Ubk08 zPqAB4h;7oetn^n~FzLHb`5N_jxXRuTPkf&p8v63Tgz7e&%0AFBbEqpOYUW|0d4Doa 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�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�Aw&V33kYyd;3+!$pmbu^`DjO8$R@VE$S%M~GlOMeTU(pc{)Xa!ve_1WTpMu#`!_v}HQx^e zhD;`!P6rJQaSS3y@PA+sg))L{2Be|LG{N_!L$oD08>ra%{lW6E1&Bu{2gzR+#*X5L zxJJTfYj1x5ksrv%c)%}FBQpnK0#*yadh{jK}(1?#fO5S+|*7ybpWH45Z}S< zjQEmum3V*_K1A@rA8*dVtH&R_b!>iMd*=87c727}om)z{rd~vQjGcx@m71Yptg(m; z++WGX!9EAKPsVYh0L2142~!6`|Awj&i`7Xk_J#R3*b%`GOD|1ZrwD89D=LR52;4F7 z3^O6gT|-eU`%3+hDgHLUs0cQ@0;6nI4|n)s*cXs7Vt%o*-~fZSV=5}XnXNEUG>2$` z=XJ`Il!C?{`dtCbOM}{$nUljWCdQ00+9vf9 zjmP=)d%Li;uUWb+w&&>~(5^$G+x(DS}7!Xx37CZS%wBHV( z8u&jUFQ7p1kl@cq%#dM*p!H1VvCm3B4;}}2@st``TBzQ?|CMqFI!==6ij%jXZ@`(0 z<2z7C_%l>7eih|7its_B?YTi%n9wqlsbNS;aUipTE;_o7R6Gbk0lZFptuw&;`-I6_ z6i>3_bcErs7KS9A2zV6dJ1bFYK*DQ+N|w~TD2~l+Y=Yq4g!>`GxbV6#%IhPR<_<;o zgUGM&G`T$|RpBxZJ%Pa9y*G)a2ow^%QKHbPAVo%f(vL}K$T)r#I^XGoTPN{`BUvz< zi?J}OtE+oZLlNUA96UX6dPY#hRzVp`Cc9&&!|)U(Vn4jw;JgAed9-Rn3BFBJwhirN z^2&s?Q_Jh?gCS4|MP5z3)=;UUgu;m9H~=aTVbhfZ%O;*ret`^wz_ZJ->jAD{!VG4q z^TO`q(pzm5X?%4?cm?QjKr~a$xUXdz|4}DW^E}odSas9hV2h=S3I7rM*#Z6Ji>$Kt6fsI}Y`J>B z2JRX!Judm62rr+`_g6*pM52Q#USJ6pJf&_NaiZGtrgdb;A%y@jCC|-{!fh~kK_ZHX zq%bw)z881A#7&!Yx73w-r=jDcdI5fyI2dQoeorgJ1`%z9^GwZRTo`FQ$E4%aj#o( zj>T9l`TF)H?YGT$zE!X2HbpAi=tWGiaBus7i}shJqg%?lF->=*Bl=LPf?}t972nl^ z*Ln-laLy>5q+_5hVVU1)yu6*0;_BrC5)=;nfm@_+MmDa6w`;Y0Hc|GDS}5ICPEggg zqDIB{X@{uZWQ;%YsUNnLwcep!kzLxFVl%Js(bQpk-f86|mx7=9rP5ScTETrPlB~*B z26jAwh57V1ifEm$FtWPRT|Z81cK!0^e~6U!uqsC*5PVv&XL0WO1N|TsCKeyiE}UQ? zID(0y4&oKax4{p_o`cwiBvGV(1;ByDk06hUb=BC55Q!1zC#8gkY#^tZmQs;k_YTO> z&a<{Q>>=i-touaov&p}Auopl4i^E@>%8%mGkIjD#^{jK-yIhx^&8<3E*4H0Cl$jOl zm9E*of2erq#*kNo!n|X5NL7C?S}(8j@*-?9O2X}B>TvnkWoY*N4fCQ{);yea`gg^j*jo_q&Olk)?elYnFjzZNC_P9aAMeNzg zX^jAnvL9mzOeqzp@33@N$Jb!nA;Fvp9p8Z>nq+30cx-}|-3^~jG%UlRa}ZON=QE=WpcFf$_~ zWM;<6Q;7%d&u7X$&+%}{JVT|`KW9MOQ1ZVkaDvsPNO6wy+zb3FUJaaCgRA;?d{;MY zg|OTdCNv}vRdIVf#OJ_Hp7wXF=JgAvoaHpz`)~Xw09=tCjxdb}AASFRo;c~Ew?-$f z-xm%aSLCdz^N8*$O$RZIyt=+V5nmDC$A?_WzUY^>y+vp8bq-p{*f!oNCzuADet>+z zdj>g&9Ir3TH5ujWvxSNEAtW2Ky70V0*e7GO5no&;x-g;n{vJOguulLu1elyXfBu8M zUCAfB29lonw@l0@Ei~_GJ!Dy@gP!InXIJtcC7LKQv{%J_G>^} z;nWQ4fG}fm4X~2nPeJ3ST6_C%aB|G8k}KTq!!J!TwlYUAEwz@_L%qn4EKfuo&};(0 z;Ps`9bv{G@BwQo&@4i}+{6{=N3k}~J+-^OTowm|v6ld9uR{vfm_$_3wzc(8#P)!t1 zGa<{uYKsO8x%pokmn(48Z!JP66%bY0~Vx9*9$4Yrww{-c}gx+#_Yw6q}ZjVt3 zVv7X{Z}(!otJ}=C;|1`}l!cU!XQ?p|QrdUpj!8|j#%n%*G>!W9DKBmUsVciX^&DsJ ze8;oX`);fF*4LkAsLX7s9v`>8Q^5;ZveUkjv1N6W&PW}4s*98(_ghC2pc9CwJtofa zuBFzk=Xs*F=a`MrD=3(WW)EQ4=7-UW9*2Erw`+-CL(ttOGy{as9QOMNZ2C3y$hA;f zJ$d$wA#z!R&+JOL1(No(LnqI%*PgM=>qt&Z8xH9-+z%bA^1QAZe~1rvQ?3* z%E`++$i;@I{zH>~KW2@C_k{de|9UUl1I9T&7ce=#7OO+J+-1^xSH$Jnthyk{}j0pK`*LhaBY6qCfJ%%(N{7z+*joP@1^;i!IepLe4t7#74Nf*4J!-30XOIv{~mXEpgyA&-J zl`YGA<4RycZc7>IFumvr4Dx462=7MNJoZkxrFwbcNFZP;^=A|NNxe>RF(8CcJ;x4w z@t&I2`X~nM!lAS^)H{fdMLza4Am0ki=S+JKsMwT)7ROp|mGYWI-1^E89;GQJ8gKUs z)_xy5eEbgp`;;g6C9_(QBMD&_nZ{U`6H7PYfVY!MQ1L zgA4Fsw$-SCoUS!BrmIV{oi}Sm2qQ$?aUFa=gZJ&1L9;-LM$Z4;EE^jk66zRxPgRYa zafiH1>W0pg6k=GH>Yn%RUC+&eNNGE6Sb35OAxTYNE}T*PM9r+Af*ZrGT<|P?dp>7L zGp8cO=??FT^B@KH^@uR%(u?WcYP6M~O4l8i=~$TVrXD+(mG;s;628qcTsyzJh)V}( z$UOXId-T5g)bgtTkqSzSyB|!bZd3H0-N?Xl?6$^Aj%xclcAve>!}Jj~{w=jzI5yI3 zq@fc0CdgF8cNlWwcYD0vlF4(2LsAND2E&<++HgkX7IC@(Gp*vV%_z$Jk%5Bg3>io#R+iy7;;xWsh|?bCG!#l4!9nFHre z$#A{@EdO}b>}y9)dDaHDi%c|BYH5os+%8IQQmz>~8mF@~@7#WA*WQc=CU<^M73`SU zOilZn>fF{1F{jk;tJBr}WL_%eS(RS0o9P}d`{pyzUAB;8)F)-^nZ~p7vq!PVwBbd> z(x_jyT9T(}39aT)=5X)R3j3ytdTSOPuTE>U@}#HVk2Biko5*kF!Lospnp&0pY=>vt zTSpDO!=m2zEL@6Wfq>Yfi+lYrXGY1~PMkQz9|_^tH0LL(1Y_v>NoNQnBKv3E0SOT_ z9gGsjz)G^GPC&(u6-oXC;S*z!$)S$zH`-b7#8~|5z&Y#}F<@QLb^k+0tqJaC4MVSR zc;Up6?T7UF78Js0pH%cu=>(^^(Re&daEA7uka7ScpgID)Kaa!0jzGQ!KOB1EiL)nR zyVZU)h*_BeZ~aM#aGPzuOgeJLCvUAG3=Sf{(Fh}FEV{FK&mNYPl&p{+V~-9&^-b)Q z1G(Mr0nZ}+LnLUQiEo30!xYO;Ltg}9aR{4X7_Aj|k@0=-CDe>A1&_SDC?q27v6whB<8o^5; zbTWWug+)ba-Odgcd(N@nLU0ZI8d8L2ALQvZcHYyR;IZD@x!EOnJz!#NEFmXHD!e`^ zLPOwA!%$8;AowXa1ujg7!6pPo2tUnjZ&FhZfGxBS;2{#`W!4Y0c6&oTbkCPjyhw1azlU-q+G`hNWX{KXW=NB zlNK)sJK|>;>pfL#v=#>7OdM{1Xf1)Wi$&Jh+-&jaDAoDPt`AXKm)o={< zv2NN6lW#4+3DJoTeIGXg31u!nCH?CoJR$-+#`Yq%REjSU!9BU9@n1#2QIf#iCZCUL zV#Qk-*oP$f4@_zQN|Vj6^L}0rr(W1zwy>cvos8Q62M^;g7}0H)t1u4D>v9iDit~)TRLAd@ffo&{@b4@XQYrfi{%#uQ)=9>cF%*#-WN$pfz5AE z9jQt;Eb?8OC38Ih3Q3v;B-6M3`t?6IYBT^bH6RI<1nP6b=EJ_m30@Z~A7PVT@Yy}s zYi)68@n?fKZ8?(ge87;mU==#Kyy}Eq^Z2oeL^vgRpjhRW13Se;L@e+|wd=>>(m6#) zp_h%kww`JtE(xeTim}v&3+s`S$k_MzZg`=6@ghkmU+7$U{mmFD*l^)#0oL6d42TN&_U@HI>6YpEua^B}d3u-eMAUu~^I6na78}-A&VajFFc@uvK+dz$Lq~YP zD!eMNIA;pSLKQ3PdL8o6uF307_%TX0zn7PwuF3?nktN=5huZip=nCXYY*`T^e8Dn z9>{BXh$Gz|hk(1gJDho1WWCF}&pWKxpx7HIq$$n7e(Bh`A3-MZ5_M5*@F; zR*qz)%DkL)u4CuUu~AgG1^;r$Ngs-B^*OFPChR@`Q7lryWR!w;DSnl!=(EOpz>IFH zh=XipSc!JJ;(Q@SI$0lDd^uOgoRHX99nO5*NMI#W`|U*`V6 zXmw^wyV$|$sr7k_($(gMSAYIes5slNissp|hLp9nU5kih=Fbb+l5ykX;LZ4F3mRUp zuSGlitn5kK^vdPd;RBS4*IpgI=66HD-afxUbT8fNP+eV6o`Zn+DHa+bDkTmEY`S_PEI>nf-`XL+2|k`kni-9PH=>_s{uB7}K;5Olfco#V1%4ZixRe8P(F!wN zERXrOv-~>kWJGh3u|kwz<_0xuRmYeMA^f1hgN)!6L>HhsKgPlqIFbGA7^oD;n~8lb zs1SSRhRd|vqx4Ov;Y>sA0rN|9b=ZLbs*Na$LWWc90kiodY9d;H{oYqfOlh3f}ATqkZ){#Bn=%M69NJ7!N zjas?>Y+lD0L5C0rduH89LjsoydNtwr!bIUgd}BvPEo>DuwY6J9-HU$N0y+^1$AIKL zgp!jLiy8u0hknm>6r(TC-b0Bm1$*I97kOL_kOfWm0u&=*pYWEkH*pQekt^UEKsp4a zS{)}T&?y-+YbQcZOD~ygr~G?7OhDJz8gU$N+Kiyn($bE#B6*=tqmEgh*pF?DE!;Qj zp0+l*=m|_)68#9AH|N;zqOQhii<0&wMkwJBCAFiF(5sxBCexBVdf@+~s|ivN5&EFV zfWxKO0JwxDunICm53daX5n6)@DBOr& z70`9c)(C+wrfni1-vJR?T3ULOkuemmZ~L;ixRZ(l?ww@L9_}IhKT}l4$UJfF*>Kv{ zEOg9l2L3U%kR)Vxy8}IxuaXUqrDxhrabd<=oua+S`&&7+H0!!nF%=dTB5;6_gb-7YoaE2g*gycMEidxG^mI{V7-)B9QG|eE zFkU=ePgz$1ct$8I=!8m8yaqC2M6S+TL$UZEtXpdv8#BOp+QFT;X&vG61;x?%<+Ry; zu-aSP!>)=(1fg8eG?jkd1>MB98!; z;v%a^mz{>HrSM5y+!BosUh^#i-sEx4KRG^KKA+F>ZxRc~1n z#|zG;5YNY%-r3anIx@(9Nd8P|zHApnSn$HxcTZ8C69 zYzV2sn^FRTf!Y_#GVKQ~9utB45p)RW5mLad_uhj_s3~GG>G-sEfXEqv1C4Z%x*19B zK5QjG?!>hX_={~`47MRoBprCHA^jnb?Lqw0Rt0|k%JT>R;Cs=(#7WoG+Z~e`4_;6$mK{Q6XR2nnCi?r+`4v-{jo(9jyWL*O@lI`TPfna?rl(N>^wJo~pcS+10hcwC{9WLQ-CcupKRk zOMUNSB5s>BcC@RNr0(#9v z*@rieGl7huDW3VR30UIb&OK<3z#R@)Th`C(Byti}PWdHRE8(@m(a|L5C&4Mm=5B5V zzrPY#1vyI4o~fFcCx>a-`f}L?z_&=ots0)^em*25R7+Kig+l!INO}(L)2XI>uu5tdi+g4(T9mA^yhu_R%49 z;EeBXD$E#>!;f%mgktM57vA!b>?rk;X9_g?Xz+?mKS%LKkX8PZ0_zf|&asc=sW~`g z%@%Y|lnI<&_W9ZO{j-CwYv!XFt!1AteSiG=wlyR$>fF8xN>Mhu9&j){Y;>jJYwOKA zaPL93hzZCq1?j^CqLMAv#3;)nsGQiM{QY7V?{`0HH;VW)-9B4uzhh=*hKcjrn$I_e zN)>jL6c++kl~|eB=mU>ebe~&(n|+SL?T7k}AFLuCbN%A4bslvUO8yaPRA--oEjM?A>QE4@%_ds$TOs8L>D~n_E**xAofFgBOlW zpR{+ByrL1nZbDdw9tg4y?b8hiiYRZ1?1nrCY`WeYA@+U0h(5FxD z;>0P}KgUi89^^N=OLwWV$bkI-z!@s?JI3Poglh?L37Y_cpPXkv8c)R>M#YWkFetik z5lB-24RPomz7R{c2+S%$8dl+DF$RnWO_~I78#ri|`)^_+3bUxFC{9ujiKO7XTFD`upCh$LGxTIJQg+lZgNm2kexhau_f@+OKhBMZZn zXBEP|y-SlfNB&(YpPQ$r@Y_$l;C(xHYIbV<4m<@Yg`btFgVb1AW3X;iu=eIr`y0d9 z)m+MQhYRc$Dy7qJbJv3?+6Ht?xm%e(qz~@+JT$%KeuBpeugVBnyG8G?nuB2tg-wOR z)W?frvN_v_&gU>I+k)67D)%3v-2t^$($^~WJ9j8tdo|a3?G?o&`I1jJWO!W#8eL^r z7EbDvV+)=!naUNF7_#fLsT9Z74CfjF)dKlrl{kauhXc=*_t!6-GN-Ci?UA8a30YqV zfvFZ&M^6PqPc0>A!uufJ1DV=Nhr&&OE$q6W^R9&!Em?AuHlLHvMy7Nka1w%(xvu)9 zOSZ*R>NKjEDl2L~FC053&QM9^&+2GN=ckI2TBIthVF+_WKP^%2% z{7|GxVShE(WJt#UI8B}tZHr9;cLa@Y=tr#oi#i?s~aKC^l? zx7}{=)$etYW1%wlwq4dZvBFj7Y35Mwgwc^CH|EVsNkQ49duv_YRFQdK)N0bZpysig zOG77Xr0<-&{%MC>**lJ-O%fLw4^q>JJDIhW`>OC7m&`AEBE=Tx;F{746WGE)n>OL2TMGvW&zw z6Dn-r^vDcww+`rUPK_9?M|ap3J;JQFOrLdc6cq#z6>Cplh<29g!RT3zm z4+RfJT}8)&hj-p>zYS2NJ$o#4j1O`#O}FUV5zrVVKl$s7YtPbuq`zZ~upy@Uaf@|U zT@l%R2R1s`T)oP{Vqh;J#o&in9gGa#WQXaL;u5~1m!D^`TF?;@W{mos=GY^A%@7dk zy~yIvc>TQ)(b+&8ClE^GR!6PGY$lcoj!N)pK)7ew@1mY)NjD^8H^{s}7)KKuU!W0~ z*NGPLr%*|v`a#05_h^~f*Yh9pYL+K}f@zNy+ zC`cH0v*B*QhUFZBhKzRIFG0WP ziua@+k2uf;rRARuOlP&Q$IZ~yA>C}?gHt)U`;@=p1e5YH;QW*KVny0#T6$)7_GbSh zX{P&=IKP}K>8T73ScREHjyLvt>+D@P5$Gt$D40>!)5fgZwAfV?!Fr{xv37d3%{daHa83oJX&eL!HGj z(<<#<_KEWB^c7aoq!l6S3!cJVM|Z5Q%4d29AeiaHu}4n9b>@b zbbbAKKemWgs<5aDoH*Dj-ODH3quTIk)olAZ-^=l=2cP1;^czKvI9#9Qaq4HRSB{a{ zAD~dAGcB@ay6|KF9g1knHAY&$;lkjrw#UoOWBvxHinH{@y1t)W8u95#QeOQN>dnQV z;uUH$*gUxZ)QZQ?fz4C_@g{=pz76UrRrZqKE1N9@tfwBUlxsF4KMO(@)zkTnRtW@xQ%2VvcWI}L3SYh$@v(EVx0YV!dcWcHOGEOg?NppvhW;Kd< zhXMnFJ0jGgNpciGH##{&NLMg`lUS5filf#bj0sm)X=F%FE-wE_(*#?OI`Q3-@=B$$ zIAJ}Z5NQNZDO?M%h)^#9))A2>%o2#g78BUAfFJ?&Z^NWk0O+I#2NCL9|H@vIp__Jg zV!iepfck+aKo)l7(j~A-D@-~TV!BrX072Lm{@Dwh2YU~rUBkk|KZA)&hFpVCB-(2q zNxa6x(Z3%T&Y&Or0dm~K zG(BCYa0=7Gh*bk^2|Yyu*#qz*Tro0D#b>3;$G+*5^wdjcuX{+sY>b%h9swc%lD2um zUf8JbB~y)ov2NJB4WL0aII2I9V3LU|NHPh%9oZXG4382!J!yWSz<@WBFn1 zVT_=a&=ON8{;dFHM6{zsNee&{yn0766K1rn0>|RI;C$o%QqOkLSpy7utt7*o`$Lq2 zc{dWQ@$!{hclB)x?xO00p34nAxdKd!A-z6eG<`p<;*MRqgh!8#Q!!!+s#v^>?A?I+F6j_$R?NP)mtkp#F!AvEwA{=9&k zjG>bw1CN1vkd=Zth9YPw6ZBevn@n;Bw3Q}D=E=r2R6(0fu>gzsdgQGOm@v?Q9}sU~ zpb$eqGk_@pr%ZEP^;X6MB7Wu>twCQckDg;EmhliB)`QddFeQc5;bf)bsqt^50(A+O z|44p3pBg>sfv1-V9o|^7r*v&LHp&r)r5S6Y2?13`8Sz2}4Sj?IpGqhOz&{=&d`i%Guq%O4R5f_dNr7pvTk0u` zKtmb?WI-5dh>u5rW-@Fgoly!x79dniFs`AB_QwlDV~9fP zECD|Ox{<()m5ebnNkEOE-~mYq)$K>yJV$W4$rL_JKXAl5Uih%RR0ZrjLV5tHoJ=o9 zCyqe*O;tfx5lALTC^OJ{0vmSeJWO5>s8 z6~-sRD_9yY?ioBQQG42HGU`Q^nyoGOZDZfkE^Zpthr3?+@lx?|>~xU%kQ%6wDE)*$ z9eEvezg0%;CI@^I1d4eUqLen~vjz0*q6#n;;Bwr*ePy7nv9RjptKOd8$G?_7XYOG( zdi(e20DF) zvur9`)YKRRr22aK#<<%`dx!j-T_wKjMCYw)tSTBX8!$*d2$`*(_As{NJZd>J>HJ5m zfyJLj<>o@vo{dy~L#N7et_e1>7zJt>m#>`GSU7#}=?>=T6Hb4ty7jwvP^oh%+@qws zBdAkyXCnvI2a28-WyfjGsj-1TXKu)|?aLO{wH&=Y;x8@-aK={js~pLEl-tgz)4}Mk zQ~t;}?Q6h>=b`q+Te{8qxOy+;89r5|avn27) zS$%EL)MMFWVqWw8dc32Z{jaqjyuISn+AJ)`HpOLxcukZBHFO6yJ*Ek`9iIX&&B}&p zfbRW`y?!#IryZFO&$Q(v`o0{wA9N!%kU@<`$o?D)E0z1hwkviVymQBCbQ%WkTkKKl zsp^WE<@VmS-SiuEVfuW=(k2fTpR@JlJ@Fr>XLZV7b9ji*^F2uEV_ramZH>icLgRY3 za#DGe=52?|o6j4b@NQ;i6%UdM?61gRKYi zAxDJLzsDgUgSsL75Dinz;Txu?fQwiD)e^ohY&S^HhV;IVykr3}mGf}bYrzLAe=nEC zCng4<<9Ee-(E^n&If*e$oOFV8b*=Yr{isTRs)<}P*xx*u*IoR{r33Ie=nEKS5=IP@ zK(6>V*I`Fk;>2DG_eEsdfC&gNb+o;$xtUDBDgf7m$c_M#6WRv^TT|aP#U4jT%c=1x zK=O^k3kLL60Gcpu!$ypF>R9l@9!u?ZHwn>$|cu{`94me|rn}B3i z(1Qn8uU%VuVMj{qb4B+)Q8vJ)0Np3@Ai(hKgJ8P{Hdw#$A%wP0r1t17^4FpV`<2Q) z4yDA!OBOiKL2`h~54TUkQcVp9+%d2mP@$s9NlGF-NbCjBV+hm*IyV3kN;jk|@5{@O zu^`(bWQ~G?C=i=SPKH{L#CAZwz&Qz{9K95atlMmx%%PQ6SX<~P-5}ssXg2^Q0z24@ zgVwHiik2|3Q40~7ATlG6tI?mq!y;5#_G3g%NE$#$L?|y^BIA4hul=F3I**0|rj?e1 zIc_nQFy-X|7BZ9!$lol-T9IIqAU`|ON?wwtSjk6FU>)Evc1Dn$bR|ev0L>uu07-1a z+at|y$g`ek3AyXgA?J-0 zTy#G!que8V0`(uzIpB9>*P)vTrEt|BCo-Xlh^qh}wYP(W4z?Yh71p~1IxU22OfGY? zSaCT7gJ1FKp!--tynveE9H{-Z1AOS7Xb2ET0kYcd%2p4%V!R6o7(+4KzaCpH#ckT6? zhyG;}R)$;~A5foAU(a&Tezw~nwYYZiwwFYsp2k8qN8&-VNXLM7d)w=8X+~;=k|$pD z)0ozut)N%R^o+0Udwt}HL?4BAZD!TysX~#z z&f&;pz46_>!wjc(>xQth?%@m5VmfdlIv~0&QDF-h6F8|6{or`h#(S&}gr8VlZ9By1B~$q4-m3C> ziiRH1GoAg9g4lO#9?VoJ^1mg%QGh2qir%l5XHkw{S)PHpd}kKpb@2;_mDs80Qa+jm zj6HozF~?9@e0)Pir~KWw!b4u~-HI+;xPWf9#r*SF|06Fct44p7(D^i;kzwDn~&d?3HuL_Y)Ed4GoK%L5Y8$fqmVT0fk=fEK}JS)v9AQ_xkKp0V{^!8 zXOtrp@a(|x{{{UP&_oFLkFZA>IS-Ti^zX>XroiRabJN1W3C zDtXpIC%h&+9%86mklfvN`0yt_o(&mMLy^87*PW4Y<-IBxwUt|_A7qT{4bq*4Nww&exwlp_ zz=U*q7%KlK@+6b55r>JO2d+BM(1XfX@yCgYVre|Tp9!#EEh;t=auHepW5Pf40m?#1 z>rvlQoN6Lk{l;<6?7wq{V89O&fI~>=LGS-kJ(3zqG(&UdMj+iF zR*-nZWFVSS9CM|(43ul&asUbtIB|si7->*wr>CT#GA4B(1>yC8+n<@)xHAH_Ix%1e zK8}rj)H-4T@8LHoClQ|TqXF1oeIA*`1g(|bjvoeYN&ssl9BAH+#I=Z!yul_}njIm; zFHm7n0qIiyKc3z@9P9so|F>OcR`zyTA!P48E;Au1dn=L1DDxtF%a$3+tIQ@@krA>g zgzS|a+48$T-=FXCJC6S7D2Ho3dEOuA{dS(GV{W?@;+%;QoqZUyBELry+fl)7M~gK2VAAgxF<{JvlNEbXKe74 zTXwo@ha!fRc=vD|fo0=^8G z^Wr?CJD_Py%y+u`ljErzk6So+{JWs=6N_rVQmx`kY38dHjJ0UA`k8drd}u9DPiU5N zGO~JUPUPL{;AV@;F0zi`l;E1|io3@#|3-kCV8560dgHLWciFY)T0>DHO)V`tl&JUF zu_TU?R=TaN2Y6J{@ll!un zQIwcO*b#7>;F>ekOb}d2bM~Ob$6P%*QP&j~+RUb*{dM8VL4p8jn`#QYjwBLF1y)L6 zaf~Y3<2Yju-lfQzzmmEU6V7>79etYkw1P!Gu97BEJ2tXZAWjdhkab0E{$J*ZLBe4z zi+lwu`>#Lr_qe6<@I>N@)*`CJ?!l9;*w)-QJHDNL#o!bD!5z#l^13afz^Ny zJWBFp)K%4evhstl>cGDSJ*?48UuKaqwzR!n$)B#8mS-Rpr>7#J@|M;p&CB1x=p@N1D1$u~90j%Q?2sL!Z)wg$blr2~LiTs8r><(5SwOpw7!9CgSAh!=1#GdcNzeNkWzTaf^Of>K? zQ3+59QlM>NIg)R%=j@dx*Wl3p`ldw@lSx8|^?l&a6BoNSRVExVkh29hCdz1~rIhB6 zO~0r#JyMlfXW4z#w6iu)4dKro51|#PEr=T2G~PQUZBT!a>0^zHE4dNaIA3@RSE3|F zAa2Y<+R4%=V$Z;zsxqrR_0I z@^N}MRS4=&CHveRIFaM{9~M#V|>C&PW4Yt%rLtCKf>|olg(@E+wtKaBTm-ONPTsK z&O^l8L^IkC^}jL|Mn^X6W|3y14PsT@?-h_9v6%N zVL4qg|3`s93#>Yuijg2oL zR$*u79nh1JdmZSdFp%MYQG~l0@SA8x^11sT;KBH5Vrzi*|3425a?}E&5W)-c zgms{yB2j5#jL#Yx9(Kz?WiE2|gCi{R9r|4m<{C155pn~LZyK_!$V3NAMCA4iePV!s zz}o{7cmPPYFaN;wgK!)&Ek_iH!78I-7pAD|m%D)+L>{PluT0c>=S=p0yE;~~=yn(l z>%hehdwHmhM;3*M#0+fZVz`^+7m#WVz^V+N2#f|kAlt*17T7CfPDG3VF#I9ZA=n#n zOjkc`9n`~&p|AG=mH;4PgBk*gD#GFc(Y1}Ne*Z#EFfAYffB<5_A9oeX7eE(>5zQX* zLm{0T!NQxtiGo)HPw37WGYAE6zy?sJ|4Ua0xG-Q1;T|3jlrgJ<9}<%a_4NJl*oPA> zXSbBWdW9!;=Z7$&27F(JixPw!ur+~8u^7NqXv;%Flz=)+R{Vp4mfd2QBH#+qG;sn` z?dcpt3)p0R)?U4qW>7s5bofIHU%5uoA0hJ>`30W<_d=AH!=(@j3zyX~94R27Lykz~3hy0SFIZ^|wi+p5@gap2+_he0H?R2pU3WtgyQk52UMf-$L@!BVPK%@qhr45XRb3`dKu{A{g@W-9GCF%ZDLW1n+mE7}&rmuIiC#H8_xE9vZr zi+<};d8ofyE2ld|m!jG5QvrNQx+SvP*S}E^ZBfRK_|8lwR=1UFdT3wg!+6T%R#MjU zkrSN~ZK>?kKB*B3(QGezcgmb^{a2R7n96X!gtu%jS?wcz8inA`SVni^As4?q&usld zPtFw=+uWD;1_@B(tU;v}$%J<)IJ-52o+_GTf7WTgH2tDF+AXX{n!#46Fib&;tYj9~ zzfwR?v(&^_qs!huJ8VSPrQ^4QlsQMLrZ6LsJ*LEX<{J3n6z)mD7!g+{VFHhJYGFG5<$ue&G4i{jHN zU2Gihh{nkL!WrVbwJWPkJU{wFd{B}CLq|>hYO_hB7>-+!N_cmL&FVFtDNbxUd`yfl9n+wy>t9|xNDr(MAU&84RY81~0Ny(Ttwq0f8v+u*Is{{e zBj%PL_)dXRKq!C6&Q16qbNCoM`#laW5U~O%KrJxaprgZ?TANM_(B6BptPl-W=kS>n z=w&3X8xHo)Ab7w{^X4d`*+bUuB9s->j}^sAgBUFoT?~E+*gwOj|HjM8wtWOG0CQ|@ z;I2!isO?t>80$k8^Pm;LUbedqu>pgZ1{{Jo2p@^;RiFh0u~m!Edw@m`(1NeOKb-wP z!Jvq910ZauJmCh1ClekH1XjQZ22JEC8Kz^)yQvu&u*bg`SAsZL@x;LG410zE2ns&> zTOHaD*elUOctRdn3xI`&Q4V$qNLX~>>|+LmnuVZ95Kxd9XZ>rwFd&2Xiy2Ie@TkJt zuU`Bjg0wQ#|K(;N8+2GC2tz9>veN?53)$qu{azL}3}F75PdSD`E?!9ro&cXgHk{cJ z8yOin}Au^x^KsNzrQNs5^*oAj3-nUdu>33ntSZ4(sTmsx|h=z&e8iSI8>_cFJ zM_i$v%||Yv-Ml}Ee52`%gA;~>(Nr_rY_x28D3yjbF*knE}+g>PjF9mH^%O-)U~Sp@V2)C$cG9b2p5Euu6q5)`t&kOMjfKeHV#fGN@ zndPnU&>v=_SYUMovKZ(sumj_UEn1#uLoBQrQz3i=$<71@4J1S`^8|M{D1lZbBwGoy zmUC|=a_u6Hc39S#m}h`t9&yux7z?fyIXG7=K+XeV-GVn7QEy>{?}8B#NEjT0zt2xk zPpOxY6hV;v)abN4KP=KCK%SE&LPd1f^}%(6fJczSaQ$Y)^x39A5HIPl#DoDKV{EKL zr-itRKu=RH9QfG+>pLL5e$6o}kJYLfpx1W(j!oF$Oc5W)f0sR}qn$rFX9 zzYCBxAIq;OvYQM9xLi_F{VTgiy86AG%p|nrL=Js6?GAK%=dFpg7abcyV}%LvM`rmr z9T;z}2bo5}f=W!1lr(-&GGb|oECw6N8+>Q+-Nlrn#U03Aly$MS(_EKOc*=zw=ybJLo#_0INU86> zHL+H1AH#$vZg|h%rx&(V*ZRwt*5uwHLF^t@U7t6?pH#cE@$RUdPjh0g4x|Nf0w_enwxdpEj%UI?fQQ8+o*o-Kr+={I46xEri`CAaXzgtk43s}KbF6i z4DZ9ykwwSh2O3&UCLU((HIGmCWK*vEiNU`YD}s^4q@jp3tlT^tPTzaKe1D|9WF?XJ z=T9B32dZ7{`F{$%`)mr9yFWSL2LwfUbQCaIg}cF&tv1kiQRH}S$j7DB;8g7P5_t_7 zPx%8@9Gq3oNcHYSFGqz#A=F#@XLS5wtr5$5+;4Qcs-lN@$Bz}M@mEvsE<}G)9Pwcv zaw+AfQvcf17Nb4X*r@wJ&V5jeT~D;rrGEa~cifDNRDYaeZ>R? zR*2B?FS0im!uuSk-M*`(-JNt8y`ddR$`hwyYGR%!AdkhBZdautJWcDM&i}~WU|Fq) zUL#$_$}Q98{K6x`+UY%zc|$5-LY)QWGFp5RhG+%TB2KbDbzCa?{Gu9M3L3m}ym(b& z-AnRXSJp!%(v3q#F`iLz*)u*{#Bb)S3D6jB)}+CE#W{D%Gkr#1^YEZXbDNdxDxC>Ej?}K!9Kt=YtJ@pMj{Q zrOluFKHdF2d%DezJIYPJm6-iVac_>|n(nLpVEN-fDzcA_%x@)tQCel7lR zZToR)Om1B2f;v6nWGZL1{P0m$-xbn96yfPNgO_C=>*8ukD7js7y{tSDqeizMOOz*( z-qFcJN6Mpcp)BEex600cY`0d|R>j-eaew15kWsF-NIX#cbaCTz)qfrWO;5?b_r4G` z;yxJs@7cy9d>tJn6Jx$g1qwA8{8p6zpdcNs?$hvRgneN|c_?XI5AFtQ%@lH06E+NC zVSkc_MWFM9X!o{M#LL}Vw+Igm&lFocZ}vtTw~%idoSLLw{6)HeC(7=mo6X?Y7_n5Y ztv*YYkzpRGQLJ`XQk9+xPySjo9)>$c9ZMcMcRbxf9~Y(8)ZT{wki~XIR$sC@GR4y_ zUn%j11pOn~$of~Q6%zV~-Zyc}RtQc*>U?&)MK7^R4?l3?3=t3z#wmgDSfUrz3K8hu z9}=-l0>tUJ`JwCRQ*i`wOk~NAGo6>#bsicC3MY<55NFH{B~#w>T{HI|ZJz|M|7?!G zhsI8MI--4K^Yi6{Nx_e3iRInc$HnzL%SQfU7J zU+ok7W?MOdtoT-MK1(QnoC*#DCC|Z|l3u^pefOVzysel@&v*BbeRcWWjIpRb%8v0@ z-xIbb1n&cf>vcbA!5+c)O6>WR#C5`4G2C_N&p#;Gro^sZBn;(L1uajcUj(_^g82uw z8n2`b=?uHpJ1N%Ox7^y@{rSS`BGez#;EploU6-Mr9@~9wm*nFhRzQvKtyMGOp~*e; z-i{!m@DVva8l#;;V5Wt!o6T)|;$l$7bfcuJyZcOyAK$eGqb`jvk`N%qyHsy)mDu(2 z&iavjrvSYcwW0YC1%6iVW86p$uBHCMF0aB+cEgdEq27Kk%H5w=#-TC5GyZwH6%?JB znTb2J8cJ?TM~F#7(lKD+*5-9q{yxYDlGdKxhVZM(O3HhY2?W;y6^+mjL*@MqBD2Tc`-}!T}vfyTW?> z8{UB1JQBkTi!7LA51|QA5p8jjaU(xgD2^K*;;bm|fWIENp%Dn2fv7b3^#jDS2hR$L z?g20LSRiIaPp3ilFEL2$h9hSK; zUjgwsAPlaYHAn>Thok$yr(m76*QSM(7Oq3mDtOK8MhI3Mbc)klx8YRpiP{ zm~#1|5O;;)vLudOy_^B3^it18RtCO#EKOFVwE2Q&gS>*;lT?D9ml1Y#BLqW4D~t_E zl|s5{6eb-GG&x5%v?e_nN(893PYhix6Wl%O$A`@N`=%Lp3;&CY6Ua$YGygs$`5iBo z&|Hg>(Ea_n{_BAzqDRTnts)*x^n}0hNmX={w^c)EidVM#_@dj5?%ZKHKdnC3hB#UF zcaJzv8GOp~m4b77Mk;nPs)I9r?#yrF_bb`oWKnQjcN!5~^={0Occt82?wie2*ql)b zIpm>SpU`)=Bs>drik3GbG(j^b-TOBw=Xti!b+q24qBr!`e>?QN@wMl)x}%R!Lot@J zu2)OXoymv6wyQ*8Ywqnunceo#e+))LgvqnWFofL=`OUcmu zJjN?|N2Qi_{DzG7Yr0eH*CeCUa9CvT@gE)Ps3#VdbVY2R`B7OyESkK=m_R^ZzZ6J4!&vQB{n zu@YV9SVNBLNMM{(?AoW`k4^*S_i8?t6;n%NCku}4`4n77D*jTwJP_N^Kef^9;Asq) zI^dqb^GfA&zJYU>_4MvHEz%8cTOaKY+GMlwn(i_LzTyS**Av41%KI7(&9glta|8(k zJ{No%(3H7bsrS~dLv<#ED7`Z0T8_VP7L(~+9#M+>ABp5vFZm_oeWi*~8>EZ5M3tnj zi`#;idtr|=APC}_cgjW3l|8arv}lHxsq0>;XpFD#0Tt=tVOI6jK;#{crF(<@4P=8u zI8*j)js2~IgxA)&nJ`)gmqq4ELmROy`%SGaXNOET@$B#WNDRGZtnXLP>-XMRTSIt3 zwF?fP-$_kt~W zRP=k$QsKn{dfW`mw}3@n+WI%`dZR8N+`Ot%XV6~-@1Jx+9k1+{YRA*D+nvd;Ts|lE z9{x2QsNLT%Tv&3M_mv$YzuWz+_E`xbuCYH)>JwJK%csH>T?5?fI2I^YlbWtgUhA-! zss3?sT9`PvEBI^%UcU>~xISfcd~H`X%~4HxhbbF{BIApfp$V&^kDR;`DJR2o-9WAT zQro=>uCcx~0ad+QLhsJ!BnE}%c8OE|?0PG2QXl^m_wc8}RPfRwc^y&(Ta5`I zH#s0pu{TwgX4j1Ij}3#SVyY*B+T4aW$E^C78_!k3t8WXo<*CHo8SZyt3&P)OR!spcEVzYQ{oUE?Pbj1#fK95 zcAwf`Yh&-7$_;Y+PWX_FU%_0*qTW8iO%Vy>BE6C4#X1xB&H$&)wbJWQ`Kj^iPG>%L zqcNjsGF_61yJHWrllz7IoGny$_sR3WqWAW1Mt(CR$6#OO-S{=x*NbuA)0HOu^GElq z?)+g-=~Z@w&7al5GHsNS#w+15@qsxz-7rzzCKj!Jd_*=+~xEjot z=Xt8eYU^SQE1nA!?!6}O_2!>&0zLq2DkVcGEN96YL}AfJx5rjqdOu|Zk4|N`1nY>c zb7dn7i{%uh%a@HkD@(`;&Z4Sj${m$1Q!tSe3=-^qAQ5RT6aIRS&fx_;THJ&^beomP zA#I?$U4??ToQGS3nipr^i2_Qj|mu|>S5SrAq+F7Rc=nk~5{RK`(d*g}V z%iuGLBz8IV`+9%Eq(2YHWZlL$p&F8;(4a~|58X^MnCVYAr6HvDt?BiXpcnqfnh+-F zS=x0iC#;GkvVBQi0CR;=KDWxU(OS`>-hQQscTyW`DPt%zNWms}-9}|dk@{sqENe$| zea{u$BF$1hQ#rnMZbp*37abB7WydPqGp{70b4S@MdtI`bvT+RliErFj{rMl^o6B3Q z5#Dl_3xY}uhzk`zyJltDIsNAw?Yo|9l%&rtDUAn(vxp-a&iY8$0J6yYe<&%^^agw> z+;@=$5@aERVFj4XZEz;qy_-NXL~3hO{~s_6E(FBG0P&ypaA!ppVNil)Vqt+SFOfDj z#2o=T1@b`1tr!dr5PAn`Rt}K(2spF^tVzwx5!$8v#fw-_Wnc-`2gR&FL?N6MWVVnA z6e>M>OL*NDnomaan|Ly0Xzm<32+yY8c$3xeZ?T&-nPAU`qW)0t#138l_tA&18Tp|f z{)VV{08WFn89?$9czXU6^!j|TLW-Ms>U_>cbL|wY>3Tt&GB_i(AS2$Txu zO>|@=HHUs&_`LGaVAHZSV?k}?ftk5l0&Yh+c{SEBlUmC?EMJO9z=V*eZAd7le8iBI z(>iZ^-X^vvFwMQNHsPxWKjp~`I}!OxX6r=h&Q2{e`|?Z#(M{O2Wh^e{zfw?eo0Y1* zWoyy(=a%Q}bn}5VwspTj+t=_jUr)!#9utw9fN!+M>$kVNDHTll3}#~aL;Eex_t##Y zwBLDRW|p>MRi|2i!#4ylXWP@A&_AnX@vDJ{A^VEE3XydD`=>#XCF(B=-$WT1>#*EC z-`N@qJ$7^nSt~r;a7_L)zI94AQE<+d;dtA@s37%y3B!B}C1EH;>Jf!RhG@jL8&|PbMBYnWu5jI( zl%1!Aa}Q6{B6S&}l-`^#sGV__IHImFusZw3f8gBjbkCp~YE4o5{+!$|0_`})=GGJ( zX%kG*b=SYB(bQ1qHOlcj>h}6S@x}oHGP)Ak4s@43d)*nq8!8i_oJdJ?hrJ zcuiaR*Eg5kpWL!{=fa{oEr?B?tgQc58;(#s>wZUdDQmmQV%EwvGT$HqT@k|;{wqcI zt%e54f0BDltcvzEKbIDS{3m-QO!;;`v>eeJ_HQgKI{%GmMTx7|sNQ)*TzGoeKKVY# z?zL0C$wga@d5@O@b_(8-oxf#TT_V2v>0*d`*6*NW|HN=uNG9-Mz%_@)SiK+ARI|rD zKOV5ur= zvqVpMelqqRlu<6g>fRn8d{}=e(C72?P)?TiZP9>-=2XQ>jE<_kVcaQ8!t(MQ$)E;tk0mW%Ro@X#|ll?^A@VxEW{|D-ab$W$iZ^^DG^lO#l8i*dyN)QeL5 zF^`=~xscY>&CJ-0qurXEGW+=CqPc$1msc$DA7Y54W3RcP-<(CMx%T23l<_d((rc@+pIYOhs`!eu7! z73rNDx}msV%u;eo%dFjIFIRel_mCyknOdiaT>dMz3L+^wBYYv=*t6WPB*PF3UIlzoCn zD8#q{Q+uOIS=GeFCmYiL_QsZE%9*@UXrb|mVW6&n2K{hxW2~CcWtShs0!b@w+A^Iv z?cM&$F~c8XSA@Lg4+pzY{1qwVSB=YPTwYxktAC%(rtr1~N&)(UzvHOUh)D|3^b0Hf zBUkIQe|o6uELfg>ejh?#&S#Sy-{lS9%<4WdsLuL{Nw<8rc~^Z_VA1(vOj-C0Gfl=7 zTaMO~1U3ge?v#%8P>%&~S`rM>RU8b+lhu|^^ywSX6lDwc9` zX6DJWgKZkG{e6q>luA~hToSJd3 zv*BGl6j5&Ryl;-muZT9PG_-x}Qb!kG=0k$o&|ro^$Fv~_a}_vht7J^+8lyPThcS+x*szq86ARArAV)^3^nB^?X;}$NP1@IEK5yOnQ{OkM zpIb@T#-`~Os@M_H#13ouB-sd#?S+gjei@?7y0fphCUYuBWK$72C77DyqT`2IXmD1~ z4KHTq!-4))V?8}&cYvgULUaZ`XZ7ZyAa1JVV#%Z`ig_@IlM_)BghRU%5I2z3)9Td$(ck6n z8m!M+Z6hZ=#Ta49e)BHrV|5TYgme_Mji%mXTOUbTW}X}4%thJH9Grl88vpn{;_J}f zsBR-#&JPvki<>)_+h%z0l-FdlMSN2QlUC(6oxGe=1?e7CsE@7}Gmv$`$w)5wSz1K- z?f}77U%q2G{v~G0zY;bMGoFfTIjfArw5LTo9ASJX`pMz?H`0djQeyr*WB8V^{Fz7co{WTIJ*KW9~NZTRx)GEpokMpv{70dB)Ng1hZxo#TvPrN;9Ky0P; zCkc!Xz7{BP!$uL|VbM89!@g5^m3xt_t!I5`;eotYrT7)4RC&fMne#O0=4)#l<~>XbDDu znXgQGVvDKrF0fWS6D#C6-+mM%&FawGY52tKNf&D(iCrcRe2+zd@|6p1nxBlA^ZI^& z+9eg}A-r6I!Hw<3<&KHDd;v_mgFMuJr&BVFjb5V3$_LyR_K#%WhA4e@E)(axBU|HN z)8P$)?O_!Hj)#p@>cL|ir(DACleTxLuHC1>aGdjTQjMLmUJEJ1=t~%^POEapOmobn z7M?}QiH{2!jzIXhmPEh{-cR4mQZFSxm1y?!dyqe~KW8bcIi9PqyYzLj>-;ZA(6MPD z&kT9Wg5K|ek;=!^>z?Yg%}M3qbP4?zg0uN-uH2YX{T=0|&HU%R@%-4XG2>f0hlWH{ zF7}z0n8U8o4|4)v%?gTZY1G{ESkEu{k9OI{(ph~q)z)h@-bJmy<~e+LFXYg1MMUJ@ z917b@c=L(s$A?j2m!G?ptINK!Lh=k0E2C!%7c zQK+lcm`I+KXKUY{-8oF3Ehuag%}kzOZaK72-rKfV-T0fDwl0pFoz3d2c){-DbObI( zqBXPmku-UlK}AzZc3rMGlTk~1Y?0eD6kZgXD^i2;fvXswvBa)aCo`40YV6chi2zgx z7->IbRyqEql9rjPJ}}|MwK)-%b_=^QsgpJ@dwbD$@PS7qhtX+V$~(4OKS@5tMJ}Al zY_^<8OSaF{b`?S+f*a1fftV_T=4A8r)78hPvr%5N2k*OYn-3A<_fy5VZI`JhjwnZ% za=ouGTh8j2#=A788L{X2xM-^L*tyUJBWbX+GrDRhr2UQ7g078R`u82ep``smf3b4I zww2HM7d~CJbml?NUx-8rQ7bkOZJH$<`!H^>p^S(b8wB5ZsdnS!2^2BOr|L2q#zKh2 zHX0I4v)T^M|DK#49Q?~rZ5@atab&#ZBXZF^!`J^{aD1q(^DoQTyGINyq5mvH_IkT= z0{eZ9o+`Rx4~7Ixv@ke>a|!M>g7yG3XFL@rnf&))go;z@Thw$;&n-vxav8x3r~TJS z33%w=+U=gC1`k@Ns69OLNE_JD-t7npSRulaN9k)CW?dcjND=1Z#c;;Pgs~5%YEZqI z5M$-WzRVl`EAO(2$ItiUP8d^eF>kBZj&q%gfRlj6>(Bw%L)`ul(X4g(>LcpoV+Ko& z6;TaFvq%wZ{z)2c<^*n6XHF-l&)8-&Rxp(N`nJwOAL|7*f_1E}ES)-zhhNTQ-8D_j zr%hj)mCd##Ux*#9GvphbiWd^eaTCDu^CY?nBvcA8=0-`3J64f3a}L>2Wl6;93OFT} zp)rx4?0^28xGF`_2&sM}@o0V7b-z!uD5#r5%dtUTe<8)%kD+hh47@QUy`DFWFy7+) zMg^P_5@ff8pKAI0TNn_czYcypEO#Uy%h$FeAj9)4rM!7g@@eDhsmMLsf=EXJI?0?; z4e6Nhr7I<@_Y=yNSNKAt@YzGwMbM*H`7*l}%ZqAa9?MiO6g06M?VmTd>NBhh-+#ta zTAWCABLzCx;e^BX)HU#JkYyz=?qQ#U8fiY!0??W%#Eo#GR~}-U|V2VNYBgY zfsHi{-W8hV+w0cCk7KLy+_fbQ>;Ih5Ot(k=W1Yt0P;23~w|b^i*U*0FS&3p#cS{l< zc(7|}_;!4df-mj4p&HpmiuDL}o zc^3GsJKJCFd-o! z5~Kq#Dpa1f19AXIdnBm}$Y3M|6)I$)#tOm<;7I@c)hkFEA$&K1L?!5ejRJt z`Ioe@h}~mI_hjEZd*sY!yP4n2T)t6=Eq?T2^n(@O-XnXd3(dd2kHOLeddwM3Nfz77DI?Df=vrV<^fjH0c3KH z)E#=jkAQ9v0nF8N?DV0s*NZLfp93|`lJNM!(ilS8-VfBFST7`Ek*mH6keXwYm#RVSiq zSbw7N!Qm&8$urK!J3BHG34JPP>DpoBCu`O1r+{lKD&2_RPIdL$JuKZ*5=xeb!WGj6{62>IQa^OhtJG4kmOcqBFM!+zzLLL|I`c&IvR*zOU3}QA1&!+!(uT$`|G3 zWM_d@Fx86lO$d;3V~ZW@6$T&lILUP=a8-r!quj)$pN^kWKO>{2qN6J1yyU$k5z}); zo00r`n2kz3sZBF`Ixsmyb zO#`;e7BrPKj%uIXbQ`K>|Gf8ZRQy(`)K#lN>@Mq{blf1(XC1^QR~V2Tdid|c;o+3f z>gI3gEAMykf~;T1cEY9UrZmy1hqQm+%&&NQeo}Jg)|Sj2{P(X}Z0`IHbBPB};BSJY zGrxzQUK*6M7m>`tImnSM%_aOMfM()~RuDWhi z)UP!j^(z<-sH-7Re`KSh+Y7`#S)yUk(RpyH+^E$^VY~s3W_YL~`@%^V*2*^fi)a_| zVPAnx;M$&av-B>{Y0ds+Q)%%`HS75PS9VowwGky1|8w6r*` zm6#|BObSVKDZv7jnv#_sVvyaIBU6ylBKT_;POL%|x zKFM7bheWHnpiF|)T?)gX^Q}!CA=|zw6|)?1>5jm5HGS10YrJ>uIOFTdlx*mpA~}J3 z0#luF$7HAdKhBqUC<+(HL)qF}g6GqNes6`S*L6wlJ#6TFy!!wrXj3p_`C#nm2>%j? z4P8+wPXc>yJiYCtsdMaCruwVbl_CsBT30m_vvs}UxRIdf7wRo9h zxBaKj_}pIz`kwC-E_D54sqIdLMxLSeJd(@4b06EH#;WX|yC2@9v_A-D5Emho`x!lS zN_2bEM%i~@BVW-w?Ulm8HM10kbQLKb?Q7VWv<`(46&>5O_;s7_UzV8&)o~whEggA} z%F2#9Ud^3bE~{t1`I@c{ZOX1>Zle0O_HXV$+VBHPi%~iC&Ax2(OF>Pe=L|TD|F%jE zo@>fhs|mk%pZO-`{B{FZHp99*bzP6X;8((?fwqCMj@NDNt=}EGdY_zEUUSzEY;udd zz3?IqOB2gYikD+))4X#ex-&KqqMkY0dww!eJ+uElTk)@Y{rBSnkr_+uRd;qTA7DQiv17j13d|hLIJ-$C%!G+<@W>6d|#~4}X1C z!MZ^GSLMT)A|(nu5mbqw?aNs3NL`80axneEjw4Q^$*{;sJNP6mV*`&eI&7ULHH}v{ zD>a|{GW9jd?)z~BH%s3u5tZd|dp2HNbjEA(6aL|N>hSQT2d%DN0wczXjuv-=k@g1u zciy5Gm!dp5nP`+63hA3z5<`|6?Xq$83oR+UDn@V}F??HOiLSOqGwdnO>kw ziU)T>o_Q`tzhCvcnS@rG^Ye|HoJY=I{@lJ>%}w|wnT?7ErST)t0@S|jv3hp&&G1RW5c`u+9nqQO**GzBv?JL{8_t3;FqkPFF->54^`m@^X zp+p@zp5PQ$jNC(d=!>x@wuO&VIA+P`6Lh2%wYDWcp1Vs&1kRVKHUD7gyXcJjp( zUegy{y5#@GC|yOxjPbI>m3MrVC=@ijH&#<{o}l(cM%{qOYE+758N)jHU0lq}hk_nG z6hvga{zyZW?)YdKeLBNPPDMeCx{zIMk<-4X_w~c@+DCth?w#&@cZ%B5s^s&VX~{yO zkGS8|V#qM4>Une$(t~ZWJ$iIL7MLdbU35$5*TTVY!GG?J1IzQ%|2C%IZ@is2 zgxXTlRv4sKz%K)Vhlpi)b5ahPNk~<}$CD@HRSs4+cqOp2f^vwM&&&`bx&*0iT+j@& z1R{>+=mW?%1-lSfsE43RL1I8r11L;*`FC%jkY~zXDG)#H_+|fyA>wFef37d>8{Ye(wG074?B3RHz#PO7oS2b76)9Z`SJn zCBz|SB*@kQEf4Zl0Exbp*28a`x|JS$vyW zx{+}=k~F4-wfBxkhf=`x0>$_ZQhX+Q?-^Bb)0i)DmZ1c=Z>p%H7SAa{maYUJrDWJv$lr@LXtxNO||QQS`J$ zwB&4F#!WdOVc`X>c*&QrhLqOP-~NW3%_9#c9fihrZB?AV#@#yXmN^eUKm9g+)zbR= zK<-BL&6+i3r;_Kgv2i__@e(F)GgM{NpEGP8vw!L1MfIx@NTv{^pH0s57+k3u2*N)j z-iS2bP}A#$QsnelTE6Yr+fuCbR2e_{rT^Jy8MMe~CJFzaIMu7^PMGO|CrS&z76BLq|sm z!LOgjHd8e(pv^Q?B~=w3vFijv@y`^c7O$Nqi4i2ktuFJt8@5iME=d=CM(pqoalePU$|cs2vl0*un6GATQmN3x>$x*g-Hqkt2g z%SOP$%6j)tgx$~4lq4-$0rPdT$dmcN!47Y<)D_V%ye zipB}9OuVplHDLB;#IOfT^7^3cq$iJrA#uM`@NLFtx|d#Ir1wWBKVvthBW`&19X{nh zmXDp>zNqf#IO8Ske>%fSLFPhHIrj0&xx@*Nu;SY!x=@z31*<2)Tiid{o|Od@Rma=% zG7RM|@Tt(?3`JE6Xnx`XCOmMRUuCuy#8wv1hEx{M=GeJmhcqisn}AKZ{mpTG=HdbX-;v~F=l5GhRsy)W0Lhq9~9*7mkIi%T#`BaKtrW?|~D z2T=tJLF8&^o=I)T+fr+nHg%}ksNAFu9Hwv{F~8LnHR27^rqNdHdT$h(V#?alp_)RV zY1wf(URDb?i%Ye`PQ6kSlbM)cCR^$@c7-s`hd?#HN2%+FGLsO4U=*_>&uQ^y2bLSZ8 z9BUopIU~c`0;sXkHoo`kXFlaOw{K1hYiFxebAebXbFEQHi4`Lp%o7N&;8qd=>-LY` z?sG*wtwn<7^X_Vt&c%?EJli_Izg|c0w$8&ig3cd-%0i1G)J;w6cP&&yZPzrgeA+%! zoOAtf5PqLPJ@M+{#mm!|zy7;O5Dsn1oUBW(Du={NqBj!+9g6dUo$LR;D}O`L)XenP zN=Pq{Yych>QhEsiXMumv;8x~kPP_u<6~x?LwTAppa#sXo)W97dg$p(yUoIW; zV%|dQC|IqK@-T4aBO&+TFfuha*Mg4NT2ax?hGwf7zxP|0b?}bvw=Evfc6@~N-*<@? zk2VfSD{U*csx;Nlj6d(GfQbkebk*X<^1~Y%8$W=19a4m0 z8jH_(;m!=!Xv9bqG)G&=$(%Sm1$I?ij)tmw_+sc|SRF3=2qCiIDg$RXl2VJ<3LU$W zYawo2PhY>MzrPH|OK{eMODO8qE?B@{PEJA;sSt~ITg%(hyW=N2a_9U(=9Mp9gcM= zcY?|n2+|!j62k;ZKX7fZAyXx+Ly^G`(g(w<)&OpXE2XzISy>O}Z>VM0z?p#xr5eXB zO2mEt2ZC)gk;|o`;9(qm2B2fY@Oo9C1F984hb)4KR*v(-u7!n#K`_a~D8Pk`$Z$|W zvY1Lr9J*zp-T*$uSAV^s*%ArYg(nNG=v=U+g}HVfnU28*2yN^TwF}=lKc5wRaY$eU z*gz#EC2Q_4>LK;1aAG*@lxY@Uc&L-a$_23%NU-u&$U!3<1DZqwYY?#d|Nd;8*B|`y zzHjBce{gVpMNw|R%>|u!|7#tu+;UjG_}jK^2^(@@Cea#_8+P{Nyuvk%e&YIKZJnLc zne`&eoIPseUo6udmp4fdnnTSV7$*z&)=`{no;+HfmFQM7wKkXe_NsDOaXEj7G5I{$ z?9mRWOXyX0HU&2( z&GWvIWHXiMS+3Jvbyz81&f!;-j!Uz_yLy;F`Km+b!h-}o&s)WoVHBS#E>NCN=m<3a z_PJ3}s1={*=5j%lTT|PfJx*mGu&y9O~u=#?#lXEL`;X z)j+GkaN{Vbhbf?^;`h&+`|FeaPg{<8tGym3-mqkPK#`b@n-1v^0IGZ6cb9Hy&il+? z?F4wWz`azcQ(akd{QBZv z$k~7SffLn7?dv&C=@=Dv`P}>@Ii=p& z`d_v8o(*Q;H*8{TguH_G#1<&Y9VqrW@$9c+0~C8)ReT6%^e?TJ&?U~OxJ1j9c5=QX z`|TT%Pg+8TS}PSDRv!_Iy#BaE?Y%zWR~zwW#vMum|+;dvHefm56+Q20f+sG#P*|BtJ;0IKqh z`gZB=?(UZE?(UFo5d729U4nFXNh*Sbbcdw00@7X5-QT_6@65dCoSDry%s9-mpUv>B zd#&HPt|S!sDCgnUbvvXCB^DZngs)uWgxPUhy3x!UgF;iH*|%o*E>GLVoDChpl+eX8 z|G|wz1?y6G>8vWsQGI04LBcPk5rXCcK)%@3aAehDT&L9186yP58C`w(Y1pv-mCmc5 zkNXZe5l0VlL~Zio_S3Tx+l<-NiAp9KpGjYGXz<(0lU;rUa|s^r|?^!rnjNWzRf zM?1D};(QT*^%hP4X6c_flwv||od zIwXDmC$D4AR3P(7w(?C+6I-I#j?cU=G(U^&FM^Z}W#+UiI?>!5Qe-&KQf-P)9j@p| zL=*`gEB3WJ*%M4680cJXUpAADXISZW@MH6!N8yTDo$(HG-VOIB7Ifxo1RNv$m+kk) zJNS%1ola!A*MvM)7%6%Mt;G&g>ru6qJb2>pu=$QS%p=ym1x(Y zFAE1g+)sw_Wyhudz$K;8B`8u^rh*15A|UF=%({r$tlKCH(vr|cf(jeX?h~pggPFTc z(#3bB(i)s*?P8X&h`*l~`jguIDFfe99z>!2+Mu%Cpn{X$H>4P~L5`}Q`m;QIP*J^J ztWa3gS~U$jTB^pOJ9v_lio9^wqk=4A$i!=VHYF)Un;_>y*T422S%yh^YSfxpBegG; z)3ZZ6 zq`;ld#G(Ziae<7p^Ip_vbd5Hi38`16A}AZ5^fh+`u|R$n-k&t%+~!e_0x6gDszwM6 z>9^+6C5sB8d6EAHn|wsf#^cqfw444xpng1zoVE{_AqBMdI!k@L%TOlu=?5laXqm{gq#t{L7t4v_;yUjbZU=7Qt+uo%w=vZP);}N$2%pAZ@rK(pbRm=i7WfGVgZ?h9~Ny_g-U1T&iIoRAyI9UdHUR63DBPPi)_+J9BunFJ+R)qYOE)H#wznrMVBHN=l)u2-@{{-v0H`$a zoR$Nl)%H8`1Hxoj$cz}!=^>t0C{Qi80>+ilRvZuDN!bJA0mQ5Tk=g z$;f1x2k-X^CqYHE%JrenFb+5xE+}8mDIpByow3YWU@io;9)uzW;Kf&0SFVHj21Q50 z30tnf8Q?K3M|cjl*+EC~-y5j!@0Y;FymawY*1bCf4gu_U5N`xz{oKJ}9k_Igo11~G zy#?G0Aohbu#!NUA00J6Z3Se(#RDt&cqxd;81n~r*7UQ6}zx&hNH3;m%J%Eti3i{51K4(;r-Y(!gLzqT#-d0pXEhDKuck+eW&F>qPPR-I+C*VaLU4SzXh;k z1_XU9nuq+S;_AL6cIi;gmKOWMOp2cq`G5Flvsw~4$H$+fM6XmftD47~T*j(j|J?o3fCRPFGfvN@tTpRbwHrui5sT> z&T%jNr^I8*PiJ4SB}dYrfUXj*F@t-Vc4eSDnAVS9s^~wMMb)T`3Q8~hO1j}$#n`hOU+kp5F(?XB^p`IqC3};1wOxz5Ckz_wnkcs(C>ehhSHhjDTp-ddOP*(!Y)<`db?4XFA05P4w+ zjf$`w?&<8rV}{F!iHCuM0!6&OKI8e>x9h=yGBDhig%ze{M((dK7D^Q|0|Vls#FmYC z>)n47ix*frw;k$T9kKD~xQ34d?^tG;zmR?EC@=mze8l`cyhT1krAs7Nh79x4Zn=I)IAFqyK z%(8h7=dm|#bC`y4Az4$GT*~`V{6+9@8Zwbo{PG#n@$uAB?ZR0=3XeF&?i4gg598Sq zXBOoT$XZ5}PZ2@)fxiu+6hT)pCA`j4>QhE_AsZGVb$Oq3ETSF;akOE*do~L74|Me% zmK!E^KQ)vDSZfp{qeWb6*)g?bF~ku`wUsnDkolyOg{17?;~gaE*@RhKwYOM{D(NAU z*Y`ADs`uB?|I*&do~_;OR6`X!zK+gH*)J6^8T7d1EO$EfP+fGVY%`1Bnj~GSj~Ogk zevKAUWWXKI;mIWxzoYJY@(!K^lNk|;03SYyhx5digV$wQHWDcT&p%y_8JOmeK|$W9 zrX8<8G0)Eq5f{GS_?j6#;#?B4Up$T#ev*crm!7OhmPeDvNKKqOo4c4yN%)O>u-re3 zehSUp8|#0YDv5T*rIRQ+a`Aji!+N;rA}f}-*4Js8@xAc5D@nV=B(jlS-Aqck!~}76 zYQLWTyfnN<%5Q->)lFz_$JK3u-S6d#G+*k)O=6>Fq+EOD7q_%N`E$4gbP^W4nnq%G zg)H_ZL775K4#SzveHX_Xs#3)4UvMSv^obu6`=Zw~5`vmUpK&?T=bKE*% zcgE;qk&T*%Yt-*bikun0>3F>jBjKn7YRL^LGVI@4a8@`Xrq6pJitEErYqCH3Dz9(gfNfl`A3tmTj0`5FcQ3&narm)`zW06B0u;9L{!a|yA7rr z6rbTt&7>DODXP()_3$`!cN9LQ9hAm#jdB5?^Ys1wth+#=?L3C3p!ymRW52@_&bNUt$}*p7`@uOgBK-_sEg&8C&ATdX=dLpn zs@Oja@MrT&>hrvXy&|Kdw*}J*-}J1eiCRrERQZp>J19O2I>1#{SJP#y`rRsb`}MQB zo{5+$g@uOPqPeDxdlc6yzdo*nbh`*YzMxgFZ-pi^qWmGZh9xt==7;-QuKWGnTXd>k zw~-~BCH9azGq6R%k;(cZ;6o+LlFlODP^w+^X3wZC5Lyr>b}7``v{aiJ6m|6z%C~wX z3a>S;d3{1;&$ly^*{ZuO7VC8nC$dDfj41jqtqWx?41_@?Y=5`jSgyq|o}K@FQ7^4t zL;n7(etZ6*_W<|)Nk3V=0^*H=f^ZYTN*<&~`T9`%x(UiHI)K8029NS0q?=HI;BO`P zI9Io~shrFMCjjXQP@Mos3e+aU5ZE-JQcXbS)b4;-N#VPV&Czvdm8K0rRfGPV#`L(C z@6Dop>*1HL5Vuf|g7^hCq~HKM219wxjya&O1?rfb^7B#FS_l}^4e+mkF>y|yktcNo z0)iJm3&jL1X9%kDKA<2pG?eB@Aal$zbKAat@n05ydegL**v=16VN*7Od!P%0?E&S> zS=82^yO5{p9>5$xctMbyA6PI*y_}RN1a;L6@On{ULCkE-<^XpYGiW6jat+iL!Qs5_ zf@Jc_BY^P@98A7-!*qp{Jlx#UAOr}(gFykP)?f+#ycekb!3QxRda2rV7Rl)fG`a3T zkql8sZ3$vPAY!Gd>U~^j;x~1P|6_36qI}H)X*^VyEGLR$Y8epUhk|rZ0eW-8{Po)W z9<=DBz;xNi$46Dl&2m*wR~I<9`!Iv=WWew^qh$VKdh5^Ztc-9z14%saokAL%BQ_~u z%$+hq2jO#M+yVkW=m-V=XaKIBAQd zz~V}Vx-{yGOs7UmhDK8sZix`s6pt=_n}s-YNlB0sr9h7(j*5Y{BI(f9+?nzM%l{JW z1Rp9E+Y}xIgASi#=XViOKv6jF1BVh_gguasGxR||l|vglR(@osUe3H+iZa7g(UnVUm`^7wb9z7NSWm&w@DTOw<(n7pReblKMn-7~N)a=p03oEwB_ z2-#DACeGHOYPKwP-1no@jeLn)^FS1sGu+s0uNY|SQpt*2f5fNi=l^Up;#usr7dR>m zE;!(^_eCysMwqWBCZ;I)(TP6GD|WV+uFJ>I4Lvyg_lH9=5_fL#!|2yKe}AR!8x%i1 zK9n)30 z;#JZ^@2ix?HLgQJtUI|jn8*8ddHCSz!$ zxFj?>&gJCSbk0e78W9kdU?^6Yby7#|6MM1@rHoo+g81u@v8yqBjk7zW_+UM%h<}UgbOdoak1YY4)d;I+R2VBM z@4ht~s=CvOQ~&42X6>)N^)XnoWo|_}npGqQCd|&+2&M-ECwliZD0#Ct+TW7n-wmW- z$aq1Y7z%~%bpH)OLUe4~ak)D|xI2a=-u>Y(9tNYhL$~(yKB~=7$bjRHx8q4DO>1w= z4u(MWzvRYw5zias@k;Lw3#y)BS4s#FRU_*yT!>0AT0ha&tdT_%UWkQ(GN`5@{9{)p zg&s6~w=b#;W6YO-_h%1<76c@D_pzF(iCpW_2Cm^SzN?bg6N|s>TR+`Zt@Zu2Urdh5 z?e;~~jsAG!mC`3mqeK_ApQ1OO`)4Aflhc3otyQB~xJmRkcS9)~jA1hTlCW2|h z@JbGJAgn*2d!R5uCpD{R6CGAmuj|GpA&`{g6AfemcWG#!9K zJYQAyBACjcUR+ayFjf!b&O{4W#J?6;6sMZpj$u%kr}*T&rLFza``K0SIR6cwZJ9DS ziLblTIl3L~QrUXp7$BRcLr384^P?d!tY^K6aPKISz+%vOgUovLCUTHz;-7W*XQws} zs`so9+!iX4QSmhg9cE(bzwCo^z%ShN*gH$BFPN9V+0+Ma>+y?BGJ99W&3ty5GdPV$ zi7N^xJT$}x8zx0RF~Ge({RrM2sVLYDobO5mgAsj@gEOjkCdL%I!;*M9xxE`-3rNTn z|G?9{;>SvA<`+somRbDdiC4r_Nbbc~KS`ww1mE97x>lHoEYVig9%V(e~-wNdp5j0&Ij+dTLe$IPRg-_*MYREVX6=CkQ z$DszDIxMyMH{sB6Au-r!I2@d`sUsz&GL7XZRd{w(A*rgLk4V~x>98=URmri@*3nv8 ze3vqPZ)~DaCykokTZ&*rajyMaz-UU@ZwqxKTF@`xOB7d>nT4C^+*W2Op*9QHb;LMX z0+?+1+g|c{H&-%$wAA)SN)@9yh1YoNm*Yvip+#Goj`J(vkKd?JHlcSW-ubhwQ`SPfjwIf;a6TTWY+A#CjO_W{^CtGtH!f^=-ezY~# zgbI3wk#_m-o}cW?c4Hu%;hh{U>@%#5N9&vFsya6NBp+*1UKk{`q%qr1lbvRvCAV?x zyeqRyS~$P#Uxd3(Ii!mm`*aGS%*lIUT|cR=!3@`Sz|d;Bi?!Bl5ym5xp0b;s{k+Mc z|8%<>CfdlPy!qJEvMaV%!9$!^V(=A_#3&=O+%ZDB*lJD5oZoD=!%9`JWY?9~;YQ-1 z^--T{p?$?bi+uymrZn+KVczE+w<6iTRnj5r)2;k^$yc0`2JU?9oO&D{r@Z&_f00z9g>!9yK3K0Y4c2hX-sHR{2D6=F*RBjr9| zwz&s|!be*p2qF^{SU53oVC4cbJ_VDpv&q+|Nf0z7?&pGlqyQHkqL6{0oFJpdmzN+= zjf`8@^J$12HP%>;?uMt@J?_Wk}w0-VIfVv{k9-gmn}>nPhNH# zA{V`$(}A=JA@9g^9;{;k=eZ6*n1e1>>|iIjEWqnc(+2ELAOou?3=#(8%MH+++XIAp zTMLU22z`>ZrUhoHsdXzs1PaJbZb%c>rl)&BN)V#Ac6|SSkPGdk>+!$Mb3t(1LHx16 zcbC{K_}ReOd42~N>dUM%%8km?EboII8 z_4#zqUgD8BSup})xrWGFA#VaA+*`0tbOQoF+{7VYPy&KzW>HyLWO6dL>MR?~cx~qm z3Am?Z=J%rpt5f9=`X%TWo_#fcjs>H6m%L|@|4#+xNM;&<*#+l0!Vr|w#QVljk%2(c zic@I!FTdlGJg$7Q6fM0&+ek#yhqiVMYhxn`<}yLgJ1D4RL%xK383pW^4A3Ljs`*ro z%(irs-9{4SxGBt^V^>1zm#k-^8Wze)eoWs?CYmiu-x-ltoLk_XWBHI$1OLqy6Rn92 zal;=yT=IUTE?`xqnxrk^QzjkjFEC3I^ck`JnxvTaQ4?-QQPH-t3JM1LU-cC+$tr)c zA==pJ)`D5sTG@In!&CsLu0q?u=va&_4H`Py`d z{lcD5CWzn0>4Mjx^i=e5V&$~7ap=^7U7>SF{~OT4%IH_L#L4Kl`N3lLttC71S)xez zk)?kxICK2za_SM6X=nWqW+js#UAtI7Z-e51=5Y(tx)c$qQC039f5~^Oq^pbKtgJo4 z#;o;c*vJlD7_{^V8;cWm4d-6kM=Luy_OYYg2KI&+kG~p>d)w4AstQ{H8M+!*p@{ST zRZf+ZI(+QsNZx%K9rl;vvwQ5DVXdy8F<*AcT~U#B%92K5$0C`yHabT#Ccx@B@zeSY zL)Yy%RN?Cl$NtBXAl|~-?urh%$5 zOP6t^pKs~0SM;43Mf?LsjlS#x%WWxZ%TF|m*rcqdzP`#{)o{7Dn=Uy~m;*>KeUgL} ziV21NO*Fy@CvQx05P3u;+B5u(yQH=U!U<_}Z#k7~aoFUR z*3-fI4T&rCjtjbHmt(g$4csIqDs+{R2Y*jzejx9;whj*IbcCDINzc@y1V1-LUGI; zNER%-Kg(3C7Df+zgmzX_K#FdGEoUdL6Psi)I=j9~HP0ze{bdJMxI+JOY0qMHxfsw{ z;8fLc_@(2|k)lwUK+h$-Bl((hxM*XK)f8!*)^ht3?3s~-Y%t!^G*gr~%i~UK1n2%c zHkUd2D;H=Al*?2z)jS6oEaL6{P)4|A6T{lru9cOdxouxsiQWmUv{KGsnM>Q=bA!bk zp_xTFE(@AS^|$G?Y~~b8H@k^n@rdE+=q0*{sK(ei_p8Oo29)UUcTw`!{+lNznqkIN z^4xgy#HWDWNKHF7;`D~sk$T$gnks{!e3VPJRvn52O?Y3ja8l zz{^6PS44^N7a0Y`pCGSHGpB1XJM&lC-wAh;MTt9`CYS8z=uUtL%3kWGR2rFAccb1bo@1Y)5`+KTQ}%3~9G{kmwbTN=nyo<*FW1 z_=fe6jKjY5T%Y`a4$iK8!}oTSPg-mE)&UE*Q9rbt`Lru>5~`_#rhIxLV^F$6K-4Ks z)Rru_g5^obdFzlMqtP`fYqWhx2gW>+_$9x3g1y=0^lJ^@f z*N~q-kt=cjRBGcKjIAoq8#D6u_ly`Tj>#j3=1+v6g%)oyXfGsl)%ngU9gDI+c50(yW`Oy<$q$-!WkqxzT;-f61SS)2xln?W=j~ko@%)M!E?}-ZDqmGSx z`RskFti+3BdpLIhHTa{+wH8-7WtJ7Yu)Sc|*JEn5KPyKbPcTo1&I99z&-)B*ZLqsH zS2erv!(;DFYF1kfZen86*v_;4+#By2fofFx8cOlmKh}}>9YI5lTFl*3Ra4C*37%RB zSD$1=sr0F)c~|Ujl_N;5r{KHqG?+bQ6k11vX>_xoVU5F_mK=hD{cf2y2>X3U`Eqva z5>{|(n#=vs%tK%EHd%+#U>ZgdSJH!>)n@D1YYUyTImKCW%Mb7sk&UiOe#<%*=gbE& zcQ(vKMA?eSSr7>_?E5tW+OaMfx?*>B$G@1-)q>%=1Q3v-6?xL9I$S!Q$2}JlCqWX$ zUfgYdH{T8|uy#n~!Y{ATydk^vk{OGe94U`qhxM?eYBGTLc$$AhNuw#o3 z0D!^~Y*Bzf6Xf9ujMfQ|FV@0im+CmQxutWPf{mdSb=MuCB+3f@K7=z-v9LI-+x*JV=QH z`0sAu2hS`nDuI2Haz}SiZ4inTCMJL+8EA89I>Yv~?iHvoq%tQgfr*_Fxb~VOAp4E& znlvzRgV$E32)eU`^yzZ=oWP|8!9tl3ErHclfGn3YH6?Fec1H!jdcfPV@ihkw_>v~~ zkP*U{eYWDkL>K%R!|xVSZsw8q-VX;A-If8$iQeGty8R@!*VNIu%r3&^rzTM#242lFTzuFvLvekeH=1gmF=IVjLLIU3cuQdRQZ_m2@diB{_VEKa+W;H! zz*fwrO8OBCca^22MO0sbY#wWsW1gh2xU6^~JJ6vlvp@jzCCi+ z6eN@-I7UIwTeCZmw7sU3AHW<4I}j=E+{K6^zvDGJ)N#c|p(B}Tf<_<8jQhhEh=yty zl1bGpW%NZdM7GSmpvLoW34KX8c5ykHwotCkPw9EM15dm05XA#auP*~gT1s+MM6$R( zRJD$-cT*tx5X@&R&=p(k)To-Z&I1Quvqi((dt}Vd#VaT)NVfZQYZB{eQh&gkgC&?C z!;lUDK^9Q-Vn3}*tI>2=E}jG7>{N?E^&%EyOI_J^(HSRtL&RrbE(5(<-M0HSiqba% zI0rb(HJkvS9b@G}h_jFkX%h_{JBcGylPE1ya82t2x}%m{Spz1s=&N9)yli~Z=-@)B z`9xkrZGVA>_|*{h0+T5svbGMBLa~58ZF}4IU_V;B4^Rz`%Ggir!&FhyQZ9;RpSF|< z^rC#YZ5jfHC`#0R?6aqD-`w)JXwyT7J-PP2Zg~7U%ErgOvi0crekWbdTc8?PO2+Eq zt14*9h=&qi|F_5fHEj3Qp9Utk21X}Zm*UHFJ?bQ>adD~S=;vOnM9b=W4s!Ma#F^k) z@~|7EtG$Ik`CHpfNP??$+@9!+7Cs(Rlao2+Q8lQZV^T=DcZ#vk;b93Vvxrcg5p`Fo zQ#lMs2JkJHTStPYE_?1LnY&ZXtS5DI0R^+u%*3X!2W}{2^Y}1T{Lca-|J4%d5-GpBcVu`MrGamoj&VJ`$CPZ zKnGov<|u4sT1CZCTS|diZErj!&D~>#8_QqhW`!wo#7wPj?qWxzGS>i&Sr|!OGc73@ z8SPfgdouxoOEtpSLx>-==AN zx9zvxHW%qDm&`cgkoeTfjyg=&J|&B%=KazB&n%v?JQvZ`gN%|1ue0&((=05?0n-C+ z2woDNNz?dFwPWmBcb5HehC9`0{B7yoHM&q&8=Ux~WZH&1CR|mVatU>$ol@zy4HVc^ zQSDF;b{p};W2g@!Ka47UvBL5qp8Hd7)uK7sc(U}Le>w@;GXJ->dlv7NB1PNdEb>Y7 zgy=*2kzi@HsPt?WpSAD@aRt%r(vA`swRy+?-faR}hs{mLpozy$+1$MDx}uUG4t3^a zo!1e6-v$-#-?vI-+%~fZB^UA=rIBd^*6efin648lYdfo{UD9n$`1Njz71UTEBRtHf z%Omi$frVMaGsZ&bCZwMuR+&l#5rhr*2_oI;Mzx2l!^cSko1~;!WM#iE>RovX@yf$L z_hY0d7a`WLQZDPgbn+%L9vCNu5{$w&t%eA6E#?@_)w8puw9Nc;V<)q<6yc|~v|{yF z6~RN1nIGAn8AoZH!TSb_ZnA?jC#{P8Eg)83{A^_Q&UrF(q3b>3H{7?e@Hhn|;o(!B zG|5~u=?>aje+(6D6-4qmJEL+Z!;5jb)Y4dERC6T1w^H!n(bc^di1)Bd`eoY*lj58Z zx++yV*#uXcrTQ>mcGMym1uJbSM1Vv@MzmQgaXv5l+J_3L+}VWlqUzROu-#&wS--ts zGwwb1TsH;@&kw(nB1QLavyY{Q+~6Z7kPe>wNqBhrLwk|1S$T;aV!foRucvLQqw+_q zMUFU#lJ^6<_Vn9PebxTTxXtp0ZE`?i+&3sV<*wQCwQ(W=T}Ll;@uCNLE|8Ss<`$J^ zNiXSOi`{C8%Rv2D7thg2p?m@x82DUZbE#E~qCMuY-?s5fXI_elva-xV=U9b_b)NG- zZN;*9W%)-v8?*D!qpH75k;iz3ZFrCNXcDW4&*?B@UR-Lh^!VCs`|>^hP2g~Tb~_)? zy-?l*$8jxk^G<}1S4}f4-Wmah0_mHt3miq#Kh}Aq(BdO{FFG^ZgtM}B)JWS%@xcCo z%h2ZT2(+v75le zuTC{QUxU?+4w`BGpFcd_$?jCGO{}fOkX^MO)JhO?iRyRuF1dh5IYb>>KgMAVKo?o% zMsP|hpYf6;dC7>0H?C$if?-o{eb)c;^}RRG3pCQwa$5$IsbW`k7Xl!d1-%03 zv)0ML|Ij3#>@11ou?5*#S*?Ml4y3TprxSzH5)v>%-gI>j#e)3}6_v5vmrgtr31NuH z1f=wV!H$Tw&a|z&Svbg%6eaNO-`YCEe`?)d9Z5hIeiLYSAvjBy!!cAm)CJTbpN1}` zyxH@I?R}x(Y9hqoq5tl$lX@6iI3!mRO@==_UhK?ib~SiTPtNILzdSId8ebgwxt z=}~>xDe?3H1n}!VI8!-gk^)$5G4=IG%febZ$%@GwofUV=j zns6kV(MT8yYbLx;{bhqB+h>^ZtAJeOV+5>;$I6dVZa^YgmJ`pF5>Ue|pZ78`02(xd zj?=(70sfi!rDOkr&@Dm5dFsp&t0n$&Vo3o{?kc>hfP%lHEZY7U-(MH)vpf$SOG9fE zDCNsM{`ns&F%-HnI2K*@B5GEVJ%SU}2&lFY1h3lHu-R(Qpb&;44bw{BZx|BLm_)gI z@D3DG>G`r}m_;$q7R=RQ2{x%vEvfuY87#GLvP8q6PE!13-G>qo@}(GIaV7HclJreI zY?hjiR)Q%Jy15_G#eJB0sw5nY4gYEXQ%|#DqX$p%S|I6LrxDXDw~IX!6p3f9Vwu+wehbqEg+yr7+h<(y_U&6&QJ6XM>EO)4< zw1pE~=phu{%uH&_uf5p6&C(l>JS;F#QU(SBP@%rxK7MOXl?dQ&9Phmj>`Y4&e92=^ zuVUjO$sr{LlBtEJcuOL=e=^ES4EeqIMKqG#bo!LNBv(_XagpLEyp%%6>XU2s7$$3B7{KLN zlbGC&tAf@>9vOMR8ZzPh&F0q-jP6go+xHj^ZU$kKd3Y99yh<`Zl+2aSM~1u*bfD9| za(M`O+I~)hDlT4PZro6JfA7(Y6Gvm*mG%Wey$~n6N~4 z-YnxI_h}MEPl_TbBRu7p2rQdf#}Zpx@JMKIytLaqr~bRd09Lq0Y`ArGL1Z)CAc^!~ zO9v=|1Ww^>c#H_x@+J`_uApyDR>ve?p=|Z|Y`7guJ+bN8MCf@(tEt^L-kDX4d~){Y zT);Ub>1m?MMAS)f%pScAH8#9>aH&)!qoa6FVjD?t!WU^pTL^99_n2JsDb=kmazI@~ zkT}1ZdWvm74Uo!;v?H7`6~B;VNd0*=h&wS)XdQ`9pJY!D=h(3!u<__k z4FULLSNs{b;jd^Jql9U0fm)bS9H%K`HbPal*xgEEYRjW%^XY_EtnHO%+Ir@Lw=c)$ zVD$?#S&dq9Y}}O*g-wbxOz-X$}1_)wB@A7*WhhtD$u+)Z)OexkC9X zdjBX;0Fo44gcd1ZM%^i)ZhA*?p1iLnw%0_SPQw_f19=;U+X)?7YGhgF5$p8MUueqq z`d61{!rV>U{M)8IVT&W0#W>n_S1QCL|FA~PMVv^O`XA3moGoi8tRbguXZ zF>$r={bJ?%&QAFqKj(G%S%4`CGZ-`)-jik6TIN85 z#IlR;yeagZ*AvWuw1!``J*6(kIMbR!9p0H3g~%l*IiuflGwt~kf5ORiyH-?^FJ_j2 zv>E%?)T^jcI3ixPRLx;lC{MDA{qslto}9E4Ky%cNT_&X)A8M-oUaLr_tt&mU<8CH3 zo(r|2tqgXc+G+?p1vJvM{6u$;jiC!q(|!k({M&5)dt$ivq%JwJ_2a;25Xa>=;%UV5 z^In>LFe~wiwNiigO4pM|-X36B0a5%#`>F;taFZsY%D${&frd1IC0vpRo6qus(ax2G z-vmhAnz;7DzkVJP6$Y9qFIC?o>FJZ{4MFwu{P+KRB8Hrfw^n4S33Z0`h^5J%i!GU+qN{E(S`ozZ0n zu9>Ux9Gr@W{aKc#BC>6Hg)&Q7Wn=gxN^FlAlC1oIlL`}xA$WEBp~SJkz?FLAP>`R4 zKgSXe*He0S8XeaW6qyP>BfRwVZ5v8PDh4zv=F)n-74>wB*5SjUuDr{4TyL4e%!vER zCuVdBc26ecU(P;>M?Gji_1|-tcYk1xMsz-WXI0w3v0}QyJ2&q)F4jGUI`SV#z+()8 z$V7P++fPYzPLJIQyZh19sxQ^sJ)z;%!H(?3AqV~p;pvmKcqSiy>jC3oc)nj?yIbB`K`1!>n_wV zc1bT?LA97(WM?_d{w|EvD`V>zKi*aGa5&UqNv;Tb2@M_P!v}7=zm| zH6adM7(%gOnyWw0o6oSV;?XDsUotwkzi%me;`L^YY~y=99d;M)mE>PKW|<|VH`lqj zre}U6=y+pkON1bOnI*@7&{iIL(WFZP$Bjd#L1A=>XU9y4{qkFUd~MF_;-&RCU<-RN zjK46E3C|Z%IC?|pG*r=or}S3pdzsHF5sJX)>B1?boLFrva2lAJpN;PM$*bn7Ec~pTUBv81`DHRIqJD6QgrlW9yD#I zv+t%Qg(B0-bIv5SEz-A3B;`o#4B15v7Dg_#;m=54$z=LvCPc<5sl1^ar|kvNJ@ zUO`VYSmi@+qo2&o8cs7L;8gh_{)*8_u)51(D4a4|3i5Wf@LG z_`4q2+wWte2=j=+V(W~R{omQEP<)*Z71eQWSVi=I90ph)B1t@4^92rI-0|OT32Yk=u zZYg;7PeVZ(h17kubd{(D@`h4%;yWmxSH`lwU+sdUa8_i^B?|V?X(YdNM2R+sbk!CBQ0ck?L3oq8%{k?B;HO=0mR{Dja5<+Y6`U=TNQ=tRno0I#4VYBJ@T zz5~B&twwXuqnUgt)sBEFA~>IxY0f=?#UgIC8x;mu+6P`^)c&hePD09R-qp|YqRK55 zVU01RT9-_mB*y66`zXvXzi|R+5aR)E9D)q z8}H=Pj3RlDu;W+|_S@8j^Xj>T|;DPdVyB_r=fEP zIl@t)Kie9|*ZW`Ml$;5BI!}8RT(3ezJ*SP`>YnZ1hhtCr1?xkH6%vG!`KoltQDH+& z`{!2Rda}w#fGvHY-WC;-EC2_1PHt20(^WO@>;Pk`U9b(K3bt_ojEAWV!U>3r(=;+t z;>fh_k3xs!C4T<=>HV8O#8dbe*th{2dtVj(qZoN`R)-{McgM3|3vXh{$;e8(yI-@= zmO&U9ta5*%=mD!klJi~w+T=GLxY+dT?++)CGQH28C~J-dd+uP$lz?2R!VEh4{(=Xk zsj&rJ{~OW#pSb2JT|!VTH%dwtJm+K|Wsiy~@`e^}=Ro8xYy(Au0j|7O)WWQ0h7U2L z9FuO;(c6V4xn5esc~~S%DqcAzGHRlPH{5fHP<{zyrASW%ix?bj6s6@&p{oVzr709y z*1k#-^rF7+c(Be={o%P3V5tKUs)lCHc;;}xZ3FgN@wy~xD}21Zg{FMPSPdG$GlhS#Z9@=ba9{xo<`nxXZVR)K##;-J1~T%nP~iVYV!SpCA)-S#N$y5y9V zrVcyCbyEwEO~#&CyXTjB^-gfqCZ=S#UU9)igMUMM=oT*37$wgOpWXBU!|T?9Buc;~ zA~ddPsvrn0q?3Qb|kJ+RH4q378 zD!t}fs{9%0gA2{U5-TfW0BL0@fLWg2Ej=^qJyWy-KP$x&i=g+!IWFEg zTEGRrl4JgeXB0BcfPN2c_O?y6jijr=vhq=hKPv4L!c6|Bk6%UDvSPiK8z@ zsrv9MPhefQsou(FJIAvurjbanfu z*O2$mMULJjvQk$dw!S>e?h3rdqvkyA-eU5@b+R$D%F1UujPQeMX~dWwaZ(SY&_jI z4q=?x%A!By>(iYIA7yFj*Ymt7HXI^WUxGFX(lkWluU4Zq(Z}AXNmbTc#R)d2)iWKL zDqg{WBe9mTshY+q)O1)tE)H1bgWwssu`7b?SQT``-ec}6{rFX8`$yCYdZD}GQ>+E6 zEiCLmlI5W^cmtk*me{u|C4TxJeOM+?`)PSazEwN;P~z)B|9QV4W&R3vef^_gzLu*p zBmd(Dbz>~bmwpEOSGJyiIlShrRKu*%WI+#MrEKM&k zRM}td&P1g2&C>{aqE*eE>0O^fV$I~-NLHZS>O!R4c|x54f1AU6Xq0-;Tvr$E>w{Ll zc7TjD+uN>`FNY*ikB=Q;7_VKpNka8@LQZcvsIi^Tddztc^nQ#lcwtVj64g$0VsrH> zOKu`%yRs*;cSH{QpW1EQtVxTrvFWsDl+t|XIi}qN|ii5pE4mfWj#yHKX}baFLs)l z?T&ggyfX6SOY(4v_9 ziK)j?0v1N~B9F@t&O-=Ga*psxKb_2deTkR6|H%qioOT7GVW8DJoYSzdejT>)aL6g@ z_>zN25s>x!E2YiMw$j}1-zmTBi1$w!$>QJmx+8Mdm}&^8OV6W&gKb5A5DPeg{gZGF z2_Y7YJrDY)=jR;9;@DxVWH#?5Mo_6g`tRn(K8ImMHVni8C-nz@UMdq}eM=vRP+=jW zK0-mGLmIKJ?dLHS&b^d+=~ANJW`bP+JW(<-rUUDEtw<6~NtH5fx=lCFezyD?J;Tk zd|;x;U4TvTGF4D=B};r`ay3IBT=2Gog&=w%A>P(_KPTb8eZvIrpgxxtmM;l-+vN&7 z@0Isvr!S8TF^}xHfxSq~?b+!Zwk}(uc z`osIbGy#C*#Kc4i=N>3bgk0C5AS=|M7z6WOJ-u{B)6+JvX#wz()4VRL2r$ro{{CQ) zE=z;WHYQyB;v-9|2!skL6j7ciXsv0o@ig~<4fb&x`Fh5>uJ}cgOd|v2m$($TY_@gs~{f^tkq+n zl*tlsStTXP%~p+qEV_Uasl)dYq6vj)=67>lc8%8_2s&YD;Kyxz_PI+$P%Cuuvq}uWn7~xDB>I(kV5|a`BPH+SZ5Ol zsMS5d+^xV%GFZ8Z~F1e*EF!kM2m-FX{3)WN=`w+F{kShzo)d1qB5q<{plaq6|1defAhj8oQ75VV z3vurM5OtPORkqRACIta$5E1E=?hfhhRJyxCI;6Y18|jh`>28qjerahW&b`kV=lh2K z5JYgZH_x-~x#qkk-@YhG3*Dt}5LK;N`j^0BlB++|O#3ni?mrFOM0%E$2oWhQf#CId2;&- zui;qa$zx7z@)YUI$7K5c6jJ|#gGTpJ^@(ro*zfFn3`l2-|H&mHj*5%tix$h>`SBI~ z9@z;b3w%CJw29+&j_rMYl(T$4wzpaM^W^@4k*4}W4>3tJ42or0+Vc^(drzvKpnlbV zrM4?4&bdg{5=NK|TDodaba{u@k(K&=U6PnHR9z5$Z@EBf*buoxAx|;%83DD%bjX2?i?E|MINh^T*}58E*6ou`pi+x`4SnQ*(^SSr02BNOw80NYq5T(E>jSLvUED$C;H)au43qgF@xoR>b$_r(5`Ldub&M z%xr`*WZ`99=%Adwi3mgvB^3H7t@nmEk0|9iAFg*k^Fu-TK}m^zQN2W>|13K)640D1 zyo`E-Y!?6VgQ@W`bi-d3OWg623L{c+>d=IGp%$*zod>7K4)xgexxZgfe(bVveD}2? z!x0bt^B+E{-AB{Wl$-(v_23UIQU|jFPCjF0KhR-jr@Y_P1cxaZheI_(e{ueum%owc z6zu|NV2W)|hKGd?4#ol;14Z>|Ch>_2^QFpyG};2??D+j;)3S2f578@l z!Blw`Z)8zjZu8%8)>n9w2zqv;+=j(h_2RzIp6xa(iMd!KS{v2yESF@L3-*gn9`=MM zi>3-WHN^%@F@ivU-F^xxHB33d$zq)>fThBgvVqqp#YSP_ViMZu?ogflNBenS8!f$r z%2w-7YG4&Q%wB7MVbV@LELj{P1laO-IT`aoPt4st@|4%L-g7}0mm#x1&ivg`GWAWu zD3i-n?-x>kGUKMRA|6cB$1w^5snfh-57NqUdR30M|J7Txo(MdyeJ!JHXW##|(C9|E z=awrJj3+k$Z5Y6d_fu2MCJ1&I(f7*Nvc)6J&}ou5%#EVO-Tog#JJ4$a-bk3GcmNBs1$Yh1D4H;y_2LryZ0(!Nl5h|Xqj{r33# zt;7EC#@^Fp=0LArTPVfC6Q`<}VvH}y4LmS6J{`GmbUlgfbFj~@^2EK%;J|nbA8`ja zSbKE*A7l!s;5&6@x%6o~UzL+H;XcUm=8??MdpSc(1r-yigP89^$mq0~QbZ6?iIWVM z;wfY^cynTZCP){1?dL4O20KcbLt~2LaN(vV+|Il+J+Bj;9 zI{)PrhExDU9?3~stBi15bTDoe;k zjXTPPo$q>6WHH(7+&;5`XArrUNwR2W*O8kvuIcuUmxoPm=l2UNfxwIuIVSgiL)p@z zj>N;qD~%4zMUlcICGlC;lDG1$KLcDqfJontLyyF- zq6Rr5xWXVRSNb5~g3bD4eli(8^)4eV&BlP@i~@9PrBaeQ^iM%hAyhghL1h2K!};5@s&0Ar+83168D2Eshi|+Ned?)$M%b*gu(-?AdohD-m~Ta5XFI{o*S)~ei-0YXt%_JN1m@qeR-tdi|+^dE^KWX z==waEIO~)&HKjm;L1?cRXm&^!HejU9&L#wVE3IaGk~Y`V?W(r3Z7})?6u*|+ta!a# z<(QqXcRX#O`Q`$kGy=VGxq8&fu`w2C$hT5P)erYmERiSCWSAL$LQ5 zpwoa)+zHavFc|-}d)l(44II{^tra3&*iRW zeM=&OavRe74Ex1$$@wU#^r^$sqar9>nWOyoCez^VRZk6NC5_AbWtPo)@G5`y-P+a6 zFYjVy<_9`=k?lG4ScJbwR4Jr9=fXe6sp7o;8!Xhlf7jEDHI9;Rg00ZShR6t~w8ipr zr1uh)6tVB%Mjdj@g_xJZYq3B%3r3g(4_}n8D|!g6YY=&ut%LXb%qow8^J)@u zkEr;Hd4yo3X*&7W*R+a+FHNlG!6{zX1A}7oY#4{UviD~hh>IeJH!3o}H@c1{$$Ms*LDa%hhS}K9qxJ$ZrLI4* z^?!14k5XzEV<4qtGk6B2AU5ixtarze*7GG{kw?*aWWA|EfZGy&W{9Xlg_Te-e_<(j z`$b2Lf5YoiAe*l)VUmt7=z~l~9M@{2=lj=(YZ1OyXU^_LxS`epBf^9!yT8AeiIbSQ zP2WMI&Ebcad?3Knf0VW3r-te%5;~gpvp4v7(VkjXUS?5RUDS3*Tx(u~n3F^LTu|Hvs^N>fFJZZfv!HRZySuNPD@VH{|mppJpWJEU3S}ULin{6@vvq*fh zNhSwP_hU$o_+fFAIu6#(`YMOFy=hG~Lb0p;`OZhK20H}K_B+SVpJ^q@6C@Ytv)kfz zdp1-o@pJ+*GCtORvWkppt@=ogN%M#AnQk zGP_%G7=XPSv(p?%M$&V0BWrC#k{ybrU{X_015+zKLQ6YL5&ZU^r8CG=^-rjB*743* z!1uqhR}`r%lVxWJ7Ndlu7*!HM$Ei-c4lu6q2M6AmKYoR-LM?ts^iGAnq5XjJYc?My zRo(}ijFw~!4GoReYKunOLyJQFFJky#!!7^fi*Uy|>Rb~z*u?qy1ev1JW}R4Rp{bys zDg|DbJ1Wg5N6*G*FrUA0YjxhD`A$Yx3^cyi%WbcyFkWK_I-XPVOaCrQgUx}f+-mNg z6)s89u_x6!U&FY7Ed0LI>xU?hJZVBMsk)S8u%^zH-58e_Ntm}c-CKr2_3Hhnx>+bZ z0(|l;srO5_+5d%Tz!@HR`xb;&VmO{;QH3z+$RG%h;L2;Ow@Uz zFa==sQeQl_mDSXwd|#oWEAMZ+yb?CnFD3A;Xpi_DV_(*F<@ul4C>1Qt0A^POMhrK7&E z&E(r+qugd`p{qX*K2ne*#ddasBeke|mf=7AEQC&tFYock;P_Acb}-*kk9`jC!D6tP zU}oNBGIUQS_7{o;y&m;ucMKx~k}AnCG1*k77gHCD{|z!%^5VZO9?~Vm!z0cbMyI9q zOnAW`4gPyZrc1=rY~Cs~q!cTH$D^~hX5NX?>|7|QjHzR89(+W*p9nSI-`RWT$ zWahFqB^gO>Pq1=#`N?~o!M+Xo^=i%&>7d%aD8K^GT(~!mqjev8Aljk~pG?hY@Lzl<93w zXuA)5_u4{S&fksZydy-;Z%@+TjteG>?m9X!n`t$eV;nD3AG97<8G!NVd^7p{HXI1RFeFSGmkVHkHY<(HY;1kNr?XUJ01H-kkXt?w;Q#^eBZu|oLe~pB zWSf+}*xi*ta3U>&G}eQO59gvn3BVCA-3UhOK(YloPZ2DVpKLr@I#sl`jJ#jh zCL(sC9#$@Y@?-2Dhq+O8&H6kzX&VhD)CjcNN&By3-Eau#dPb|6U&;xpKK_cHwND3S>RCx)2ibpJneD?45)M&m;&97-4cl{lp|3XlMZXhTO1<8U#@;N1$ zj!3{u1l9|Hr6>;SSbnM^Ew~K2p&-COhQ3a(v`>f z`0pR2%La6s(0y$Ph2*9B!Tvg_+A9c>n*t~wr?K1gVhDZ4Ae|B{JPW`#0rHu0UY`y! zU6(ETx1;|4bp(z|H!yHPGE=w_AeR08;$hO)XY6JD-})WEPUbwHm_1yC2#z&a%(`7q zOIX<2QpQPcwlehg_CjXcRiA&SAc9^8(2kwgMT{LkwVeSW5%PSB5Iv%UFAsWJAY`1s zAnFc*t3!B5o%XAV9q>grfsGmr=F>n77RWgO z^)|bXEzI#7V2sWOv?CdY7URemX8_oNg@v{Atcrn*cCVh7T}s{m=dONv{S?$Lv-LbS z^$u%|t@g?`%r_I^#-bB@t+Rvo(k~Q7MN{9LQkkbSMD_Q-j(BRpdb+>^GWErrD$n(< zD(5e)x^=4NVhVJLe?NrbKX?(6unDH^{UiB<4p%x%EZJ;LVShT0VP?2jWHq`?7ex z(mSosdd15r-5--=uWps#6cR;gD&5Wsl+y&9Ms6K_dv4_wmZtwV`ij8`?Ruwf z>=An(Dx&reapS(Eo+d(#X}c#o8@rX`(UEqq7U45y*hODKjKl0W=k)4KU&QydD5JeJ z*6*mNmGmevC&#A=3u*#Jr|IM)k10nLnnPKe`(u$=gCze6i!S zC8Xisu#}r^Ij(BcYO>}3^hqULpCCOtj@vJO^Kqy+5k?1#O)Z(jgH4I|KSso4*!1F3 znydYGT7C<)-a4jwgg9}ysiBX1vS;3*xBg~)|744p*7({olBZSJ{d2P}g^)E25|hY+ z#5vBCnLR08KZ`U9`Zo|Ho|3}6>6x;BhhPCJ%b|sjHiZuw4yLJsIs%zcVWL`&0M=Gb zGkx%{eW8?-3F~~^SL;FgWO(!R@1Nccst`JjObwZ$)XlqJ!yHS0sgfS_jJprA zRt`_X;nVJA7U9|xGU*-*0n{FANssg0nu7W|3o?yLh-9+f-t-So^11n3tw}h0?ai0y z<*w_a?-`!0UM3Yjy_hb4d3mI&{yVfOoVtjThLK2#-WsjSqc6-Lq-m}ym5S-A)wQ;1 zwZMUnchB$Z;Yd3^PTvm`)uR>+BL_=s7dO7=KoC;xy+^dz_6p^qhNJy`Jc$d!?no^T zGr$9>0*mziM(*g8#4Mho07a(IV`*nO>%Chm~mlGW-ycGN!*`#mKyfmD|YT zm$We4{6@}fjEt`uhpL3jYF(Oe{RLaZF_ne2FP1kn18;jbScRDMe*FB5G)-1XS6AS_ zZqz~(imMSlgYO5{9=F+I{~Cz(zJ3xmMfq$=CK?pA6BkHvuq&JwjzK<)j(1(%Vo@Q^Zn5%NoekUAr)>{ptZhW)3ezIN>w~QS%EsacK)?AV# zU02{sGk$(dv9Pl+ep%%%oUuT|tFy`WJadm<;=_qUuPytUzDyO6K#??zKFf~Qen*ci z6!$K1+SF6td$kbZfsC7FX2=uo31*oHY5NyGM&hs~3ftRMw;C2g@G@3S-v;Xug?k3mrX9Xcf26n?~e6218Rl z6^L0%5pRz}Geyd1Br14AW5ZciL=CXJLf%xV%UIeYD-d`@fBa^*sklv?0DF33<(_!w z>>ZkO=S4)&{C(S!p}aNKHbqKrQR9c=h{_Q0L&{`Zz>ofdc ze9fdK5X`b2-Xwu)tLr<5KWQcP&VXI%eXVrXa;FPOMZtMTt1fr^pp;8VLodRH*T}=3 zj_g)cn2^=s)wL%fb3Rr&@BN@lgJOAOaq^45z*)zg?)s}g8u}mdURcV1!R+Gc2DWV? zE@Q=Jl4eQ;{k~c3vS#u-kvz!SV%bo|$| u1;nZz#iylX$8Jfjv|tuRjWKH1_%|z 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 P00000NkvXXu0mjfdQ3AM literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-6.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-6.png new file mode 100644 index 0000000000000000000000000000000000000000..db693894bb03ab746a6d226438d6303925aacb76 GIT binary patch literal 13710 zcmZX51yCGY5bfd+f?I&a-4k?!1$TFM*F_f(8X&k6+%-V(#TO5dKyU&JEEa+X2`-=a z-v7V8%+#&!={|jK&&;i>00j&HAc{5~%u_3u5 zq;gy`QMwv*lHHOokizqyo={F+^K~;?v9v2s9j~@hD2Edy{(Q8XMB3RwA*fi@eq#az!HZ{t2o59JNctcLq~;;8W(F_vrpl zhj8$sSr1k2QF>C;9XN{7tLfvhKaM`c847QLON2DP&7p;7oO6A;yYv_czBgos@Z{Ov z+NK=iL`p-A2@)pSIq!6!i=%2#H}ZC`u62s%uG_Jo5)%v54}X`{Yw@D)Z2T`V2ORNn zH{7&~bcn_|W76OIb49Lre;#Jwx$?<^#a$^Lo>XWnv8bmGLAVz8UaKsoSnKxs6{$JB zQ@iwU(IIR(4^G`qw4DfMDaZaBNvCJr=+_mCkRv|1YCNgJNL*79Ba}z%GvxM_;OPM6 z33t0J{q(m@==x5e@4dW)MQP#Xth!-M)Sd2{7n`kA(Frsyy15f9vu#c}HBQRzudU7X zRTp%k%*VeoRJ!nGWVjw&QO4vi2e=p3mA&Y2ryBKKx4Gatq+ayD`mlL4vvG7UMI{-0 z*!^?fv#%$Bi+x$}hj9&(v%8g(iT=LCP<;pd)FG1%E)TBnyzHeXW@UoV{i}=L1`Llj9>y0>*Jn1uWh$&)2{5C7C+jkwjatbcqBG z2}bYz$&LVL=2B^*aIOep5Mt$Z~&-9N%&8IV1?7!JsxJl^nL*WPH` zqHJ6J_ye=TSYImEfEvP3I_)fXqche@(Xh%pp{TrWL^{c3Hz;5A%qo=+UGWa)hJ!a^ z#XI7pHOAtJW(5L&A;Q6G>>LHU0aZI>JKMWW?&2hFGv&YSf|SxKSZ$4Ltp5Vp zo}KB5{9LoLRshGk$g-*wb<+WNw&mamZk0IcU(JrSjfF6okfgT;oLU^Te6||(wMk%6 zR^e#4{c(12(M&2{-R{cVJYaBJa17*0`m71n>TA8mRW`>djN90GR2}Hc3k7GXLM_-f zn)ugc0(tZ~g!`n?jk}tqdcuBuU3}cG5UbWAt%+VcD&?fg*V3|SbvNqbH#Qs8?VVS@ zkTDt?w$b~_kUXX*l37j94Neeui3;jmC{!EgD;B=(IZ=oU*kIOG(sxZA--t^ip{0el zE`V3OnP}KLa_Swb_8F{j1nLZbw@lavLzNb_jZO=5D#;^|_nF?O`tHi6xg9WS+rNK5 z+z3?ZiNY7tvLsE28y+|+%$+pnqpBR9&czhk8{BJP9&G=-iGQr6JFcfMH5ug`^jAUs zY(!Q)&A^Gr^gGY3HpH`h>?dKvk@ldTZage|3BsHQG?aC2^!hm4-{inr2DB01(~7Mb zDNEyyG#kYEJBqfE*L<6FYYV`HbcmbG%frX7TETT8>^}}V!X!aGI>LD@d5vPLj=$r7 zI-Pq`NZ1dIDOEK@%{KRqS>%H=U+l^~KCzZp>vnk7Pi*U9rkG$4?4{?&n@y8TK(Wmo zo9e7P;#U}5XRbDUov@h{Jb;+NR8B@YzH}Qp+rW|h)W-m#;AjEVA3 zpvD%=a3x*(nqyw2O3wWf@k5PtK#Zs`7zc{8Z2%M zKy?mBKJv*6RxLB1{uH{ySuL^@rY zC<;*3+pHbw#CrC+@K?4s3k6zhf+h;^PP~e-223+~cEC}3dc&0ivGKLhSGd?_=Ivau} z*4nrJ@NeKBpV95IIIimHQbyhwsql7f`iXYHCst@awmGfPo_;HaQ~S10partvCKa=n zv#jdJa=%>)SxWf1U>g*GU9-m|Y1%6LTh?>^6e#3*6G=RW)zx6l2Hjw)77h1)SNAhe z5k!0{*68o4_XD!k^t-o_{sN~*)9;%|RCMX_horebe}nuapm7^Pd*c57%|=1fEiU%E z{v!6mE4-bR@IAisj%-Kh>h7G zQBhwud;AafpZLEu82^v`SC9Os zOa2os|Iz^d(JBAZ{QtE7(L?Z9aB1Ox5$h2sk=AG!n9=S4%&QZ2=4YAoPw6xvKmzoS zyvYRo-)&r@W6CQ7@Nuab5oQ~`63|K<=<%rYK>q374Ba#XTAt_k&^u|TXz&yXINyC_ z{3q;TW4X^BNcw=(eyRG~?kVW$kql1dz8>Ndzy1a{j@nM@hW%ISWm0?lRo}+3-_zq| zF9FeneqD}{1EdNB=H-TV8$8GLtc499muk%0x7q1BOh(L{G{ z1Os*Aro)yq5f|O6g9dc)eC+lc(aqO;LMX=+WSGI6c|FUtaP1fE;o66_rnDE+gt!|8 zS|AT!kHy9BzY>@S#5%zZ?-}7v!(!$_+xjDP@Ig%b$6~PHdoPFsa6qgYd_eNvqkY(n z|G7>ZI-e8TV?NZP{{7IRA{EdIaCD!vj_(z9g zMT7shBk>$a0Y8hi|D5ObGC&7>j)a04fzMv@zYguQeTFbTFO_Ep;~)FXg~14aS`wjT zmi1wJnS~^Y8B-J*!%DyY`1Ax>KSuS=`y}S|>sak5kD|s-mQa}Lds@3lV`kwN9+Ley z>^yiKdwXhd^+`C2XaS@%VJi^-j&JupDu@8zC2V(Nz3}9MM;r7uQ#m+&YwD@^!5p9l z;D79cMh*SM^LU>%(E8vhetWrFdjALuYqy}ltwrE$nu%%tDWpDhd_2#XqQVT0z*9S; zah*}_=`-9Ix`t84P?`se)Cv`vwi!Ld?IQJ>LjHCYu(FEZd&eaOa1AzmtbalUhta^l zfAYK12~kPi!p8Q@Vtl+~2+n0xw|@0ksBbGyxmg=nctt~Jlg4W^C;! zv>^cxypD7=n7g2VSvQ8p@RFrBGV1na9zSTBx4gJe{X49VQ~A9O^Kr>+2LJV`J;$KI z=if{(&4=m-0=_jk3{<%l6HGf_8@MSsNiacXw4S?};nkZfkmSh&s3qoh1`6JMF@oRj zSg4{uYG_@N!2H*`Ua%y3n3`+hz<-%QOdF*?y=PN%)SHtfWkuXe?}8SsSnQ%!X!dWv zrB`<2E>HDKXkb1VXx#OK1*crK44|Dz$K};UIZb- zEmSjSZuhrMQy%@J;<8(j27NI9dfHxygEw4RCyGhZ1`-DGH}Je=b->mhEpqi`lcsrc zLKHVguYV9a{Kh>FKzCE!xnFR);T{y!Own_bVzk3Hj=wz?kXvapsCJAWqUlxzw=9P7eho+QH}4A(0#Wwoct(zdj^caI1PtV|t%dfY8dccd0j- z+f7Jk3{+3frpx{JC!ndtF)oY}gzlm$&BerRJCOC&IQ|Ta(Jg6vll{-pI z60J*T%YCHV+GIlO=5EXD%PlIXtvN3G2d8%}jA=8}Z){8nqxE7aNwP>vV}xIgBS%8L za2NG$(J)NtjC!$mU$1I|S(TPcB(^dFwH?0TPI6cEyT4>7AjTGc-IJkxv)tJ@kifV( zuaJAkb=7FUT@#bT8AVl+@6fc`#c*G%_YyuZk1ln*Dsj5gZo;2(vI{oWq9w@722#Y! z4>2asqu1kY0JovpBc@jmf zcJrR!$)V!Bj5v3C39ACppNtBVEhO~~-hM!1m(2R?AEce(L`*kPxZU-QveJjCnvwa5Ia zFjphc`eAg?BgJOb90t;)f~TVuWF90w6!Y#%aG3&Vg&!4eSZ8|uYNj`F;r^f-c!LSV z*^SIZCLm4?bxZ7u-$9Gy4@4GjPJ{1F?w(uf(e3%~iHn%OHD_q-5bjQ1^5D7mr+w(^EKqbUEyBq%Gt|1;<8yN zuDKd30F$NS4ji^M+`pHM z#Nft};Fv3BZNCJ{MnFxBT!iUonaH4XhhH$+q@7oc1rmHLUs>|EHE(-N`01`?#bsC; zq@*^JLsL2z>m9$_sZ!@$ek|3achE^-L&V4lH92s}5>3Fk9F`Gl)1S|%1bZEW#9zSA zd(TWaaM?M|-$u{6vwnlmbT>HoVS~mud|OcaVN?XEzlbxK+dd`Fc}I?*)l?^{$vR2; z?l=*FzrLU|hxJu}-tg_7iGVLN1@|qGQaD2o9Ewq27A%D^41K}=r5juW5ewuATlv*Y zW~}R#ge772qiM<4%ka$hg%At(Rbh_k)FvLR&L`l*t3L&Ubq16dGePeoF!z+o3H~ba zm`)zUjK~wuuM67HzV_OFNOLqP$tEmjaWLTM5|eKnH(lc}QG;=1hveF1*yv;vlz-|p zL8tC^2B&2nY0g8CQuip1{Ey@*awy1h7=Us$g+>(g0^`)_0dH|1fC8H5I%5p+>0lt`l-Fkk-8cv6k3bjIFZ zWFQux5weH`QdDvE_EGSeJT~(HVH2U|5@xzsz#NEJZJCs1`BJ7_nS-rCAiSxyLrmHeS&=(g9w8Ld8da=df~1Z-QJk^(lG$em?f8}-u{2D7?e9>76_u8L&aI{8w137PTKsgJ`4Y5g zUB}V%_t$i#AHT~=lok#T*#NN^18>KS6|7WA0(I5-J4*SKNGu*lXafx@Vq)AK7e(r zwIp$9u4V}HH4VTG_xx_+>*$hLzuecm8@JYA3)ma_J^w%eP=uP=H?ESzt76qr^sxMf zvtz}rZ_2()4AG{30~wmgMzBin)*kIs$Dt-HB7x^D7kH~Z=DLPk0o(*ZkNkmmAb2c| zTTBQyDVwFqQybkrOSg$9$l={k#2i|*b7=19cT5mw*}4*bX}M5R5=I|oHN^JA0Htcl`b*bjBpjN{{PQpSY3$Iq25f=e9E`Y=@uN&8 zo`J`B3^?C-QYGYYD!0ozkb~c?tX*QfHKBL+v7GbJ_A@p^RuEcJ`)F)j?t4AUG@ZaP~c*GWz%K-Yd4UV&rIH! z<(~AA6RR5a8(oOEV;iivK;R)adPN@1k?hPTlagwPJ(`esxYMb5cW*L(P5>^kT)%CX z_YI}m!~(}gkPNXH(oB4rJ~c%W_G!CXa>oT|X4Y{e&G#!+8-FNtKnROsyu_)Z78b7<*`8qw0P zw2md#uiTNiDWs`O6v&f)_rMc#8#VsSLJ8sEFo=8#p|O5RT?8a1#=tV34D#*GaN@(? z+DdXt)oZo_Gz1Ca80>ji@LkOKFeo-ud!1n-ffsgpEZ#v6d$5W69zX5bhdpd?lFnBF z+iwUa$x)Hw;Kj|3C)g@EemOe4SY*M@>ZGtnlJow&>rEWEx9Jyj1NwUHz>3rF^Xku< zvn?dSnT4vn#t}|E$z{VLUQ|!YI&W)Lm6!4xw|+7TPSz2YpOW{5k@hAY9K`b5tsM9@0t)X97SBUx9F;MDm|-T1i))Ad{4oS>_g7!lUJ zT`RTIB?lhdw;H#b-+suuOZKBxrsp}6ns2NYBZl1|4uF)QVpwS}vV1>xl8hheyRNBX zUn~$GDXaAA?hVf3&;<_9eQY+X{f$-o*T%urneWh+p#IPJJrnM!Pk1n7^Gz&WwxhV7Qc!H-(bc+xMPBM!CGo`mTm)m zg$oT&^W111huFabbZ!$S4~y1(NXHCF)KRw#_LCcDfo;Qm?){5T+)OKsYwwlrPcZz5 zxz*~_Lc2al}?+TxbXcgiq&}cE`xQa;QsT+1U$w5^dhsQMrybShHB^f+YHw4?)l`*N^v-Z ztzC97taYQ+^b94pj8sLzq1qtXV!~_hR&BoU+k_AL6>8W~CmL+^GV$&0!*Sm)g`h>2y~=1It0k6E z?35%#3QU(Y%tVd8_Zbd!SC*Ww%`D^+e0|Dh8}-eT1{Jl@UH8p~-=ruV2hvXkmKY}_ zWfxI8r!L)qU_<@hiV_s^+ID{UcY%*mdwf%537VInktz(LD6C9Y8V=jwRIGF5 zElOq1TPXim(2sqaN42L!RIRxJMayn06(9@M{7}dl!&D)Aa4|HlMBw>$d`7F})vW>l zgb*0n8CKVYdkuCf`TUOPZS8HE4{&&4t}CZN7JvsMneTL`_&6cz_5!kS6}Fjet~FyJ zGp*CZr<`k{E1-|FNthU>PHX7ey$GL?`k7fku>h~yQ80-IqF=^ z-|pnHFZnF8swGENB*nQXHKJFaF3@YwTx)1f@b2gQ5)S&vZTS+aZ=Nzpf?~-v9n37| zCQ$h}-Oad$VG>mk#cqRjC5nAe@b&fJJY)gfo^d|+vq)4GZ@g&IzFL6aI?+C5t@tUi zLfBW_l`@uNohgZPWQn|{1tz1b>LkGBolY-}RfIRm=&;#6uOj*)4SVQ3@0`=wNz&Z0 zg5`F?Ywri46q9PMepMK`=`fQ*fj1TE-!}w$&fbk*RBZQf~J3@x0Z2-arEpA;ufRZG|G2Q3^)IlkFau(%gx8f+S?u25oVRY{;eS)YvSF^pxfVoKsFNFg6d zVTU6>J<+TYX=Ub9w^MS@x~;5c;Q8uiF2sNu9fFNATq;)VWH<=L_89SNi0uz>QZtbT zPQN2%iFS9r{y-s#Y#LYbhr4rHX|ALrwUbo4$V(+`*-Puvgf8E%n4Q!seypq^Z^tnA zR|lr}o{G|Lf{v%%h*gVtstAhZA|f}UvIa&KC)Fl0If&1>y!^7rUib{^*h7b;#8kqB z_BRpGv|Umb-qlQr?h(!tBq4Bu+Bkf^Ep9_PFZGD}jnye^f~3>J(kPv*e{ASe)UO!j zf{eDODIaj()Bt&3R2*dVQ87ON`3+DTd{M@R^Hip@A8QoN8kVTx{ZSZ$;2n}Yu`o=4 zi^&S)mx64fWAT!_^{a%a7;8cV2=`<52P5lr2&`*do(+`qWUOFU@xW>TUN8Iz?O?L#rT2+9^I^+pwJ zQ{$>z=pnPkr92>!GtUF5$Ehca2pmlj!c40weFr(2w*3e#J*AEIERcl|_ChFbGl$n&iT-IXg@MV00D~!|2rgtyWz{SoQ==abE@+zY=9~!y+p~za}!)4rr6OE z(UF|Dk&kp%Xv6yI!nb)>9=4QVKm-N1)-K`<1^mUx%Usx5Bq$39s>=DI9RN~Xlp>PO zii*Poekqyz0E}Zc5}bIL<+nC) z69de}d}g5Em60orB$7y}$_xqPeQ1CbBmXZ{;7P}5)C_zKubL$ax1yDb_NWQGQ^t&h z8yQB1KP2`+dB{bBbh3-oNG}xSMY2h97`sqan3izpqt%8|1>rEd$?qa}HQ67IeP$BH z^Q6-{)v~DPEiGvPwNUJc594i7A_mkfv#uwN^o$B2J|2$p$R;3z>*G-C7^u!)Nfvh; zdRkBx|1u4uN$*lk2h*$<8GwrDatPkLS@B2^b;m-cw5n&f^3^qz8N=_}n+bP{1)1 zh}OY*&1sQqNM%%7%p;QD5X&DaK?J}DtZ{46l;lPm>?59|IKqpEgSW0_k@*e81@v|{ z!@>lo5Mx?}VNR1HjB6VJl>rhKYy@qv4IL(DUIxRc2FHzTSr~EPB5{$_WkYD1cs+CWsWtKs+p%b+yOgCf6=-R_2(RYC+?bv#99ob>jKC5spc;aZ^Tg2C0r?ps=#|S+9YqiHB@?J*tN!Sm6 zG9B7gJpv3Hb;pfD8w!)+)8@fx3C};UGAjOYpU*gXUhBf9cqXQD+*!Tf5fpcBg~~IS%+B?KS)Au;XcfoNTPq0EGlU4d1evC zyQie9G2VPz{J1FqBYQa%lqh2=$*j!aE6eN#hmEf!F5Wk1k`LB%?*v_Zo%uCYlM3)1 ztL$z4cbpPzZFAJE$zD+X*{5_dkFik5_~{WQn*OiI8>s?0e-$eEkR@0I&jGWA~ORia#YT-s7&_Nc^>s>@0Q?M%b(b5cE~ z+&y7?I^>RAs=CaG^o`7@@%H)4RMg+;sfyCBExvb7{B~(t1Mc-y3W5-XgH#m)4e;WMh{1eYs&4 zTi-l`@7Uzf`%;8_J^zjTz7T4Nn_%FLZHjhfF#T}|lbO$f_}&=zoQaCxr-<$SoFp-# z5087dLD0YK8}SNFVeZ6*%G)Au-xH(?gvon3@~CvE=QW6sOoqFie%9?47k-#WWh3kJ zW1CrT&rGenaL(nqW#N>$<#lG;APGt4|02Njs5h_DXA<>vPkc_kc}0eNtbf4CEnZA! zZr2|A<4}lrNWrE-`m@$d!+_v+G&Z$>T5M zF6AilQHqR;Lo#;5Z6WN+Pfj=6-gC=ON*qwEr(ZjYmddXa+!Z_ zZLu+*XOAUKMKmZRB&tpSqzq;iHkQ^5mrnE0wQszT4dSML_ibQ$Qx}QiKvl`e#a^Il zB7H$iu0QrS#13kK|O^^h|G*vQUi(I2>`XJh{oxOwz*_lnBEDytqB8-$|4R7bStq5aep$D^3{BXRM08dOYrB4;2 z#lmKqA!Rw6YG4`OoaWR|KA+JO$lg~(q1bkXVX>!>2HiTX)GZMdGrQ*7j!2Xd#$7-t zk$14HXn^m+XjIXc-)uO9Z97!slE|G(kN@fOos8;mU5y!7#OJU>rZ2+5M+MQo^5w4! zzI%Eyp9)XiDs#*icjMCB^*bIUl%4Ln{?f%rdj4ghe5BZoF-`skHaE!DAG4RMgJ|It znKFP9aetiQt?bcvHBm_bYj(DFk8B7~)TF|@%O5QX)<+G-ZNfRfnv{i!bm;2qQ|9SX zypfKdH(;u>R*wSE%Y#D`(|4n7zhgE6e z4_@itpZTf2UbvF(VkEYE+s)cv9uOWepIHj?&pdINunpA>@2YcCkIS*^P3=lwBOj)3 zTDbmRr5(1}iu>q=XK^GvkzO0;?rdE$!Zh4^N9VJw9$C9eFpF6xd@`if_{y>Qi}oc; zrS>$HoWH=s+w#1TedIJ|YiR&@M!OkR$c9Rtwy1EyZKyJZFH+l_GJsL)vI39PT0*hi zQXqKXCdGobI7Lqjpg$u#x;(~!eT`(26qBhAuAQC%t+PX>&iLc4v(Kijzqal|++Po3<1>;LYn zk+({2fKfNkFb*B%wurzU26*PJ?QWxB+64CX__vM%>r~1I#C!(kAQj0t~gQ9>BtL%xlXpek$45OG;U1GP%O4 z3Ct$!(N#PoW6SGjNdT9 zWZ$HYel8P2B*Xh1_mJU)8ny`syqU>@2q%ngMXg~x0_hUB7Dl#m3g) z%eUhXX=Ufh`|R6jdyG=~S;S2-A}QJxXy=W&wY4czs6X=*DEm|%>*@2#0$-eGvS})E zACrC4q|j}tqs$H?q2z(tGUCI}V4mCu|_0^#%3Ecr=2=!Q*5x3wK>VIr1EI=(NJW{(`k?sZlpsZww=X$zw)a@z_t zjZyV-;wcEKcO`(0T;N?E$rXG6`&%~pG*ZNcmMT*P-a#AMDjF1+T)iE$NBk=?>9iAi zOaj%pckf;g^PDm+vJn6N#c6iTJ6o+zySthB>wS)wvhO; z?t0%lb72i?;UFWx2~_osl77AtaF=?wiunWj_X_sGZ>~^*gqV!4(xfAuH47C>eY0OL zqEQ{xllirqgf^E)YK2J`^jVkrlSYRS=jeBTUJk06mlf)d)|RZpedhw(Be^Wp94zlVBFjqvI^;Cfs5RZC6JxF^;~R)1@^F^il8mR+9v1{&DY$X9xJALdphu}#PcfWF|) zX5Vp+db4jC+k6uy=Lbb;8$Bk(#hoef-1*8B{`Hl>X*3L=Ps=0C`n{>f0RNrbC0}Nv z^f><6G84D2%O&7vroNesAP*@OQ=PNw@%ATHr`O#X8L?GO+LPAC@8&4&H+Dx7I;Y;^ zwq}kXf!@KBOT0FTIV#-cFxGu$q(edmjy$9o)Hgk{zvtKPeyb?Ei^;S?jja-Iz3L4^FSspC<|FuBrj$UPa=IOP zNBgHQL2;0Y=UrdbWDo4dz&y`?62d{yBpe%PaaNnXHVdj*urrh{nohyiUqC2oAn&)p2N^9?9p;(V_=gp zqTcX(hUpZSFSf&q7V5F!up1Jx{F?zy)I@?rdN45qFpL2l4<-&PeYJrJ9LAI<0Lg)n z??G44kR@lIJ^465g$0+{I zopfLbN?s($Yfk1^dhYimEsOvvf?Q8{we;>%h-sFxIqrS@!&`S$w?3E{5LaHN!&s}G z%y1(Cwn_pH2WEFM8TOE|l|L#9sv|D3^Y9_cS|Xa-^MueYlzJ%$-%>utKJ^99y*JWv z?AEQ3&vip+7y0U#_8<;)z3`ovg?Vj3fjK+4&=&{ZBU(;|piWdbFQj?f)W8qx5q;`K zT0DLQz4NzNV*MMMcXo3yo1(7R;4U6?eRg(#1`R|UJN$Nqi9H_O-0blA_ypXXpHF0M zZ4^DTiK+fo<=RY4dVh0!&$7RNasT(62pK+DAJ$d7&|@@2HzXF~UsA7O-izt}{6h*a)a>pj=+MmWRh<|VkES2<)Kv#F5y8pjU%q#3rFO6CkyqLzoDZVhPZT=e zyoJ%-wtrl?+e$r9c4Mz4-e#P194>UeecK@Z6y>3~=9U1J)6`!+IOX`K6zG*9ykEm; zb|dhV(oPwb*vb6RdGeJ~_JKxrjrAieMd;tr$$@x|{WFdTKxcCQ49!5)#NHB2;MQ{t zAM^}HmS1CaO8U3LBar*!G94KHGnXE`oltU#37q(kXPE))jW3J1zD_9d#RSq|XrLx` zYtB)JSqm%vFV61gMg4EA)SMN0bR~_rRr>#!dyTso6X;)BC59{?{an2B@8rH)&u(s( z#y>=U&ue;C@t@hZ6X?MzENuU?rRNiQj&ZI(bN>0a_kZTuW0ZY(b1TBn(x)bZllATS Q2P=T0teQ-{ltuXe04}y`?*IS* literal 0 HcmV?d00001 diff --git a/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-7.png b/docs/blog/2020-04-13-upgrading-to-jamstack-with-agility/post-image-7.png new file mode 100644 index 0000000000000000000000000000000000000000..029071e04469cda4359b1fe7ed7e7f5c30def124 GIT binary patch literal 20830 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ŜH=l9t=H7z{{b&o?=D`BPU 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 bF*^GB)!*!{&ibRX%y6(siSkdW`?>!C`4>IC literal 0 HcmV?d00001 diff --git a/docs/contributing/organize-a-gatsby-event.md b/docs/contributing/organize-a-gatsby-event.md index 6ac7030caa45f..849f66ffc22f5 100644 --- a/docs/contributing/organize-a-gatsby-event.md +++ b/docs/contributing/organize-a-gatsby-event.md @@ -2,4 +2,4 @@ title: Organize a Gatsby Event --- -**IMPORATANT NOTE ON COMMUNITY EVENTS: Promotion and support of Gatsby community events is currently suspended due to COVID-19. Stay tuned for updates on when our community events program will resume.** +**IMPORTANT NOTE ON COMMUNITY EVENTS: Promotion and support of Gatsby community events is currently suspended due to COVID-19. Stay tuned for updates on when our community events program will resume.** diff --git a/docs/contributing/translation/sync-guide.md b/docs/contributing/translation/sync-guide.md index 4e652cc8113a9..ff2a4ae44a1b9 100644 --- a/docs/contributing/translation/sync-guide.md +++ b/docs/contributing/translation/sync-guide.md @@ -2,7 +2,11 @@ title: Keeping Translations Up-to-date --- -Periodically, gatsbybot will update your translation repo to be up-to-date with the current English repo. If there is an update to a page that is already translated, gatsbybot will create a pull request listing the conflicts between translation and the new English content. Resolving these conflicts and merging these pull requests is essential to keeping your translation repo up-to-date. +Every Friday at 6:00 PM PST, gatsbybot will run a sync script on every translation repo to bring them up-to-date with the current English repo. If there is an update to a page that is already translated, gatsbybot will create a pull request listing the conflicts between the translation and the new English content. Resolving these conflicts and merging these pull requests is essential to keeping your translation repo up-to-date. + +## Gatsbybot sync behavior + +If there are existing sync pull requests marked by the `sync` label, gatsbybot will skip the repository until the next time it runs. Because of this, it is important to make sure that you merge sync and conflict pull requests promptly, so that stale translations don't build up. ## Resolving sync pull requests diff --git a/docs/docs/add-custom-webpack-config.md b/docs/docs/add-custom-webpack-config.md index 60a40ee01668d..00c75eebc2a47 100644 --- a/docs/docs/add-custom-webpack-config.md +++ b/docs/docs/add-custom-webpack-config.md @@ -75,6 +75,19 @@ exports.onCreateWebpackConfig = ({ stage, actions }) => { You can always find more information on _resolve_ and other options in the official [Webpack docs](https://webpack.js.org/concepts/). +### Importing non-webpack tools using `yarn` + +Note that using absolute imports only applies to webpack resolutions and will not work for other tools, e.g. eslint or typescript. +But if you are using yarn, then the best practice is to set up your imports in package.json as shown below: + +```js +{ + "dependencies": { + "hooks": "link:./src/hooks", + } +} +``` + ### Modifying the Babel loader You need this if you want to do things like transpile parts of `node_modules`. diff --git a/docs/docs/building-an-e-commerce-site.md b/docs/docs/building-an-e-commerce-site.md index 5eeecc6381b00..bf4bc0d56b7b1 100644 --- a/docs/docs/building-an-e-commerce-site.md +++ b/docs/docs/building-an-e-commerce-site.md @@ -4,7 +4,7 @@ title: Building an E-commerce Site The speed and performance of sites built with Gatsby make it a great tool for building e-commerce sites. There are existing plugins for connecting services like [Shopify](/packages/gatsby-source-shopify/) and [Snipcart](/packages/gatsby-plugin-snipcart/) to Gatsby, and this section contains reference guides to help get things setup. -To see examples of e-commerce sites built with Gatsby, check out the [showcase](/showcase/?filters%5B0%5D=eCommerce). +To see examples of e-commerce sites built with Gatsby, check out the [showcase](/showcase/?filters%5B0%5D=E-commerce). diff --git a/docs/docs/creating-a-source-plugin.md b/docs/docs/creating-a-source-plugin.md index 0af8ac02d0e47..fa905bcb9711b 100644 --- a/docs/docs/creating-a-source-plugin.md +++ b/docs/docs/creating-a-source-plugin.md @@ -4,11 +4,11 @@ title: Creating a Source Plugin Source plugins are essentially out of the box integrations between Gatsby and various third-party systems. -These systems can be CMSs like Contentful or WordPress, other cloud services like Lever and Strava, or your local filesystem -- literally anything that has an API. Currently, Gatsby has [over 300 source plugins](/plugins/?=gatsby-source). +These systems can be CMSs like Contentful or WordPress, other cloud services like Lever and Strava, or your local filesystem -- literally anything that has an API. Currently, Gatsby has [over 400 source plugins](/plugins/?=gatsby-source). Once a source plugin brings data into Gatsby's system, it can be transformed further with **transformer plugins**. For step-by-step examples of how to create source and transformer plugins, check out the Gatsby [tutorials section](/tutorial/plugin-and-theme-tutorials/). -## What do source plugins do? +## Overview of a source plugin At a high-level, a source plugin: @@ -18,26 +18,59 @@ At a high-level, a source plugin: - Links nodes & creates relationships between them. - Lets Gatsby know when nodes are finished sourcing so it can move on to processing them. -## What does the code look like? +A source plugin is a regular npm package. It has a `package.json` file, with optional dependencies, as well as a [`gatsby-node.js`](/docs/api-files-gatsby-node) file where you implement Gatsby's [Node APIs](/docs/node-apis/). Read more about [files Gatsby looks for in a plugin](/docs/files-gatsby-looks-for-in-a-plugin/) or [creating a generic plugin](/docs/creating-a-generic-plugin). -A source plugin is a regular NPM package. It has a `package.json` file with optional -dependencies as well as a [`gatsby-node.js`](/docs/api-files-gatsby-node) file where you implement Gatsby's [Node -APIs](/docs/node-apis/). Read more about [Files Gatsby Looks for in a Plugin](/docs/files-gatsby-looks-for-in-a-plugin/). +## Implementing features for source plugins -Gatsby's minimum supported Node.js version is Node 8 and as it's common to want to use more modern Node.js and JavaScript syntax, many plugins write code in a -source directory and compile the code. All plugins maintained in the Gatsby repo -follow this pattern. +Key features that are often built into source plugins are covered in this guide to help explain Gatsby specific helpers and APIs, independent of the source the data is coming from. -Your `gatsby-node.js` should look something like: +> You can see examples of all the features implemented in this guide (sourcing data, caching, live data synchronization, and remote image optimization) **in the working example repository** for [creating source plugins](https://github.com/gatsbyjs/gatsby/tree/master/examples/creating-source-plugins) which contains a local server you can run to test with an example source plugin. -```javascript:title=gatsby-node.js +### Sourcing data and creating nodes + +All source plugins must fetch data and create nodes from that data. By fetching data and creating nodes at [build time](/docs/glossary#build), Gatsby can make the data available as static assets instead of having to fetch it at [runtime](/docs/glossary#runtime). This happens in the [`sourceNodes` lifecycle](/docs/node-apis/#sourceNodes) with the [`createNode` action](/docs/actions/#createNode). + +This example—taken from [the `sourceNodes` API docs](/docs/node-apis/#sourceNodes)—shows how to create a single node from hardcoded data: + +```javascript:title=source-plugin/gatsby-node.js +exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => { + const { createNode } = actions + + // Data can come from anywhere, but for now create it manually + const myData = { + key: 123, + foo: `The foo field of my node`, + bar: `Baz`, + } + + const nodeContent = JSON.stringify(myData) + + const nodeMeta = { + id: createNodeId(`my-data-${myData.key}`), + parent: null, + children: [], + internal: { + type: `MyNodeType`, + mediaType: `text/html`, + content: nodeContent, + contentDigest: createContentDigest(myData), + }, + } + + const node = Object.assign({}, myData, nodeMeta) + createNode(node) +} +``` + +Source plugins follow the same pattern, the only difference is that data comes from other sources. Plugins can leverage Node.js built-in functions like `http.get`, libraries like `node-fetch` or `axios`, or even fully-featured GraphQL clients to fetch data. With data being returned from a remote location, the plugin code can loop through and create nodes programmatically: + +```javascript:title=source-plugin/gatsby-node.js exports.sourceNodes = async ({ actions }) => { const { createNode } = actions - // Create nodes here, generally by downloading data - // from a remote API. + // Download data from a remote API. const data = await fetch(REMOTE_API) - // Process data into nodes. + // Process data and create nodes.using a custom processDatum function data.forEach(datum => createNode(processDatum(datum))) // You're done, return. @@ -45,120 +78,409 @@ exports.sourceNodes = async ({ actions }) => { } ``` -Peruse the [`sourceNodes`](/docs/node-apis/#sourceNodes) and -[`createNode`](/docs/actions/#createNode) docs for detailed -documentation on implementing those APIs. +The [`createNode`](/docs/actions/#createNode) function is a Gatsby specific action. `createNode` is used to create the nodes that Gatsby tracks and makes available for querying with GraphQL. -### Transforming data received from remote sources +_Note: **Be aware of asynchronous operations!** Because fetching data is an asynchronous task, you need to make sure you `await` data coming from remote sources, return a Promise, or return the callback (the 3rd parameter available in lifecycle APIs) from `sourceNodes`. If you don't, Gatsby will continue on in the build process, before nodes are finished being created. This can result in your nodes not ending up in the generated schema at compilation time, or the process could hang while waiting for an indication that it's finished. You can read more in the [Debugging Asynchronous Lifecycle APIs guide](/docs/debugging-async-lifecycles/)._ -Each node created by the filesystem source plugin includes the -raw content of the file and its _media type_. +### Caching data between runs -[A **media type**](https://en.wikipedia.org/wiki/Media_type) (also **MIME type** -and **content type**) is an official way to identify the format of -files/content that is transmitted on the internet, e.g. over HTTP or through -email. You might be familiar with other media types such as -`application/javascript`, `application/pdf`, `audio/mpeg`, `text/html`, -`text/plain`, `image/jpeg`, etc. +Some operations like fetching data from an endpoint can be performance heavy or time-intensive. In order to improve the experience of developing with your source plugin, you can leverage the Gatsby cache to store data between runs of `gatsby develop` or `gatsby build`. -Each source plugin is responsible for setting the media type for the nodes they -create. This way, source and transformer plugins can work together easily. +You access the `cache` in Gatsby Node APIs and use the `set` and `get` functions to store and retrieve data as JSON objects. -This is not a required field -- if it's not provided, Gatsby will [infer](/docs/glossary#inference) the type from data that is sent -- but it's the way for source plugins to indicate to -transformers that there is "raw" data that can still be further processed. It -also allows plugins to remain small and focused. Source plugins don't have to have -opinions on how to transform their data: they can set the `mediaType` and -push that responsibility to transformer plugins, instead. +```javascript:title=source-plugin/gatsby-node.js +exports.onPostBuild = async ({ cache }) => { + await cache.set(`key`, `value`) + const cachedValue = await cache.get(`key`) + console.log(cachedValue) // logs `value` +} +``` -For example, it's common for services to allow you to add content in -Markdown format. If you pull that Markdown into Gatsby and create a new node, what -then? How would a user of your source plugin convert that Markdown into HTML -they can use in their site? You would create a -node for the Markdown content and set its `mediaType` as `text/markdown` and the -various Gatsby Markdown transformer plugins would see your node and transform it -into HTML. +The above snippet shows a contrived example for the `cache`, but it can be used in more sophisticated cases to reduce the time it takes to run your plugin. For example, by caching a timestamp, you can use it to fetch solely the data that has been updated since the last time data was fetched from the source: -This loose coupling between the data source and the transformer plugins allow Gatsby site builders to assemble complex data transformation pipelines with -little work on their (and your (the source plugin author)) part. +```javascript:title=source-plugin/gatsby-node.js +exports.sourceNodes = async ({ cache }) => { + // get the last timestamp from the cache + const lastFetched = await cache.get(`timestamp`) -## Getting helper functions + // pull data from some remote source using cached data as an option in the request + const data = await fetch( + `https://remotedatasource.com/posts?lastUpdated=${lastFetched}` + ) + // ... +} -[`gatsby-node-helpers`](https://github.com/angeloashmore/gatsby-node-helpers), -a community-made NPM package, can help when writing source plugins. This -package provides a set of helper functions to generate Node objects with the -required fields. This includes automatically generating fields like node IDs -and the `contentDigest` MD5 hash, keeping your code focused on data gathering, -not boilerplate. +exports.onPostBuild = async ({ cache }) => { + // set a timestamp at the end of the build + await cache.set(`timestamp`, Date.now()) +} +``` -## Gotcha: don't forget to return! +> In addition to the cache, plugins can save metadata to the [internal Redux store](/docs/data-storage-redux/) with `setPluginStatus`. -After your plugin is finished sourcing nodes, it should either return a Promise or use the callback (3rd parameter) to report back to Gatsby when `sourceNodes` is fully executed. If a Promise or callback isn't returned, Gatsby will continue on in the build process, before nodes are finished being created. Without the necessary return statement your nodes might not end up in the generated schema at compilation time, or the process will hang while waiting for an indication that it's finished. +This can reduce the time it takes repeated data fetching operations to run if you are pulling in large amounts of data for your plugin. Existing plugins like [`gatsby-source-contentful`](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-source-contentful/src/gatsby-node.js) generate a token that is sent with each request to only return new data. -## Advanced +You can read more about the cache API, other types of plugins that leverage the cache, and example open source plugins that use the cache in the [build caching guide](/docs/build-caching). ### Adding relationships between nodes Gatsby source plugins not only create nodes, they also create relationships between nodes that are exposed to GraphQL queries. -There are two ways of adding node relationships in Gatsby: (1) transformations (parent-child) or (2) foreign-key based. - -#### Option 1: transformation relationships +There are two types of node relationships in Gatsby: (1) foreign-key based and (2) transformations (parent-child). -An example of a transformation relationship is the `gatsby-transformer-remark` plugin, which transforms a parent `File` node's markdown string into a `MarkdownRemark` node. The Remark transformer plugin adds its newly created child node as a child of the parent node using the action [`createParentChildLink`](/docs/actions/#createParentChildLink). Transformation relationships are used when a new node is _completely_ derived from a single parent node. E.g. the markdown node is derived from the parent `File` node and wouldn't ever exist if the parent `File` node hadn't been created. +#### Option 1: foreign-key relationships -Because all children nodes are derived from their parent, when a parent node is deleted or changed, Gatsby deletes all of the child nodes (and their child nodes, and so on) with the expectation that they'll be recreated again by transformer plugins. This is done to ensure there are no nodes left over that were derived from older versions of data but shouldn't exist any longer. +An example of a foreign-key relationship would be a `Post` type (like a blog post) that has an `Author`. -_Creating the transformation relationship_ +In this relationship, each object is a distinct entity that exists whether or not the other does. They could each be queried individually. -In order to create a parent/child relationship, when calling `createNode` for the child node, the new node object that is passed in should have a `parent` key with the value set to the parent node's `id`. After this, call the `createParentChildLink` function exported inside `actions`. - -_Examples_ +```graphql +post { + id + title +} +author { + id + name +} +``` -[Here's the above example](https://github.com/gatsbyjs/gatsby/blob/72077527b4acd3f2109ed5a2fcb780cddefee35a/packages/gatsby-transformer-remark/src/on-node-create.js#L39-L67) from the `gatsby-transformer-remark` source plugin. +Each type has independent schemas and field(s) on that reference the other entity -- in this case the `Post` would have an `Author`, and the `Author` might have `Post`s. The API of a service that allows complex object modelling, for example a CMS, will often allow users to add relationships between entities and expose them through the API. This same relationship can be represented by your schema. + +```graphql +post { + id + title + // highlight-start + author { + id + name + } + // highlight-end +} +author { + id + name + // highlight-start + posts { + id + title + } + // highlight-end +} +``` -[Here's another example](https://github.com/gatsbyjs/gatsby/blob/1fb19f9ad16618acdac7eda33d295d8ceba7f393/packages/gatsby-transformer-sharp/src/on-node-create.js#L3-L25) from the `gatsby-transformer-sharp` source plugin. +When an object node is deleted, Gatsby _does not_ delete any referenced entities. When using foreign-key references, it's a source plugin's responsibility to clean up any dangling entity references. -#### Option 2: foreign-key relationships +##### Creating the relationship -An example of a foreign-key relationship would be a Post that has an Author. +Suppose you want to create a relationship between `Post`s and `Author`s in order to query the `author` field on a post: + +```graphql +query { + post { + id + // highlight-start + author { + id + name + } + // highlight-end + } +} +``` -In this relationship, each object is a distinct entity that exists whether or not the other does, with independent schemas, and field(s) on each entity that reference the other entity -- in this case the Post would have an Author, and the Author might have Posts. The API of a service that allows complex object modelling, for example a CMS, will often allow users to add relationships between entities and expose them through the API. +For Gatsby to automatically infer a relationship, you need to create a field called `author___NODE` on the Post object to hold the relationship to Authors before you create the node. The value of this field should be the node ID of the Author. -When an object node is deleted, Gatsby _does not_ delete any referenced entities. When using foreign-key references, it's a source plugin's responsibility to clean up any dangling entity references. +```javascript:title=source-plugin/gatsby-node.js +exports.sourceNodes = ({ actions, createContentDigest }) => { + const { createNode } = actions + createNode({ + // Data for the Post node + author___NODE: ``, // highlight-line + // Required fields + id: `a-node-id`, + parent: null + children: [], + internal: { + type: `post`, + contentDigest: createContentDigest(fieldData), + } + }) +} +``` -##### Creating the relationship +For a stricter GraphQL schema, you can specify the exact field and value to link nodes using schema customization APIs. -Suppose you want to create a relationship between Posts and Authors, and you want to call the field `author`. +```javascript:title=source-plugin/gatsby-node.js +exports.sourceNodes = ({ actions, createContentDigest }) => { + const { createNode } = actions + createNode({ + // Data for the Post node + // highlight-start + author: { + name: `Jay Gatsby`, + }, + // highlight-end + // Required fields + id: `a-node-id`, + parent: null + children: [], + internal: { + type: `post`, + contentDigest: createContentDigest(fieldData), + } + }) +} -Before you pass the Post object and Author object into `createNode` and create the respective nodes, you need to create a field called `author___NODE` on the Post object to hold the relationship to Authors. The value of this field should be the node ID of the Author. +exports.createSchemaCustomization = ({ actions }) => { + const { createTypes } = actions + createTypes(` + type Post implements Node { + id: ID! + # create a relationship between Post and the File nodes for optimized images + author: Author @link(from: "author.name" by: "name") // highlight-line + # ... other fields + }`) +} +``` ##### Creating the reverse relationship -It's often convenient for querying to add to the schema backwards references. For example, you might want to query the Author of a Post but you might also want to query all the posts an author has written. +It's often convenient for querying to add to the schema backwards references. For example, you might want to query the author of a post, but you might also want to query all the posts an author has written. -If you want to call this field on `Author` `posts`, you would create a field called `posts___NODE` to hold the relationship to Posts. The value of this field should be an array of Post IDs. +If you want to call a field to access the author on the `Post` nodes using the inference method, you would create a field called `posts___NODE` to hold the relationship to posts. The value of this field should be an array of `Post` IDs. Here's an example from the [WordPress source plugin](https://github.com/gatsbyjs/gatsby/blob/1fb19f9ad16618acdac7eda33d295d8ceba7f393/packages/gatsby-source-wordpress/src/normalize.js#L178-L189). +With schema customization, you would add the `@link` directive to your Author type. The `@link` directive will look for an ID on the `post` field of the Author nodes, which can be added when the Author nodes are created. + +```javascript:title=source-plugin/gatsby-node.js +exports.createSchemaCustomization = ({ actions }) => { + const { createTypes } = actions + createTypes(` + type Post implements Node { + id: ID! + # create a relationship between Post and the File nodes for optimized images + author: Author @link(from: "author.name" by: "name") // highlight-line + # ... other fields + } + + type Author implements Node { + name: String! + post: Post @link // highlight-line + }`) +} +``` + +You can read more about connecting foreign key fields with schema customization in the guide on [customizing the GraphQL schema](/docs/schema-customization/#foreign-key-fields). + +#### Option 2: transformation relationships + +When a node is _completely_ derived from another node you'll want to use a transformation relationship. An example that is common in source plugins is for transforming File nodes from remote sources, e.g. images. You can read about this use case in the section below on [sourcing images from remote locations](/docs/creating-a-source-plugin/#sourcing-images-from-remote-locations). + +You can find more information about transformation relationships in the [creating a transformer plugin guide](/docs/creating-a-transformer-plugin/#creating-the-transformer-relationship). + #### Union types -When creating fields linking to an array of nodes, if the array of IDs are all of the same type, the relationship field that is created will be of this type. If the linked nodes are of different types; the field will turn into a union type of all types that are linked. See the [GraphQL documentation on how to query union types](https://graphql.org/learn/schema/#union-types). +For either type of relationship you can link a field to an array of nodes. If the array of IDs all correspond to nodes of the same type, the relationship field that is created will be of this type. If the linked nodes are of different types the field will turn into a union type of all types that are linked. See the [GraphQL documentation on how to query union types](https://graphql.org/learn/schema/#union-types). + +### Working with data received from remote sources + +#### Setting media and MIME types + +Each node created by the filesystem source plugin includes the raw content of the file and its _media type_. + +[A **media type**](https://en.wikipedia.org/wiki/Media_type) (also **MIME type** and **content type**) is an official way to identify the format of files/content that are transmitted via the internet, e.g. over HTTP or through email. You might be familiar with other media types such as `application/javascript`, `audio/mpeg`, `text/html`, etc. + +Each source plugin is responsible for setting the media type for the nodes it creates. This way, source and transformer plugins can work together easily. + +This is not a required field -- if it's not provided, Gatsby will [infer](/docs/glossary#inference) the type from data that is sent -- but it's how source plugins indicate to transformers that there is "raw" data the transformer can further process. + +It also allows plugins to remain small and focused. Source plugins don't have to have opinions on how to transform their data: they can set the `mediaType` and push that responsibility to transformer plugins instead. + +For example, it's common for services to allow you to add content in Markdown format. If you pull that Markdown into Gatsby and create a new node, what then? How would a user of your source plugin convert that Markdown into HTML they can use in their site? You would create a node for the Markdown content and set its `mediaType` as `text/markdown` and the various Gatsby Markdown transformer plugins would see your node and transform it into HTML. -#### Further specification +This loose coupling between the data source and the transformer plugins allow Gatsby site builders to assemble complex data transformation pipelines with little work on their (and your (the source plugin author)) part. -See -[_Node Link_](/docs/api-specification/) in the API Specification concepts -section for more info. +#### Sourcing and optimizing images from remote locations + +A common use case for source plugins is pulling images from a remote location and optimizing them for use with [Gatsby Image](/packages/gatsby-image/). An API may return a URL for an image on a CDN, which could be further optimized by Gatsby at build time. + +This can be achieved by the following steps: + +1. Install `gatsby-source-filesystem` as a dependency in your source plugin: + +``` +npm install gatsby-source-filesystem +``` + +2. Create File nodes using the `createRemoteFileNode` function exported by `gatsby-source-filesystem`: + +```javascript:title=source-plugin/gatsby-node.js +const { createRemoteFileNode } = require(`gatsby-source-filesystem`) + +exports.onCreateNode = async ({ + actions: { createNode }, + getCache, + createNodeId, + node, +}) => { + // because onCreateNode is called for all nodes, verify that you are only running this code on nodes created by your plugin + if (node.internal.type === `your-source-node-type`) { + // create a FileNode in Gatsby that gatsby-transformer-sharp will create optimized images for + const fileNode = await createRemoteFileNode({ + // the url of the remote image to generate a node for + url: node.imgUrl, + getCache, + createNode, + createNodeId, + parentNodeId: node.id, + }) + } +} +``` + +3. Add the ID of the new File node to your source plugin's node. + +```javascript:title=source-plugin/gatsby-node.js +const { createRemoteFileNode } = require(`gatsby-source-filesystem`) + +exports.onCreateNode = async ({ + actions: { createNode }, + getCache, + createNodeId, + node, +}) => { + // because onCreateNode is called for all nodes, verify that you are only running this code on nodes created by your plugin + if (node.internal.type === `your-source-node-type`) { + // create a FileNode in Gatsby that gatsby-transformer-sharp will create optimized images for + const fileNode = await createRemoteFileNode({ + // the url of the remote image to generate a node for + url: node.imgUrl, + getCache, + createNode, + createNodeId, + parentNodeId: node.id, + }) + + // highlight-start + if (fileNode) { + // with schemaCustomization: add a field `remoteImage` to your source plugin's node from the File node + node.remoteImage = fileNode.id + + // OR with inference: link your source plugin's node to the File node without schemaCustomization like this, but creates a less sturdy schema + node.remoteImage___NODE = fileNode.id + } + // highlight-end + } +} +``` + +Attaching `fileNode.id` to `remoteImage___NODE` will rely on Gatsby's [inference](/docs/glossary/#inference) of the GraphQL schema to create a new field `remoteImage` as a relationship between the nodes. This is done automatically. For a sturdier schema, you can relate them using [`schemaCustomization` APIs](/docs/node-apis/#createSchemaCustomization) by adding the `fileNode.id` to a field that you reference when you `createTypes`: + +```javascript:title=source-plugin/gatsby-node.js +exports.createSchemaCustomization = ({ actions }) => { + const { createTypes } = actions + createTypes(` + type YourSourceType implements Node { + id: ID! + # create a relationship between YourSourceType and the File nodes for optimized images + remoteImage: File @link // highlight-line + }`) +} +``` + +4. Verify that `gatsby-plugin-sharp` and `gatsby-transformer-sharp` are included in the site that is using the plugin: + +```javascript:title=gatsby-config.js +module.exports = { + plugins: [ + // loads the source-plugin + `your-source-plugin`, + // required to generate optimized images + `gatsby-plugin-sharp`, + `gatsby-transformer-sharp`, + ], +} +``` + +Then, the sharp plugins will automatically transform the File nodes created by `createRemoteFileNode` in `your-source-plugin` (which have supported image extensions like .jpg or .png). You can then query for the `remoteImage` field on your source type: + +```graphql +query { + yourSourceType { + id + remoteImage { + childImageSharp { + # fluid or fixed fields for optimzed images + } + } + } +} +``` ### Improve plugin developer experience by enabling faster sync -One tip to improve the development experience of using a plugin is to reduce the time it takes to sync between Gatsby and the data source. There are two approaches for doing this: +One challenge when developing locally is that a developer might make modifications in a remote data source, like a CMS, and then want to see how it looks in the local environment. Typically they will have to restart the `gatsby develop` server to see changes. In order to improve the development experience of using a plugin, you can reduce the time it takes to sync between Gatsby and the data source by enabling faster synchronization of data changes. There are two approaches for doing this: + +- **Proactively fetch updates**. You can avoid having to restart the `gatsby develop` server by proactively fetching updates from the remote server. For example, [gatsby-source-sanity](https://github.com/sanity-io/gatsby-source-sanity) listens to changes to Sanity content when `watchMode` is enabled and pulls them into the Gatsby develop server. The [example source plugin repository](https://github.com/gatsbyjs/gatsby/tree/master/examples/creating-source-plugins) uses GraphQL subscriptions to listen for changes and update data. +- **Add event-based sync**. Some data sources keep event logs and are able to return a list of objects modified since a given time. If you're building a source plugin, you can store the last time you fetched data using the [cache](/docs/creating-a-source-plugin/#caching-data-between-runs) or [`setPluginStatus`](/docs/actions/#setPluginStatus) and then only sync down nodes that have been modified since that time. [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful) is an example of a source plugin that does this. + +If possible, the proactive listener approach creates the best experience if existing APIs in the data source can support it (or you have access to build support into the data source). + +The code to support this behavior looks like this: + +```javascript:title=source-plugin/gatsby-node.js +exports.sourceNodes = async ({ actions }, pluginOptions) => { + const { createNode, touchNode, deleteNode } = actions + + // highlight-start + // touch nodes to ensure they aren't garbage collected + getNodesByType(`YourSourceType`).forEach(node => touchNode({ nodeId: node.id })) + + // ensure a plugin is in a preview mode and/or supports listening + if (pluginOptions.preview) { + const subscription = await subscription(SUBSCRIPTION_TO_WEBSOCKET) + subscription.subscribe(({ data: newData }) => { + newData.forEach(newDatum => { + switch (newDatum.status) { + case "deleted": + deleteNode({ + node: getNode(createNodeId(`YourSourceType-${newDatum.uuid}`)), + }) + break + case "created": + case "updated": + default: + // created and updated can be handled by the same code path + // the post's id is presumed to stay constant (or can be inferred) + createNode(processDatum(newDatum)) + break + ) + } + }) + } + // highlight-end + + const data = await client.query(QUERY_TO_API) + + // Process data and create nodes.using a custom processDatum function + data.forEach(datum => createNode(processDatum(datum))) + + // You're done, return. + return +} +``` + +_Note: This is pseudo code to illustrate the logic and concept of how these plugins function, you can see an example in the [creating source plugins](https://github.com/gatsbyjs/gatsby/tree/master/examples/creating-source-plugins) repository._ + +Because the code in `sourceNodes` is reinvoked when changes in the data source occur, a few steps need to be taken to ensure that Gatsby is tracking the existing nodes as well as the new data. A first step is ensuring that the existing nodes created are not garbage collected which is done by "touching" the nodes with the [`touchNode` action](/docs/actions/#touchNode). -- **Add event-based sync**. Some data sources keep event logs and are able to return a list of objects modified since a given time. If you're building a source plugin, you can store - the last time you fetched data using - [`setPluginStatus`](/docs/actions/#setPluginStatus) and then only sync down nodes that have been modified since that time. [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful) is an example of a source plugin that does this. -- **Proactively fetch updates**. One challenge when developing locally is that a developer might make modifications in a remote data source, like a CMS, and then want to see how it looks in the local environment. Typically they will have to restart the `gatsby develop` server to see changes. This can be avoided if your source plugin knows to proactively fetch updates from the remote server. For example, [gatsby-source-sanity](https://github.com/sanity-io/gatsby-source-sanity), listens to changes to Sanity content when `watchMode` is enabled and pulls them into the Gatsby develop server. +Then the new data needs to be pulled in via a live update like a websocket (in the example above with a subscription). The new data needs to have some information attached that dictates whether the data was created, updated, or deleted; that way, when it is processed, a new node can be created/updated (with `createNode`) or deleted (with `deleteNode`). In the example above that information is coming from `newDatum.status`. ## Additional resources -- Tutorial: [Creating a Pixabay Image Source Plugin](/tutorial/pixabay-source-plugin-tutorial/) +- Working example repository on [creating source plugins](https://github.com/gatsbyjs/gatsby/tree/master/examples/creating-source-plugins) with the features in this guide implemented +- Tutorial on [Creating a Pixabay Image Source Plugin](/tutorial/pixabay-source-plugin-tutorial/) +- [`gatsby-node-helpers`](https://github.com/angeloashmore/gatsby-node-helpers), a community-made npm package with helper functions to generate Node objects with required fields like IDs and the `contentDigest` MD5 hash. diff --git a/docs/docs/creating-a-transformer-plugin.md b/docs/docs/creating-a-transformer-plugin.md index 5ec01d2a7945a..19358dc4989eb 100644 --- a/docs/docs/creating-a-transformer-plugin.md +++ b/docs/docs/creating-a-transformer-plugin.md @@ -102,6 +102,8 @@ Now you have a `File` node to work with: Now, transform the newly created `File` nodes by hooking into the `onCreateNode` API in `gatsby-node.js`. +#### Convert yaml into JSON for storage in Gatsby nodes + If you're following along in an example project, install the following packages: ```shell @@ -137,41 +139,67 @@ File content: Parsed YAML content: -```javascript -;[ +```json +[ { - id: "Jane Doe", - bio: "Developer based in Somewhere, USA", + "id": "Jane Doe", + "bio": "Developer based in Somewhere, USA" }, { - id: "John Smith", - bio: "Developer based in Maintown, USA", - }, + "id": "John Smith", + "bio": "Developer based in Maintown, USA" + } ] ``` Now you'll write a helper function to transform the parsed YAML content into new Gatsby nodes: -```javascript +```javascript:title=gatsby-node.js function transformObject(obj, id, type) { const yamlNode = { ...obj, id, children: [], - parent: node.id, + parent: null, internal: { contentDigest: createContentDigest(obj), type, }, } createNode(yamlNode) - createParentChildLink({ parent: node, child: yamlNode }) } ``` Above, you create a `yamlNode` object with the shape expected by the [`createNode` action](/docs/actions/#createNode). -You then create a link between the parent node (file) and the child node (yaml content). +#### Creating the transformer relationship + +You then need to create a link between the parent node (file) and the child node (yaml content) using the `createParentChildLink` function after adding the parent node's id to the `yamlNode`: + +```javascript:title=gatsby-node.js +function transformObject(obj, id, type) { + const yamlNode = { + ...obj, + id, + children: [], + parent: node.id, // highlight-line + internal: { + contentDigest: createContentDigest(obj), + type, + }, + } + createNode(yamlNode) + createParentChildLink({ parent: node, child: yamlNode }) // highlight-line +} +``` + +Another example of a transformation relationship is the `gatsby-source-filesystem` plugin used with the `gatsby-transformer-remark` plugin. This combination transforms a parent `File` node's markdown string into a `MarkdownRemark` node. The remark transformer plugin adds its newly created child node as a child of the parent node using the action [`createParentChildLink`](/docs/actions/#createParentChildLink). Transformation relationships like this are used when a new node is _completely_ derived from a single parent node. E.g. the markdown node is derived from the parent `File` node and would not exist if the parent `File` node hadn't been created. + +Because all children nodes are derived from their parent, when a parent node is deleted or changed, Gatsby deletes all of the child nodes (and their child nodes, and so on). Gatsby does so with the expectation that they'll be recreated again by transformer plugins. This is done to ensure there are no nodes left over that were derived from older versions of data but should no longer exist. + +_For examples of other plugins creating transformation relationships, you can see the [`gatsby-transformer-remark` plugin](https://github.com/gatsbyjs/gatsby/blob/72077527b4acd3f2109ed5a2fcb780cddefee35a/packages/gatsby-transformer-remark/src/on-node-create.js#L39-L67) (from the above example) or the [`gatsby-transformer-sharp` plugin](https://github.com/gatsbyjs/gatsby/blob/1fb19f9ad16618acdac7eda33d295d8ceba7f393/packages/gatsby-transformer-sharp/src/on-node-create.js#L3-L25)._ + +#### Create new nodes from the derived data In your updated `gatsby-node.js`, you'll then iterate through the parsed YAML content, using the helper function to transform each into a new node: @@ -227,6 +255,8 @@ async function onCreateNode({ exports.onCreateNode = onCreateNode ``` +#### Query for the transformed data + Now you can query for your new nodes containing our transformed YAML data: ```graphql diff --git a/docs/docs/deploying-to-firebase.md b/docs/docs/deploying-to-firebase.md index 2fb8a440705ab..d0d159489f34a 100644 --- a/docs/docs/deploying-to-firebase.md +++ b/docs/docs/deploying-to-firebase.md @@ -47,61 +47,61 @@ In this guide, you will learn how to deploy your Gatsby site to Firebase Hosting 1. Update the `firebase.json` with the following cache settings -```json -{ - "hosting": { - "public": "public", - "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], - "headers": [ - { - "source": "**/*", - "headers": [ - { - "key": "cache-control", - "value": "cache-control: public, max-age=0, must-revalidate" - } - ] - }, - { - "source": "static/**", - "headers": [ - { - "key": "cache-control", - "value": "public, max-age=31536000, immutable" - } - ] - }, - { - "source": "**/*.@(css|js)", - "headers": [ - { - "key": "cache-control", - "value": "public, max-age=31536000, immutable" - } - ] - }, - { - "source": "sw.js", - "headers": [ - { - "key": "cache-control", - "value": "cache-control: public, max-age=0, must-revalidate" - } - ] - }, - { - "source": "page-data/**", - "headers": [ - { - "key": "cache-control", - "value": "cache-control: public, max-age=0, must-revalidate" - } - ] - } - ] - } -} -``` + ```json + { + "hosting": { + "public": "public", + "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], + "headers": [ + { + "source": "**/*", + "headers": [ + { + "key": "cache-control", + "value": "cache-control: public, max-age=0, must-revalidate" + } + ] + }, + { + "source": "static/**", + "headers": [ + { + "key": "cache-control", + "value": "public, max-age=31536000, immutable" + } + ] + }, + { + "source": "**/*.@(css|js)", + "headers": [ + { + "key": "cache-control", + "value": "public, max-age=31536000, immutable" + } + ] + }, + { + "source": "sw.js", + "headers": [ + { + "key": "cache-control", + "value": "cache-control: public, max-age=0, must-revalidate" + } + ] + }, + { + "source": "page-data/**", + "headers": [ + { + "key": "cache-control", + "value": "cache-control: public, max-age=0, must-revalidate" + } + ] + } + ] + } + } + ``` 1. Prepare your site for deployment by running `gatsby build`. This generates a publishable version of your site in the `public` folder. diff --git a/docs/docs/glossary.md b/docs/docs/glossary.md index 52b1fc0849c10..d2dbb5c97a0ae 100644 --- a/docs/docs/glossary.md +++ b/docs/docs/glossary.md @@ -220,9 +220,9 @@ A way of writing HTML content with plain text, using special characters to denot ## N -### NPM +### [npm](/docs/glossary/npm) -[Node](#node) [Package](#package) Manager. Allows you to install and update other packages that your project depends on. [Gatsby](#gatsby) and [React](#react) are examples of your project's dependencies. See also: [Yarn](#yarn). +[Node](#node) [package](#package) manager. Allows you to install and update other packages that your project depends on. [Gatsby](#gatsby) and [React](#react) are examples of your project's dependencies. See also: [Yarn](#yarn). ### Node diff --git a/docs/docs/glossary/npm.md b/docs/docs/glossary/npm.md new file mode 100644 index 0000000000000..f6caff679440f --- /dev/null +++ b/docs/docs/glossary/npm.md @@ -0,0 +1,59 @@ +--- +title: npm or Node package manager +disableTableOfContents: true +--- + +Learn what _npm_ is, how to use it, and how it fits in to the Gatsby ecosystem. + +## What is npm? + + + npm +, or Node package manager, is the default package manager for the [Node.js](/docs/glossary/node) JavaScript runtime. It lets you install and update libraries and frameworks (dependencies) for Node-based projects, and interact with the npm Registry. You'll use npm to install and upgrade Gatsby and its plugins. + +npm is a [command line](/docs/glossary#command-line) tool. You'll need Terminal (Mac, Linux) or Command Prompt (Windows) in order to run its commands. To use one of npm's features, type `npm ` . For example, `npm help` displays a list of available features, including `install`, `uninstall`, `update`, and `search`. + +npm is installed alongside Node during the default [installation process](/tutorial/part-zero/#install-nodejs-for-your-appropriate-operating-system). You don't need to take any additional steps to add it to your environment. + +### Using npm to install Gatsby + +You'll need to install Gatsby globally to use Gatsby CLI commands such as `gatsby new`. To do so, use `npm install` with the `--global` or `-g` flag. + +```shell +npm install -g gatsby-cli +``` + +Once the installation completes, you can run `gatsby new my-project` to create a new Gatsby project. + +### Using npx to install Gatsby + +> **Note:** `npx` requires npm version 5.2 or later. If you've installed the latest versions of Node and npm, you should also have npx. Otherwise, you should upgrade Node and/or npm. + +You can also use [npx](https://www.npmjs.com/package/npx) to install Gatsby. npx ships with npm. It allows you to install a package and run a command in one step. For example, instead of running `npm install -g gatsby-cli` then `gatsby new my-project`, you could use the following command. + +```shell +npx gatsby new my-project +``` + +This will download and install the latest version of Gatsby, then create a new Gatsby project in the `my-project` folder. Choosing this method will not make the Gatsby CLI globally available, however. If you install Gatsby using npx, you'll need to use `npx gatsby` or `npm run` to execute Gatsby commands, e.g.: `npx gatsby develop` or `npm run develop`. + +### Using npm to install Gatsby plugins + +Gatsby has a robust collection of [plugins](/plugins/) that add functionality or data sourcing to your Gatsby sites. Adding a plugin as a project dependency uses the same process as installing Gatsby itself. Use `npm install `. To add the [gatsby-source-filesystem](/packages/gatsby-source-filesystem), plugin, for example, you'd use the following command. + +```shell +npm install gatsby-source-filesystem +``` + +> **Note:** Use `npm install` to add plugins, even if you installed Gatsby using npx. + +> **Note:** You'll still need to update `gatsby-config.js` to add the plugin's functionality to your site. + +This will update the dependencies list of `package.json` and `package-lock.json`. Commit both files to your project's repository. Doing so makes it easy to keep your Gatsby project consistent across team members and computers. When another team member clones your repository, they can use `npm install` to install the dependencies included in `package-lock.json`. + +### Learn more about npm + +- [npm](https://www.npmjs.com/) official website +- [Node.js](https://nodejs.org/en/) official website +- [An introduction to the npm package manager](https://nodejs.dev/an-introduction-to-the-npm-package-manager) from Nodejs.dev +- [Set Up Your Development Environment](/tutorial/part-zero/) from the Gatsby docs diff --git a/docs/docs/mdx/programmatically-creating-pages.md b/docs/docs/mdx/programmatically-creating-pages.md index c84402cf24500..0393573b580e9 100644 --- a/docs/docs/mdx/programmatically-creating-pages.md +++ b/docs/docs/mdx/programmatically-creating-pages.md @@ -274,13 +274,17 @@ component should look like: ```jsx:title=src/components/posts-page-layout.js import React from "react" import { graphql } from "gatsby" +import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" +import { Link } from "gatsby" export default function PageTemplate({ data: { mdx } }) { return (

    ) } diff --git a/docs/docs/security-in-gatsby.md b/docs/docs/security-in-gatsby.md index 2a82f6c793b45..bcb751a70e50d 100644 --- a/docs/docs/security-in-gatsby.md +++ b/docs/docs/security-in-gatsby.md @@ -10,7 +10,7 @@ Cross-Site Scripting is a type of attack that injects a script or an unexpected JSX elements automatically escape HTML tags by design. See the following example: -```js +```jsx // highlight-next-line const username = `` @@ -23,7 +23,7 @@ On the other hand, fields in your application may need to render inner HTML tags In order to render those HTML tags you need to use an HTML parser (e.g. [html-react-parser](https://github.com/remarkablemark/html-react-parser)) or the `dangerouslySetInnerHTML` prop, like so: -```js +```jsx const CommentRenderer = comment => ( // highlight-next-line

    @@ -51,15 +51,20 @@ For example, assume that the comments in your blog are sent in a form similar to A malicious website could inspect your site and copy this snippet to theirs. If the user is logged in, the associated cookies are sent with the form and the server cannot distinguish the origin of it. Even worse, the form could be sent when the page loads with information you don't control: -```js +```html // highlight-next-line - -

    - // highlight-next-line - - -
    + +
    + // highlight-next-line + + +
    + ``` ### How can you prevent cross-site request forgery? @@ -76,7 +81,7 @@ Actions that do not simply read data should be handled in a POST request. In the If you want to protect a page your server will provide an encrypted, hard to guess **token**. That token is tied to a user's session and must be included in every POST request. See the following example: -```js +```html
    // highlight-next-line @@ -121,18 +126,18 @@ Similar to npm, you can use the `yarn audit` command. It is available starting w Gatsby allows you to [fetch data from various APIs](/docs/content-and-data/) and those APIs often require a key to access them. These keys should be stored in your build environment using [Environment Variables](/docs/environment-variables/). See the following example for fetching data from GitHub with an Authorization Header: ```js - { - resolve: "gatsby-source-graphql", - options: { - typeName: "GitHub", - fieldName: "github", - url: "https://api.github.com/graphql", - headers: { - // highlight-next-line - Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, - }, - } - } +{ + resolve: "gatsby-source-graphql", + options: { + typeName: "GitHub", + fieldName: "github", + url: "https://api.github.com/graphql", + headers: { + // highlight-next-line + Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, + }, + } +} ``` ### Storing keys in client-side @@ -150,11 +155,11 @@ currently there is a [compatibility issue](https://github.com/gatsbyjs/gatsby/is ## Other Resources -- [Security for Modern Web Frameworks](https://www.gatsbyjs.org/blog/2019-04-06-security-for-modern-web-frameworks/) -- [Docs ReactJS: DOM Elements](https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml) +- [Security for Modern Web Frameworks](/blog/2019-04-06-security-for-modern-web-frameworks/) +- [Docs React: DOM Elements](https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml) - [OWASP XSS filter evasion cheatsheet](https://owasp.org/www-community/xss-filter-evasion-cheatsheet) - [OWASP CSRF prevention cheat sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#samesite-cookie-attribute) -- [Warn for javascript: URLs in DOM sinks #15047](https://github.com/facebook/react/pull/15047) +- [Warn for JavaScript: URLs in DOM sinks #15047](https://github.com/facebook/react/pull/15047) - [How to prevent XSS attacks when using dangerouslySetInnerHTML in React](https://medium.com/@Jam3/how-to-prevent-xss-attacks-when-using-dangerouslysetinnerhtml-in-react-f669f778cebb) - [Exploiting XSS via Markdown](https://medium.com/taptuit/exploiting-xss-via-markdown-72a61e774bf8) - [Auditing package dependencies for security vulnerabilities](https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities) diff --git a/docs/docs/tailwind-css.md b/docs/docs/tailwind-css.md index e7b9ff5be2dfd..4e8cb0bfc8838 100644 --- a/docs/docs/tailwind-css.md +++ b/docs/docs/tailwind-css.md @@ -66,7 +66,7 @@ To learn more about how to use Tailwind in your CSS, visit the [Tailwind Documen ### Option #2: CSS-in-JS -These steps assume you have a CSS-in-JS library already installed, and the examples are based on Styled Components. +These steps assume you have a CSS-in-JS library already installed, and the examples are based on Emotion. 1. Install Tailwind Babel Macro @@ -108,7 +108,7 @@ npm install tailwind.macro 2. Use the Babel Macro (`tailwind.macro`) in your styled component ```javascript -import styled from "styled-components" +import styled from "@emotion/styled" import tw from "tailwind.macro" // All versions diff --git a/docs/docs/third-party-graphql.md b/docs/docs/third-party-graphql.md index 723e7db95a24d..d9b90ed34ab4f 100644 --- a/docs/docs/third-party-graphql.md +++ b/docs/docs/third-party-graphql.md @@ -100,3 +100,4 @@ exports.createPages = async ({ actions, graphql }) => { - [Example with GraphCMS](https://github.com/freiksenet/gatsby-graphcms) - [Example with Hasura](https://github.com/hasura/graphql-engine/tree/master/community/sample-apps/gatsby-postgres-graphql) - [Example with AWS AppSync](https://github.com/aws-samples/aws-appsync-gatsby-sample) +- [Example with Dgraph](https://github.com/dgraph-io/gatsby-dgraph-graphql) diff --git a/docs/docs/using-cloudinary-image-service.md b/docs/docs/using-cloudinary-image-service.md new file mode 100644 index 0000000000000..fab73d0bd0d6c --- /dev/null +++ b/docs/docs/using-cloudinary-image-service.md @@ -0,0 +1,156 @@ +--- +title: Using Cloudinary image service for media optimization +--- + +Cloudinary is a cloud-based end-to-end media management platform that provides solutions to help site creators serve optimized media files (images and videos) to their audiences. It also provides a lot of optional transformations that can be carried out on these media assets. + +In this guide you will take a look at the [gatsby-source-cloudinary](/packages/gatsby-source-cloudinary/) and [gatsby-transformer-cloudinary](/packages/gatsby-transformer-cloudinary/) plugins which you can use to improve the experience of handling images on Gatsby sites. + +Plugins are generally used to abstract functionality in Gatsby. In this case, the `gatsby-source-cloudinary` plugin is a [source plugin](/docs/creating-a-source-plugin/) which helps to connect Cloudinary media storage capabilities to your site. + +> Here's a [demo site that uses the gatsby-source-cloudinary](https://gsc-sample.netlify.com) showcasing optimized images in a masonry grid, served from Cloudinary. + +## The problem with handling images on the web + +Dealing with images on the web has always been a problem as unoptimized images can slow down your site. The processes put in place to create the best media experience can take a lot of time to implement. + +## Solutions Cloudinary provides + +Cloudinary provides a couple of amazing solutions to this problem, namely: + +- Remote storage and delivery of images via CDN +- Offers a wider range of transformations than [gatsby-image](/docs/using-gatsby-image/). +- [Digital Asset Management](https://cloudinary.com/documentation/digital_asset_management_overview) for enterprise assets + +## Gatsby-source-cloudinary + +This plugin fetches media assets from Cloudinary that are specified in a folder. It then transforms these images into Cloudinary file nodes, which can be queried with GraphQL in a Gatsby project. +`gatsby-source-cloudinary` applies [f_auto and q_auto](https://cloudinary.com/documentation/image_transformations) transformation parameters which aid in automatic optimisation of format and quality for media assets by over 70 percent. + +### Prerequisites + +Before using the `gatsby-source-cloudinary` plugin you should do the following: + +- Upload your images to a folder on Cloudinary. This folder can have any name of your choosing. +- Obtain your API key and API secret from your Cloudinary dashboard. +- Have the [dotenv](https://www.npmjs.com/package/dotenv) module installed for loading environment variables from a `.env` file. + +### Using gatsby-source-cloudinary + +Add the plugin to your project. + +1. Install `gatsby-source-cloudinary` + +```shell + npm install gatsby-source-cloudinary +``` + +2. In the root of your project, create an environment file called `.env` and add your Cloudinary credentials and their values + +``` +CLOUDINARY_API_KEY=xxxxxxxxxxxxxx +CLOUDINARY_API_SECRET=xxxxxxxxxxxxxxxxxxxx +CLOUDINARY_CLOUD_NAME=xxxxx +``` + +3. Configure `gatsby-config.js` + +```js:title=gatsby-config.js +require('dotenv').config(); // highlight-line +module.exports = { + ... + plugins:[ + ... + { + resolve: `gatsby-source-cloudinary`, + options: { + cloudName: process.env.CLOUDINARY_CLOUD_NAME, + apiKey: process.env.CLOUDINARY_API_KEY, + apiSecret: process.env.CLOUDINARY_API_SECRET, + resourceType: `image`, + prefix: `gatsby-source-cloudinary/` + } + } + ] +} +``` + +Note that `gatsby-source-cloudinary` takes the following options: + +- **`cloudName`** , **`apiKey`** , and **`apiSecret`** **:** These are credentials from your Cloudinary console, stored as three separate environment variables for security. +- **`resourceType`** **:** This is the resource type of the media assets - either an image or a video. +- **`prefix`** **:** This is the folder (in your Cloudinary account) in which the files reside. In the example above, the folder is called `gatsby-source-cloudinary`. Assign a name of your choice. + Other optional options are `type`, `tags`, and `maxResult`. + +Here's a [link to the README](https://github.com/Chuloo/gatsby-source-cloudinary#query-parameters) for more information. + +## Gatsby-transformer-cloudinary + +After sourcing media files from Cloudinary, you will be able to leverage Cloudinary’s media transformation capabilities. To do so, use `gatsby-transformer-cloudinary` which is a type of [transformer plugin](/docs/creating-a-transformer-plugin/) that is used to change image formats, styles and dimensions. It also optimizes images for minimal file size alongside high visual quality for an improved user experience and minimal bandwidth. + +Here's a [demo site that uses the gatsby-transformer-plugin](https://gatsby-transformer-cloudinary.netlify.com/fluid/) + +### Prerequisites + +Before using the `gatsby-transformer-cloudinary` plugin you should do the following: + +- Upload your images to a folder on Cloudinary. This folder can have any name of your choosing. +- Have the `gatsby-source-cloudinary` plugin installed and configured. +- Obtain your API key and API secret from your Cloudinary dashboard. +- Have the [dotenv](https://www.npmjs.com/package/dotenv) module installed for loading environment variables from a `.env` file. + +### Using gatsby-transformer-cloudinary + +1. Install `gatsby-transformer-cloudinary` and `gatsby-source-filesystem` which creates the File nodes that the Cloudinary transformer plugin works on. + +```shell + npm install gatsby-transformer-cloudinary gatsby-source-filesystem +``` + +2. In the root of your project, create an environment file called `.env` to which to add your Cloudinary credentials and their values. + +``` +CLOUDINARY_API_KEY=xxxxxxxxxxxxxx +CLOUDINARY_API_SECRET=xxxxxxxxxxxxxxxxxxxx +CLOUDINARY_CLOUD_NAME=xxxxx +``` + +3. Configure `gatsby-config.js` + +```js:title=gatsby-config.js +require('dotenv').config({ + path: `.env.${process.env.NODE_ENV}`, +}); + +module.exports = { + plugins: [ + { + resolve: `gatsby-source-filesystem`, + options: { + name: `images`, + path: `${__dirname}/src/images`, + }, + }, + { + resolve: 'gatsby-transformer-cloudinary', + options: { + cloudName: process.env.CLOUDINARY_CLOUD_NAME, + apiKey: process.env.CLOUDINARY_API_KEY, + apiSecret: process.env.CLOUDINARY_API_SECRET, + + // This folder will be created if it doesn’t exist. + uploadFolder: 'gatsby-cloudinary', + + }, + ], +}; +``` + +> In `gatsby-config.js`, responsive breakpoints can be created for each image, use the `fluidMaxWidth` and `fluidMinWidth` options to set them. Take a look at the [plugin documentation](https://www.npmjs.com/package/gatsby-transformer-cloudinary#api) for more information on how these parameters can be set. + +## Additional resources + +- [Faster Sites with Optimized Media Assets by William Imoh](/blog/2020-01-12-faster-sites-with-optimized-media-assets/) +- [Gatsby Transformer Cloudinary](https://www.npmjs.com/package/gatsby-transformer-cloudinary) +- [Gatsby Source Cloudinary](/packages/gatsby-source-cloudinary/) +- [Aspect ratio parameter](https://cloudinary.com/documentation/image_transformation_reference#aspect_ratio_parameter) diff --git a/docs/docs/using-gatsby-image.md b/docs/docs/using-gatsby-image.md index 4e6d7b4a1fb0e..17b18536a6e10 100644 --- a/docs/docs/using-gatsby-image.md +++ b/docs/docs/using-gatsby-image.md @@ -29,7 +29,7 @@ But creating optimized images for websites has long been a thorny problem. Ideal - Use the “blur-up” technique or a “traced placeholder” SVG to show a preview of the image while it loads - Hold the image position so your page doesn’t jump while the images load -Doing this consistently across a site feels like Sisyphean labor. You manually optimize your images and then… several images are swapped in at the last minute or a design-tweak shaves 100px of width off your images. +Doing this consistently across a site feels like a task that can never be completed. You manually optimize your images and then… several images are swapped in at the last minute or a design-tweak shaves 100px of width off your images. Most solutions involve a lot of manual labor and bookkeeping to ensure every image is optimized. diff --git a/docs/sites.yml b/docs/sites.yml index cf3b4e573a35c..178631243b5de 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -10354,3 +10354,46 @@ built_by: Masatoshi Nishiguchi built_by_url: https://mnishiguchi.com featured: false +- title: WhileNext + url: https://whilenext.com + main_url: https://whilenext.com + description: > + A Blog on Software Development + categories: + - Blog + - Learning + - Programming + - Web Development + built_by: Masoud Karimi + built_by_url: https://github.com/masoudkarimif +- title: Jamify.me + description: > + We build websites & PWAs with JAMstack. Delivering faster, more secure web. + main_url: https://jamify.me + url: https://jamify.me + categories: + - Agency + - Web Development + featured: false +- title: The Cares Family + main_url: https://thecaresfamily.org.uk/home + url: https://thecaresfamily.org.uk/home + description: > + The Cares Family helps people find connection and community in a disconnected age. They relaunched their website in Gatsby during the COVID-19 outbreak of 2020 to help connect neighbours. + categories: + - Nonprofit + - Blog + - Community + built_by: Mutual + built_by_url: https://www.madebymutual.com +- title: "Due to COVID-19: Documenting the Signs of the Pandemic" + url: https://duetocovid19.com + main_url: https://duetocovid19.com + description: > + A project to document all the signs that have gone up on the storefronts of our cities in response to the coronavirus pandemic. + categories: + - Photography + - Community + built_by: Andrew Louis + built_by_url: https://hyfen.net + featured: false diff --git a/docs/starters.yml b/docs/starters.yml index 729783be16311..613eeac9a6a62 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -5300,12 +5300,13 @@ - Language:TypeScript - Linting - Netlify + - Testing features: - - ✔️ Gatsby - - ✔️ TypeScript - - ✔️ Prettier - - ✔️ ESLint - - ✔️ Deploy to Netlify through GitHub Actions + - TypeScript + - ESLint for JS linting + - Prettier code formatting + - Jest for testing + - Deploy to Netlify through GitHub Actions - url: https://answer.netlify.com/ repo: https://github.com/passwd10/gatsby-starter-answer description: A simple Gatsby blog to show your Future Action on top of the page @@ -5852,6 +5853,41 @@ - CSS-in-Reason support - StaticQuery GraphQL support in ReasonML - Similar to gatsby-starter-blog + +- url: https://gct.mozart409.space/ + repo: https://github.com/Mozart409/gatsby-custom-tailwind + description: A minimal tailwind css starter, with custom fonts, purgecss, automatic linting when committing to master, awesome lighthouse audit, custom zeit/serve server for production build, visible to all in your network, so you can test it with your phone. + tags: + - Linting + - PWA + - SEO + - Styling:Tailwind + - Styling:PostCSS + features: + - Minimal Tailwind Starter + - Custom Fonts predefined + - Automatic Linting on Commit using husky and pretty-quick + - Custom server to test Production Builds on your local network via zeit/serve + - Extensive Readme in the repo +- url: https://gatsby-redux-toolkit-typescript.netlify.com/ + repo: https://github.com/saimirkapaj/gatsby-redux-toolkit-typescript-starter + description: Gatsby Starter using Redux-Toolkit, Typescript, Styled Components and Tailwind CSS. + tags: + - Redux + - Language:TypeScript + - Styling:Tailwind + features: + - Redux-Toolkit + - Typescript + - Styled Components + - Tailwind CSS + - Removes unused CSS with Purgecss + - Font Awesome Icons + - Responsive Design + - Change between light and dark themes + - SEO + - React Helmet + - Offline Support - url: https://gatsby-ts-tw-styled-eslint.netlify.com repo: https://github.com/Miloshinjo/gatsby-ts-tw-styled-eslint-starter description: Gatsby starter with Typescript, TailwindCSS, @emotion/styled and eslint. @@ -5912,3 +5948,30 @@ - Stylesheet built using Sass and BEM-Style naming. - Syntax highlighting in code blocks. - Google Analytics support. +- url: https://gatsby-starter-ts.now.sh/ + repo: https://github.com/jpedroschmitz/gatsby-starter-ts + description: A TypeScript starter for Gatsby. No plugins and styling. Exactly the necessary to start! + tags: + - Language:TypeScript + - Styling:None + - Linting + features: + - TypeScript + - ESLint and Prettier + - Husky and lint-staged + - Commitizen and Commitlint + - TypeScript absolute paths +- url: https://rolwinreevan.com + repo: https://github.com/rolwin100/rolwinreevan_gatsby_blog + description: This starter consists of ant design system you can use it for your personal blog. I have give a lot of time in developing this starter because I found that there were not much starters with a very good design. Please give a star to this project if you have like it to encourage me 😄. Thank you. + tags: + - Blog + - Portfolio + - Markdown + - SEO + - PWA + features: + - Blog designed using Markdown. + - Beautifully designed landing page. + - First project in the starters list to use ant design. + - Supports SSR and is also a PWA. diff --git a/docs/tutorial/building-a-theme.md b/docs/tutorial/building-a-theme.md index b12ec21b77f20..b5727aa11314f 100644 --- a/docs/tutorial/building-a-theme.md +++ b/docs/tutorial/building-a-theme.md @@ -1047,6 +1047,8 @@ exports.createPages = async ({ actions, graphql, reporter }, options) => { } ``` +Note that the example above sets default values for `options`. This behavior was also included in the prior `gatsby-config.js` example. You only need to set default values once, but both mechanisms for doing so are valid. + > 💡 Up till now, you've mostly worked in the `gatsby-theme-events` space. Because you've converted the theme to use a function export, you can no longer run the theme on its own. The function export in `gatsby-config.js` is only supported for themes. From now on you'll be running `site` -- the Gatsby site consuming `gatsby-theme-events`, instead. Gatsby sites still require the object export in `gatsby-config.js`. Test out this new options-setting by making some adjustments to `site`. diff --git a/docs/tutorial/e-commerce-with-datocms-and-snipcart/index.md b/docs/tutorial/e-commerce-with-datocms-and-snipcart/index.md index 6700c1358dda5..04df1906b6389 100644 --- a/docs/tutorial/e-commerce-with-datocms-and-snipcart/index.md +++ b/docs/tutorial/e-commerce-with-datocms-and-snipcart/index.md @@ -25,11 +25,11 @@ You can sign up for the following accounts now or as you need to use each of the - [Snipcart](https://snipcart.com/): add a shopping cart to your site - [Netlify](https://www.netlify.com/): host your site and register a domain -To edit code locally (affecting files stored on your computer), you'll need the following software. If you don't already know what these are or want additional background information, check out [Step 0 of the Gatsby tutorial](https://www.gatsbyjs.org/tutorial/part-zero/). It includes detailed instructions on how to set up a local development environment. +To edit code locally (affecting files stored on your computer), you'll need the following software. If you don't already know what these are or want additional background information, check out [Step 0 of the Gatsby tutorial](/tutorial/part-zero/). It includes detailed instructions on how to set up a local development environment. -- [node](https://nodejs.org): run JavaScript on your computer +- [Node.js](https://nodejs.org): run JavaScript on your computer - [Git](https://git-scm.com/downloads): track changes to your code -- [Gatsby command line interface (CLI)](https://www.gatsbyjs.org/tutorial/part-zero/#using-the-gatsby-cli): run Gatsby commands on your computer +- [Gatsby command line interface (CLI)](/tutorial/part-zero/#using-the-gatsby-cli): run Gatsby commands on your computer ## Provisioning Your Site on Gatsby Cloud @@ -53,7 +53,7 @@ Authorize Gatsby to connect with your DatoCMS account and hit the "Start my site > This automatic provisioning of your website is one of Gatsby Cloud's strengths. Integrations with content management systems like this make it possible for you to spin up and begin publishing content to new sites without ever touching any code. -![celebratory screen titled successfully set up Gatsby provisioned Snipcart!](/images/successfully-set-up.png) +![Celebratory screen titled successfully set up Gatsby provisioned Snipcart!](/images/successfully-set-up.png) ## Exploring the DatoCMS Project @@ -62,7 +62,7 @@ follow the link in Gatsby Cloud to go straight to your project in DatoCMS. Click on "Enter project" and select "Products" from the secondary navigation menu. You'll see a number of products already defined for you. You can delete or edit these as you'd like. -![edit product screen featuring a single sock product called street faces](/images/edit-product.png) +![Edit product screen featuring a single sock product called street faces](/images/edit-product.png) ### Editing models in DatoCMS @@ -70,7 +70,7 @@ Clicking on "Settings" in the primary navigation menu reveals the "Models" menu Maybe you also want each product to have a description or a release date. You can edit this model to be whatever you want it to be by adding and customizing fields. DatoCMS provides a wide variety of options that you can tweak to fit your needs. -![choose a field type menu featuring options for text, modular content, media, data and timeline, number, boolean, location, color, SEO, links, and JSON](/images/choose-field-type.png) +![Choose a field type menu featuring options for text, modular content, media, data and timeline, number, boolean, location, color, SEO, links, and JSON](/images/choose-field-type.png) If you already have items you know you want to sell, replace the sample products with a few of your own to get a feel for the interface. If not, you can continue on without making any changes in the CMS for now. @@ -84,7 +84,7 @@ Even if you've never used Git/GitHub, there's no need to fear. You can edit indi You can make small changes to the code from your browser by editing files directly in GitHub. Say, for example, that you always want to display prices in some other currency besides euros. To switch the symbols, head to your repository's page on GitHub and navigate to `src/pages/index.js`. -![github menu shows the current branch and file location as well as the first few lines of code in this file. Also includes view options raw, blame, and history](/images/github-menu.png) +![GitHub menu shows the current branch and file location as well as the first few lines of code in this file. Also includes view options raw, blame, and history](/images/github-menu.png) Select "Edit this file" (the pencil icon) from the menu. Where `product.price` is being displayed, you'll need to update the currency symbol. @@ -94,7 +94,7 @@ Select "Edit this file" (the pencil icon) from the menu. Where `product.price` i Once you've made your change, you'll need to commit that change. A commit is like a snapshot in time or a save point in a video game. Add a message that concisely describes the changes you've made and then commit those changes. -![commit changes menu with message 'Euro to dollar'. Email address is blurred and there's a big, green 'Commit changes' button](/images/commit-change.png) +![Commit changes menu with message 'Euro to dollar'. Email address is blurred and there's a big, green 'Commit changes' button](/images/commit-change.png) You've made a change to your master branch, which means Gatsby will build a new version of your site! @@ -104,7 +104,7 @@ The rest of this process is described in the context of using a text editor to m You can edit your site's code locally by following these steps: -- Clone the project by Selecting the "Clone or download" button on your repository's main page, which will display a link for you to copy. +- Clone the project by selecting the "Clone or download" button on your repository's main page, which will display a link for you to copy. - Copy the project to your computer and install its dependencies, other JavaScript projects that your site relies on to work. @@ -120,7 +120,7 @@ You'll need to make one change before you try to run the site. The version that In `gatsby-config.js`, you'll find an array of plugins already installed on your site, including `gatsby-source-datocms`. That section references a variable `process.env.DATO_API_TOKEN`. `process.env` refers to the _environment_ in which you're running your code and `DATO_API_TOKEN` is the name of the particular variable in question. -```jsx:title=gatsby-config.js +```js:title=gatsby-config.js { resolve: `gatsby-source-datocms`, options: { apiToken: process.env.DATO_API_TOKEN }, @@ -131,13 +131,13 @@ In order to set this variable's value, create a new file in your project's root Add your DatoCMS API Token environment variable to this file. You can find your API token in Gatsby under Site Settings > Environment variables. Opening the "Edit" menu will allow you to copy the full token. Set that as the value in `.env.development`. -``` +```text DATO_API_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` -Now you should be able to run `gatsby develop` to run your site. If you're using Visual Studio Code, you can open a terminal within the text editor (control + `) and keep everything in one window. Navigate to [localhost:8000](http://localhost:8000/) in your browser to see the example site. It should include whatever products you created in DatoCMS. +Now you should be able to run `gatsby develop` to run your site. If you're using Visual Studio Code, you can open a terminal within the text editor (control + \`) and keep everything in one window. Navigate to `http://locahost:8000/` in your browser to see the example site. It should include whatever products you created in DatoCMS. -![sample shop has a bright blue, pink, and green gradient as a background. Stacking rings, rhodochrosite ring, and statement earrings have been added as products](/images/sample-with-products.png) +![Sample shop has a bright blue, pink, and green gradient as a background. Stacking rings, rhodochrosite ring, and statement earrings have been added as products](/images/sample-with-products.png) ## Modifying styles @@ -145,7 +145,7 @@ Chances are you'll want to apply your own branding to this site, so try making s If you're not sure where to look for the code you'll need to change, search for the term "background" and see what comes up! In this case, you'll find one entry in the results that _also_ says something about a gradient... -![searching the word background in VS Code reveals 7 instances in 5 files, including one in reset.scss](/images/background.png) +![Searching the word background in VS Code reveals 7 instances in 5 files, including one in reset.scss](/images/background.png) Remove the following CSS from `src/style/reset.scss`. The result should be a plain white background for your store. diff --git a/examples/creating-source-plugins/README.md b/examples/creating-source-plugins/README.md new file mode 100644 index 0000000000000..fb1face66c326 --- /dev/null +++ b/examples/creating-source-plugins/README.md @@ -0,0 +1,83 @@ +# Creating First Class Gatsby Source Plugins + +Create Gatsby plugins that leverage Gatsby's most impactful native features like remote image optimization, caching, customized GraphQL schemas and node relationships, and more. + +This monorepo serves as an example of a site using a first class source plugin to pull in data from a Node.js API. It is meant to show the 3 pieces that work together when building a source plugin: the API, the site, and the source plugin. + +## Setup + +This monorepo uses yarn workspaces to manage the 3 indivdual projects: + +- api: a Node.js API with in-memory data, and a Post and Author type, as well as support for subscriptions when Posts are mutated +- example-site: a barebones Gatsby site that implements the source plugin +- source-plugin: a plugin that uses several Gatsby APIs to source data from the API, create responsive/optimized images from remote locations, and link the nodes in the example site + +To install dependencies for all projects run the install command in the root of the yarn workspace (which requires yarn to be installed): + +``` +yarn install +``` + +_Note: if you aren't using yarn, you can navigate into each of the 3 folders and run `npm install` instead_ + +Then you can run the api or example projects in separate terminal windows with the commands below. + +For the API which runs at `localhost:4000`, use this command: + +``` +yarn workspace api start +``` + +And to run the example site with `gatsby develop` at `localhost:8000`, use this command: + +``` +yarn workspace example-site develop +``` + +Running the example site also runs the plugin because it is included in the site's config. You'll see output in the console for different functionality and then can open up the browser to `localhost:8000` to see the site. + +## Developing and Experimenting + +You can open up `localhost:4000` with the API running, which will load a GraphQL Playground, which is a GraphQL IDE (like GraphiQL, that Gatsby runs at `localhost:8000/___graphql`) for running queries and mutations on the data from the API. + +You can test a query like this to see data returned: + +```graphql +query { + posts { + id + slug + } +} +``` + +This query will return the IDs for all posts in the API. You can copy one of these IDs and provide it as an argument to a mutation to update information about that post. + +You can run 3 different mutations from the GraphQL Playground (at `localhost:4000`): `createPost`, `updatePost`, and `deletePost`. These methods would mimic CRUD operations happening on the API of the data source like a headless CMS. An example `updatePost` mutation is outlined below. + +When you run a mutation on a post, a subscription event is published, which lets the plugin know it should respond and update nodes. The following mutation can be copied into the left side of the GraphQL playground so long as you replace "post-id" with a value returned for an ID from a query (like the one above). + +```graphql +mutation { + updatePost(id: "post-id", description: "Some data!") { + id + slug + description + } +} +``` + +The website's homepage will update with any changes while the source plugin is subscribed to changes, which is when the `preview: true` is provided in the example site's `gatsby-config`. + +You can also optionally listen for subscription events with this query in the playground which will display data when a mutation is run: + +```graphql +subscription { + posts { + id + description + } +} +``` + +A similar subscription is registered when the plugin is run, so you can also see subscription events logged when the plugin is running. diff --git a/examples/creating-source-plugins/api/README.md b/examples/creating-source-plugins/api/README.md new file mode 100644 index 0000000000000..c9fa5261a5770 --- /dev/null +++ b/examples/creating-source-plugins/api/README.md @@ -0,0 +1,3 @@ +# Example API + +A small GraphQL server with in-memory data, powered by [graphql-yoga](https://github.com/graphcool/graphql-yoga) 🧘. See the root of the monorepo for details about running this API alongisde the `example-site` and `source-plugin`. diff --git a/examples/creating-source-plugins/api/package.json b/examples/creating-source-plugins/api/package.json new file mode 100644 index 0000000000000..48e9f8626d1e9 --- /dev/null +++ b/examples/creating-source-plugins/api/package.json @@ -0,0 +1,43 @@ +{ + "name": "api", + "description": "A simple GraphQL server example with in-memory data", + "version": "1.0.0", + "license": "MIT", + "homepage": "https://general-repair.glitch.me", + "author": { + "name": "Risan Bagja Pradana", + "email": "risanbagja@gmail.com", + "url": "https://risan.io" + }, + "main": "src/index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/risan/simple-graphql-server-example.git" + }, + "bugs": { + "url": "https://github.com/risan/simple-graphql-server-example/issues" + }, + "keywords": [ + "graphql", + "graphql-server", + "graphql-yoga" + ], + "scripts": { + "start": "node src/index.js", + "lint": "eslint *.js src", + "lint-fix": "eslint *.js src --fix" + }, + "dependencies": { + "dotenv": "^5.0.1", + "graphql-yoga": "^1.8.2", + "uniqid": "^4.1.1" + }, + "devDependencies": { + "eslint": "^4.19.1", + "eslint-config-airbnb-base": "^12.1.0", + "eslint-config-prettier": "^2.9.0", + "eslint-plugin-import": "^2.10.0", + "eslint-plugin-prettier": "^2.6.0", + "prettier": "^1.11.1" + } +} diff --git a/examples/creating-source-plugins/api/src/index.js b/examples/creating-source-plugins/api/src/index.js new file mode 100644 index 0000000000000..70b3e159cfa73 --- /dev/null +++ b/examples/creating-source-plugins/api/src/index.js @@ -0,0 +1,138 @@ +require("dotenv").config() +const { GraphQLServer, PubSub } = require("graphql-yoga") +const uniqid = require("uniqid") + +const CREATED = "created" +const UPDATED = "updated" +const DELETED = "deleted" + +const authors = [ + { + id: 1, + name: "Jay Gatsby", + }, + { + id: 2, + name: "Daisy Buchanan", + }, +] + +const posts = [ + { + id: uniqid(), + slug: "hello-world", + description: "Our first post on our site.", + imgUrl: "https://images.unsplash.com/photo-1534432586043-ead5b99229fb", + imgAlt: "Pug in a sweater", + authorId: 1, + }, + { + id: uniqid(), + slug: "company-vision", + description: "Our vision for a welcoming company.", + imgUrl: "https://images.unsplash.com/photo-1530041539828-114de669390e", + imgAlt: "Pug in a rainjacket", + authorId: 1, + }, + { + id: uniqid(), + slug: "redesigning-our-logo", + description: "What went into the new logo.", + imgUrl: "https://images.unsplash.com/photo-1541364983171-a8ba01e95cfc", + imgAlt: "Pug in glasses", + authorId: 2, + }, +] + +const resolvers = { + Query: { + info: () => "A simple GraphQL server example with in-memory data.", + posts: () => posts, + authors: () => authors, + }, + + Mutation: { + createPost: (root, { slug, description }) => { + const post = { + id: uniqid(), + slug, + description, + imgUrl: "https://images.unsplash.com/photo-1534432586043-ead5b99229fb", + imgAlt: "pug in a sweater", + authorId: 1, + } + + posts.push(post) + pubsub.publish(CREATED, { posts: [{ status: CREATED, ...post }] }) + + return post + }, + + updatePost: (root, { id, description }) => { + const postIdx = posts.findIndex(p => id === p.id) + + if (postIdx === null) { + return null + } + + posts[postIdx] = { ...posts[postIdx], description } + pubsub.publish(UPDATED, { + posts: [{ status: UPDATED, ...posts[postIdx] }], + }) + + return posts[postIdx] + }, + + deletePost: (root, { id }) => { + const postIdx = posts.findIndex(p => id === p.id) + + if (postIdx === null) { + return null + } + + const post = posts[postIdx] + pubsub.publish(DELETED, { + posts: [{ status: DELETED, ...posts[postIdx] }], + }) + + posts.splice(postIdx, 1) + + return post + }, + }, + + Post: { + id: root => root.id, + slug: root => root.slug, + description: root => root.description, + author: root => authors.find(author => author.id === root.authorId), + }, + + Author: { + id: root => root.id, + name: root => root.name, + }, + + Subscription: { + posts: { + subscribe: (parent, args, { pubsub }) => { + return pubsub.asyncIterator([CREATED, UPDATED, DELETED]) + }, + }, + }, +} + +const pubsub = new PubSub() +const server = new GraphQLServer({ + typeDefs: "./src/schema.graphql", + resolvers, + context: { pubsub }, +}) + +server.start( + { + port: + (process.env.PORT ? parseInt(process.env.PORT, 10) : undefined) || 4000, + }, + ({ port }) => console.log(`🏃🏻‍ Server is running on port ${port}.`) +) diff --git a/examples/creating-source-plugins/api/src/schema.graphql b/examples/creating-source-plugins/api/src/schema.graphql new file mode 100644 index 0000000000000..2dd1f9c5a67c6 --- /dev/null +++ b/examples/creating-source-plugins/api/src/schema.graphql @@ -0,0 +1,30 @@ +type Query { + info: String! + posts: [Post!]! + authors: [Author!]! +} + +type Mutation { + createPost(slug: String!, description: String!): Post! + updatePost(id: ID!, description: String!): Post + deletePost(id: ID!): Post +} + +type Post { + id: ID! + slug: String! + description: String! + imgUrl: String! + imgAlt: String! + author: Author! + status: String +} + +type Author { + id: ID! + name: String! +} + +type Subscription { + posts: [Post!]! +} diff --git a/examples/creating-source-plugins/example-site/README.md b/examples/creating-source-plugins/example-site/README.md new file mode 100644 index 0000000000000..5c03365ce2895 --- /dev/null +++ b/examples/creating-source-plugins/example-site/README.md @@ -0,0 +1,3 @@ +# Example Site + +See the root of the monorepo for details about running this site with the example `source-plugin` installed inside it. diff --git a/examples/creating-source-plugins/example-site/gatsby-config.js b/examples/creating-source-plugins/example-site/gatsby-config.js new file mode 100644 index 0000000000000..1d16c1582500d --- /dev/null +++ b/examples/creating-source-plugins/example-site/gatsby-config.js @@ -0,0 +1,22 @@ +/** + * Configure your Gatsby site with this file. + * + * See: https://www.gatsbyjs.org/docs/gatsby-config/ + */ + +module.exports = { + plugins: [ + // loads the source-plugin + { + resolve: `source-plugin`, + options: { + spaceId: "123", + preview: true, + cacheResponse: false, + }, + }, + // required to generate optimized images + `gatsby-plugin-sharp`, + `gatsby-transformer-sharp`, + ], +} diff --git a/examples/creating-source-plugins/example-site/package.json b/examples/creating-source-plugins/example-site/package.json new file mode 100644 index 0000000000000..51dc41c4900d2 --- /dev/null +++ b/examples/creating-source-plugins/example-site/package.json @@ -0,0 +1,34 @@ +{ + "name": "example-site", + "private": true, + "description": "A simplified bare-bones starter for Gatsby", + "version": "0.1.0", + "license": "MIT", + "scripts": { + "build": "gatsby build", + "develop": "gatsby develop", + "format": "prettier --write \"**/*.{js,jsx,json,md}\"", + "start": "npm run develop", + "serve": "gatsby serve", + "clean": "gatsby clean", + "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" + }, + "dependencies": { + "gatsby": "^2.19.45", + "gatsby-image": "^2.3.1", + "gatsby-plugin-sharp": "^2.5.3", + "gatsby-transformer-sharp": "^2.4.3", + "react": "^16.12.0", + "react-dom": "^16.12.0" + }, + "devDependencies": { + "prettier": "^1.19.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/gatsbyjs/gatsby-starter-hello-world" + }, + "bugs": { + "url": "https://github.com/gatsbyjs/gatsby/issues" + } +} diff --git a/examples/creating-source-plugins/example-site/src/pages/index.js b/examples/creating-source-plugins/example-site/src/pages/index.js new file mode 100644 index 0000000000000..e8491f64ec941 --- /dev/null +++ b/examples/creating-source-plugins/example-site/src/pages/index.js @@ -0,0 +1,72 @@ +import React from "react" +import { graphql } from "gatsby" +import Img from "gatsby-image" + +export default ({ data }) => ( +
    +

    Posts

    +
    + {data.allPost.nodes.map(post => ( +
    +

    {post.slug}

    + By: {post.author.name} +

    {post.description}

    + {post.imgAlt} +
    + ))} +
    +
    +) + +export const query = graphql` + { + allPost { + nodes { + id + slug + description + imgAlt + author { + id + name + } + slug + remoteImage { + id + childImageSharp { + id + fluid { + ...GatsbyImageSharpFluid + } + } + } + } + } + } +` diff --git a/examples/creating-source-plugins/example-site/static/favicon.ico b/examples/creating-source-plugins/example-site/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1a466ba8852cf099ae40335e878897bde72e1735 GIT binary patch literal 2813 zcmV7wtO>0C#@O9*BXj0vnU3Txw<*2nLRVINq?LYz0THvB9>K0QA`=kA45 zH>rZGmlV#qnH$uCDPe+;0o=3Sp?kdq2WgKYI^SXKIZBYn-k+Edd<+6KvLh|TKS!{V zpmkAJ1tGJUk)?NIbT2}HbKK*+590b+#Ctc)-(n5gtDWwb65MI+Khl=Qpa}`SObc0D zcb3qzwnfCnoGI(U#i&M#k<6JI2B@4&y3QodXL{VnHQ%G>xde1yh{Cr~tOY{ox`SZ3 zFw9dcCna73B99M6W#~MX2swyNG~(c5oRRa8b|0Nk?#}ws8a4BarE2z<*Qz=9u2pl# zuVeW2SIYPvp5Yz5D+FN;y;dZLqypy9bp!1;&a#cc5n;b5oF_sa0%!7BRs4v9i?i=p zqX3V8cZ(`5*sFGw9ait`JF6NSE~)dUuQ7aZ^s+i!b5`wij;J+-`_z)}RWL!b=sS^| zO^BzKp+16XqQW+A10pY+rv>N1_&lQo@}62?LqfovcVD?$mA9J_zImft4fg10?@>o; zo7Cz>d(`}i5l|h2y!IA=7#7ARw4n>m6=zqgM&hh} z#G>&5kq^Fe?%k`ZWZ`a>$fLA2_RvJIZRJnhVu%oRO7cz?Wuo&BX|5aObF;!O>9V`< z{`Km>wvz^dXe6dw*G+Ku;~v#~qD3A4N0WN%_0#ID*G{p7nh4QbZGI`?TR9HxJfjvp z_#)d5_R>VKH`9!KL_3wy;w62^Lqz%k8LZQx2{6b*WtRSUtGd{D-EcA<^SIg5*{2Tf zcwdz+-m8kfvzgU`4OiO-u8F&<@LQYI3;BE0KdVlu&YQjbts8fZR4#wmu2%fKlE1Nt zh~;>08um9qVuc|h81)cb5(Z1iYkhzE7q1#U@9T{k&ed&wPd)j=m)W~$50h}6aH*bK z<$E9k>WBA!^Zg1{v-y~cX(q^;UAKDGA7{Mo5s^@*sFuPpg3(EKkTBZN677#8qVrIj zr9b+cx_P~eH;CwsuAFaIf0^@lHRJA5HIH0nu1405zNrB3;N5xmt>bT>nO5fMajV)(PZ_$2v<7h#4o znmJ7042Zk{znjUb$;OL4jve^WlSGfV$Mq{6>alNbV#7{Ea%NBu)ZAnU7WY@`AQBNj z4+QsDp74qIeL^13nd@2MAt9cM5Uc^UgGBzbzu9Nh3m@2^vM2HSI!=TlT0_FNEl6V4 zD%=-8zjFRg&tSElUcKo@{>d9AtKW=au9*NMa?WGi7G|C1kicPHsS+1 ze8-skgyi!%yL`TS|Enj}OftH3BOkO2R+&ueUedcxOh@PjyBO)#qG79to2%d5==o_1 zQoUUfwTxl_60@Ni?2w6=(jW3h3LpfwIv&P59X^)M9J-My7JYlOYQNTL461%tqx#jD z)hymm3;7{{Q6nNE4-zOY(B4Np&#K&AzP#lIxwL1dRdE0suIEV;#5|@u+d)9Bj&d;( z9XO3#hHaoPW^$ZAJiIO0i2pwl5O351U)rSeo;Y12rDc}}K+0lhAY!<&!y-gw zc-@1r6)e2qLQ$BB5J?y!hA9boA7^3IU;qiC^{oUpH^V~Ql}(U6B2Wnt>6V1}{l(wd zIA|#N+KV;=1lI%sILpGt3#vJoAVOxRTN1QB+%Zz~>z8k_w`*(ZRPDEc8&^A2C+&q4 z2DUkWQZfNuMyF_T6cnhms;Pbz*V&&Wp8n;~hya7;jw@5kfBFj70)ss+P(pb-2{ell zOB6mt#R-ne=l;df*CrxK5<^rcApq&}KnH@TxbpW7UEs{sO4*GO*NGcN0f8i{>V>z> zBHNy?=e#|gl91|b+p2o?8tqk8@;2`Yz;E2&vF@MX|sG!3A}Z@m1jshJ^(Wk1=DB2E!+sLOz&I+iC<5BC1M~iAaZwl>j

    }uA3 zJBZ51Gh-{LePn)666(D9~}hFkGgt_C%~*Ee_( zDUfKEOKU|MTSzV78qq#Xmn8DYRpK2OEK&-wH9;QdKh4^XnBZF7Io5r;E)KR-OrsQI z9TdyjBSlSLls5hI?Cq+jD`JQU+C(ZBn@SR>?52OAgnOtv%a52wmZ%MoM>46aKhs*& zf$I!if5vXeCC$O;JPyMJJ&B3gM1X_W{(CdwUQ>9dfh5sJ*(HLM?dPTQfoI@+0Qq>r zW+F=s+jHQ+bf!=b7hHS50mFt}tS#Kf<0Jc!yruHFL!64|q$r9wvRi5NM`v%S z^5537F~eXjooD2=*I6MWfP}g`{f?NlIyr^NlXAQ?BdSMC>=htpc#pE88g_Tm@0SDh z#9ZBiG~TJklU#R4AE(F86SYhv{JfrQ8l8vAXa=qjo$q%}W*f7<7Mpm)8@z2w8uG!l zfsi>AFP`|pORDVg8ntJ`QFZjqW_AA5H69&td772zec~N7$#7pY!5h6M%G!ulUqH52 z@eub02b z+Kr!~dt$IYwGsRVm=!zr2hx5YP0yZ1f8NteQ7b2=%TZUS$Ka^R`2#7m8H8)Z^>jb1 z61kXDY`Mx&fw}eI|7zf=k&`s7$8Z7td9-7&sfe52je5pzBBsq<`(8}Ajc+x_dypPT zgtfiRfNC@N$$cpBw*zhpKSc;Ocu}%K|A`~a{hHJrwXjCILg(|&ab%VFCqSxyt=M)s zti%7`2_85H|86s$Hp-*(b~?BCC6FjW=(?58)u^QCdZLM@iD~@Ep>q9yx$uEL-Yj-E P00000NkvXXu0mjfF#vB* literal 0 HcmV?d00001 diff --git a/examples/creating-source-plugins/package.json b/examples/creating-source-plugins/package.json new file mode 100644 index 0000000000000..34071a17c59ee --- /dev/null +++ b/examples/creating-source-plugins/package.json @@ -0,0 +1,14 @@ +{ + "name": "creating-source-plugins", + "version": "1.0.0", + "description": "Monorepo for examples, api, and plugins for creating first class source plugins", + "main": "index.js", + "author": "@gillkyle", + "license": "MIT", + "workspaces": [ + "api", + "example-site", + "source-plugin" + ], + "private": true +} diff --git a/examples/creating-source-plugins/source-plugin/README.md b/examples/creating-source-plugins/source-plugin/README.md new file mode 100644 index 0000000000000..1d88f045e1984 --- /dev/null +++ b/examples/creating-source-plugins/source-plugin/README.md @@ -0,0 +1,3 @@ +# Example Source Plugin + +See the root of the monorepo for details about running this plugin inside of the `example-site` folder. It is installed in the example site and can be debugged and developed while running there. diff --git a/examples/creating-source-plugins/source-plugin/gatsby-node.js b/examples/creating-source-plugins/source-plugin/gatsby-node.js new file mode 100644 index 0000000000000..935297827e34f --- /dev/null +++ b/examples/creating-source-plugins/source-plugin/gatsby-node.js @@ -0,0 +1,274 @@ +const { createRemoteFileNode } = require(`gatsby-source-filesystem`) +const WebSocket = require("ws") +const { ApolloClient } = require("apollo-client") +const { InMemoryCache } = require("apollo-cache-inmemory") +const { split } = require("apollo-link") +const { HttpLink } = require("apollo-link-http") +const { WebSocketLink } = require("apollo-link-ws") +const { getMainDefinition } = require("apollo-utilities") +const fetch = require("node-fetch") +const gql = require("graphql-tag") + +/** + * ============================================================================ + * Create a GraphQL client to subscribe to live data changes + * ============================================================================ + */ + +// Create an http link: +const httpLink = new HttpLink({ + uri: "http://localhost:4000", + fetch, +}) + +// Create a WebSocket link: +const wsLink = new WebSocketLink({ + uri: `ws://localhost:4000`, + options: { + reconnect: true, + }, + webSocketImpl: WebSocket, +}) + +// using the ability to split links, you can send data to each link/url +// depending on what kind of operation is being sent +const link = split( + // split based on operation type + ({ query }) => { + const definition = getMainDefinition(query) + return ( + definition.kind === "OperationDefinition" && + definition.operation === "subscription" + ) + }, + wsLink, + httpLink +) + +const client = new ApolloClient({ + link, + cache: new InMemoryCache(), +}) + +/** + * ============================================================================ + * Helper functions and constants + * ============================================================================ + */ + +const POST_NODE_TYPE = `Post` +const AUTHOR_NODE_TYPE = `Author` + +// helper function for creating nodes +const createNodeFromData = (item, nodeType, helpers) => { + const nodeMetadata = { + id: helpers.createNodeId(`${nodeType}-${item.id}`), + parent: null, // this is used if nodes are derived from other nodes, a little different than a foreign key relationship, more fitting for a transformer plugin that is changing the node + children: [], + internal: { + type: nodeType, + content: JSON.stringify(item), + contentDigest: helpers.createContentDigest(item), + }, + } + + const node = Object.assign({}, item, nodeMetadata) + helpers.createNode(node) + return node +} + +/** + * ============================================================================ + * Verify plugin loads + * ============================================================================ + */ + +// should see message in console when running `gatsby develop` in example-site +exports.onPreInit = () => console.log("Loaded source-plugin") + +/** + * ============================================================================ + * Link nodes together with a customized GraphQL Schema + * ============================================================================ + */ + +exports.createSchemaCustomization = ({ actions }) => { + const { createTypes } = actions + createTypes(` + type Post implements Node { + id: ID! + slug: String! + description: String! + imgUrl: String! + imgAlt: String! + # create relationships between Post and File nodes for optimized images + remoteImage: File @link + # create relationships between Post and Author nodes + author: Author @link(from: "author.name" by: "name") + } + + type Author implements Node { + id: ID! + name: String! + }`) +} + +/** + * ============================================================================ + * Source and cache nodes from the API + * ============================================================================ + */ + +exports.sourceNodes = async function sourceNodes( + { + actions, + cache, + createContentDigest, + createNodeId, + getNodesByType, + getNode, + }, + pluginOptions +) { + const { createNode, touchNode, deleteNode } = actions + const helpers = Object.assign({}, actions, { + createContentDigest, + createNodeId, + }) + + // you can access plugin options here if need be + console.log(`Space ID: ${pluginOptions.spaceId}`) + + // simple caching example, you can find in .cache/caches/source-plugin/some-diskstore + await cache.set(`hello`, `world`) + console.log(await cache.get(`hello`)) + + // touch nodes to ensure they aren't garbage collected + getNodesByType(POST_NODE_TYPE).forEach(node => touchNode({ nodeId: node.id })) + getNodesByType(AUTHOR_NODE_TYPE).forEach(node => + touchNode({ nodeId: node.id }) + ) + + // listen for updates using subscriptions from the API + if (pluginOptions.preview) { + console.log( + "Subscribing to updates on ws://localhost:4000 (plugin is in Preview mode)" + ) + const subscription = await client.subscribe({ + query: gql` + subscription { + posts { + id + slug + description + imgUrl + imgAlt + author { + id + name + } + status + } + } + `, + }) + subscription.subscribe(({ data }) => { + console.log(`Subscription received:`) + console.log(data.posts) + data.posts.forEach(post => { + const nodeId = createNodeId(`${POST_NODE_TYPE}-${post.id}`) + switch (post.status) { + case "deleted": + deleteNode({ + node: getNode(nodeId), + }) + break + case "created": + case "updated": + default: + // created and updated can be handled by the same code path + // the post's id is presumed to stay constant (or can be inferred) + createNodeFromData(post, POST_NODE_TYPE, helpers) + break + } + }) + }) + } + + // store the response from the API in the cache + const cacheKey = "your-source-data-key" + let sourceData = await cache.get(cacheKey) + + // fetch fresh data if nothiing is found in the cache or a plugin option says not to cache data + if (!sourceData || !pluginOptions.cacheResponse) { + console.log("Not using cache for source data, fetching fresh content") + const { data } = await client.query({ + query: gql` + query { + posts { + id + slug + description + imgUrl + imgAlt + author { + id + name + } + } + authors { + id + name + } + } + `, + }) + await cache.set(cacheKey, data) + sourceData = data + } + + // loop through data returned from the api and create Gatsby nodes for them + sourceData.posts.forEach(post => + createNodeFromData(post, POST_NODE_TYPE, helpers) + ) + sourceData.authors.forEach(author => + createNodeFromData(author, AUTHOR_NODE_TYPE, helpers) + ) + + return +} + +/** + * ============================================================================ + * Transform remote file nodes + * ============================================================================ + */ + +exports.onCreateNode = async ({ + actions: { createNode }, + getCache, + createNodeId, + node, +}) => { + // transfrom remote file nodes using Gatsby sharp plugins + // because onCreateNode is called for all nodes, verify that you are only running this code on nodes created by your plugin + if (node.internal.type === POST_NODE_TYPE) { + // create a FileNode in Gatsby that gatsby-transformer-sharp will create optimized images for + const fileNode = await createRemoteFileNode({ + // the url of the remote image to generate a node for + url: node.imgUrl, + getCache, + createNode, + createNodeId, + parentNodeId: node.id, + }) + + if (fileNode) { + // used to add a field `remoteImage` to the Post node from the File node in the schemaCustomization API + node.remoteImage = fileNode.id + + // inference can link these without schemaCustomization like this, but creates a less sturdy schema + // node.remoteImage___NODE = fileNode.id + } + } +} diff --git a/examples/creating-source-plugins/source-plugin/index.js b/examples/creating-source-plugins/source-plugin/index.js new file mode 100644 index 0000000000000..172f1ae6a468c --- /dev/null +++ b/examples/creating-source-plugins/source-plugin/index.js @@ -0,0 +1 @@ +// noop diff --git a/examples/creating-source-plugins/source-plugin/package.json b/examples/creating-source-plugins/source-plugin/package.json new file mode 100644 index 0000000000000..53449361a87c5 --- /dev/null +++ b/examples/creating-source-plugins/source-plugin/package.json @@ -0,0 +1,28 @@ +{ + "name": "source-plugin", + "version": "1.0.0", + "description": "A minimal boilerplate for the essential files Gatsby looks for in a plugin", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "gatsby", + "gatsby-plugin" + ], + "author": "Kyle Gill ", + "license": "MIT", + "dependencies": { + "apollo-cache-inmemory": "^1.6.5", + "apollo-client": "^2.6.8", + "apollo-link": "^1.2.13", + "apollo-link-http": "^1.5.16", + "apollo-link-ws": "^1.0.19", + "apollo-utilities": "^1.3.3", + "gatsby-source-filesystem": "^2.2.2", + "graphql": "^15.0.0", + "graphql-tag": "^2.10.3", + "node-fetch": "^2.6.0", + "ws": "^7.2.3" + } +} diff --git a/package.json b/package.json index 70c0465e96888..3e0502d69e897 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@types/babel__code-frame": "^7.0.1", "@types/bluebird": "^3.5.30", "@types/cache-manager": "^2.10.2", + "@types/common-tags": "^1.8.0", "@types/eslint": "^6.1.8", "@types/express": "^4.17.3", "@types/fast-levenshtein": "^0.0.1", @@ -18,6 +19,8 @@ "@types/lodash": "^4.14.149", "@types/node": "^12.12.30", "@types/node-fetch": "^2.5.5", + "@types/semver": "^7.1.0", + "@types/signal-exit": "^3.0.0", "@types/react": "^16.9.31", "@types/stack-trace": "^0.0.29", "@types/webpack": "^4.41.7", diff --git a/packages/gatsby-cli/CHANGELOG.md b/packages/gatsby-cli/CHANGELOG.md index a8392ff136ed7..00831b5584efc 100644 --- a/packages/gatsby-cli/CHANGELOG.md +++ b/packages/gatsby-cli/CHANGELOG.md @@ -3,6 +3,24 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.11.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.7...gatsby-cli@2.11.8) (2020-04-14) + +### Bug Fixes + +- **gatsby-cli:** Fix console methods incorrectly handling falsy values ([#23021](https://github.com/gatsbyjs/gatsby/issues/23021)) ([66a1b7f](https://github.com/gatsbyjs/gatsby/commit/66a1b7f)) + +## [2.11.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.6...gatsby-cli@2.11.7) (2020-04-10) + +### Bug Fixes + +- **gatsby-cli:** Address an issue that caused empty logs to print undefined ([#23000](https://github.com/gatsbyjs/gatsby/issues/23000)) ([be85f2e](https://github.com/gatsbyjs/gatsby/commit/be85f2e)) + +## [2.11.6](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.5...gatsby-cli@2.11.6) (2020-04-10) + +### Features + +- **gatsby-cli:** allow --recursive git url ([#22747](https://github.com/gatsbyjs/gatsby/issues/22747)) ([f4198e2](https://github.com/gatsbyjs/gatsby/commit/f4198e2)) + ## [2.11.5](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.11.4...gatsby-cli@2.11.5) (2020-04-03) **Note:** Version bump only for package gatsby-cli diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index 33c6763dd20f7..10d3f0633300d 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-cli", "description": "Gatsby command-line interface for creating new sites and running Gatsby commands", - "version": "2.11.5", + "version": "2.11.8", "author": "Kyle Mathews ", "bin": { "gatsby": "lib/index.js" diff --git a/packages/gatsby-cli/src/index.ts b/packages/gatsby-cli/src/index.ts index f215a5f04a257..a08464ba5aed9 100755 --- a/packages/gatsby-cli/src/index.ts +++ b/packages/gatsby-cli/src/index.ts @@ -56,7 +56,7 @@ process.on(`unhandledRejection`, reason => { reason = new Error(util.format(reason)) } - report.panic(`UNHANDLED REJECTION`, reason) + report.panic(`UNHANDLED REJECTION`, reason as Error) }) process.on(`uncaughtException`, error => { diff --git a/packages/gatsby-cli/src/init-starter.ts b/packages/gatsby-cli/src/init-starter.ts index 8ed209a001734..5310cd00e0a0e 100644 --- a/packages/gatsby-cli/src/init-starter.ts +++ b/packages/gatsby-cli/src/init-starter.ts @@ -179,9 +179,14 @@ const clone = async (hostInfo: any, rootPath: string): Promise => { report.info(`Creating new site from git: ${url}`) - const args = [`clone`, ...branch, url, rootPath, `--depth=1`].filter(arg => - Boolean(arg) - ) + const args = [ + `clone`, + ...branch, + url, + rootPath, + `--recursive`, + `--depth=1`, + ].filter(arg => Boolean(arg)) await spawnWithArgs(`git`, args) diff --git a/packages/gatsby-cli/src/reporter/__tests__/index.js b/packages/gatsby-cli/src/reporter/__tests__/index.js index 68ac39f2947e2..b0423ebd15381 100644 --- a/packages/gatsby-cli/src/reporter/__tests__/index.js +++ b/packages/gatsby-cli/src/reporter/__tests__/index.js @@ -1,4 +1,4 @@ -const reporter = require(`../index.js`) +const reporter = require(`../`) const reporterActions = require(`../redux/actions`) // TODO: report.error now DOES return something. Get rid of this spying mocking stuff diff --git a/packages/gatsby-cli/src/reporter/__tests__/patch-console.ts b/packages/gatsby-cli/src/reporter/__tests__/patch-console.ts new file mode 100644 index 0000000000000..72d1cb43127e9 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/__tests__/patch-console.ts @@ -0,0 +1,60 @@ +import { patchConsole } from "../patch-console" +import { reporter as gatsbyReporter } from "../reporter" + +describe(`patchConsole`, () => { + const reporter = { + log: jest.fn(), + warn: jest.fn(), + info: jest.fn(), + } + + patchConsole((reporter as unknown) as typeof gatsbyReporter) + ;[`info`, `log`, `warn`].forEach(method => { + describe(method, () => { + beforeEach(reporter[method].mockReset) + + it(`handles an empty call`, () => { + console[method]() + + expect(reporter[method]).toBeCalledWith(``) + }) + + it(`handles multiple arguments`, () => { + console[method](`foo`, `bar`, `baz`) + + expect(reporter[method]).toBeCalledWith(`foo bar baz`) + }) + + it(`handles formatting`, () => { + console[method](`%s %d`, `bar`, true) + + expect(reporter[method]).toBeCalledWith(`bar 1`) + }) + + it(`handles normal values`, () => { + console[method](1) + console[method](0) + console[method](true) + console[method](false) + console[method]([1, true, false, {}]) + console[method]({ 1: 1, true: true, false: `false`, obj: {} }) + + expect(reporter[method].mock.calls[0][0]).toBe(`1`) + expect(reporter[method].mock.calls[1][0]).toBe(`0`) + expect(reporter[method].mock.calls[2][0]).toBe(`true`) + expect(reporter[method].mock.calls[3][0]).toBe(`false`) + expect(reporter[method].mock.calls[4][0]).toBe(`[ 1, true, false, {} ]`) + expect(reporter[method].mock.calls[5][0]).toBe( + `{ '1': 1, true: true, false: 'false', obj: {} }` + ) + }) + + it(`handles undefined variables`, () => { + let a + console[method](a) + + expect(reporter[method]).toBeCalledWith(``) + }) + }) + }) +}) diff --git a/packages/gatsby-cli/src/reporter/catch-exit-signals.ts b/packages/gatsby-cli/src/reporter/catch-exit-signals.ts new file mode 100644 index 0000000000000..67c54680f50e1 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/catch-exit-signals.ts @@ -0,0 +1,42 @@ +/* + * This module is used to catch if the user kills the gatsby process via cmd+c + * When this happens, there is some clean up logic we need to fire offf + */ +import signalExit from "signal-exit" +import { getStore } from "./redux" +import reporterActions from "./redux/actions" +import { ActivityStatuses } from "./constants" +import { reporter } from "./reporter" + +const interruptActivities = (): void => { + const { activities } = getStore().getState().logs + Object.keys(activities).forEach(activityId => { + const activity = activities[activityId] + if ( + activity.status === ActivityStatuses.InProgress || + activity.status === ActivityStatuses.NotStarted + ) { + reporter.completeActivity(activityId, ActivityStatuses.Interrupted) + } + }) +} + +export const prematureEnd = (): void => { + // hack so at least one activity is surely failed, so + // we are guaranteed to generate FAILED status + // if none of activity did explicitly fail + reporterActions.createPendingActivity({ + id: `panic`, + status: ActivityStatuses.Failed, + }) + + interruptActivities() +} + +export const catchExitSignals = (): void => { + signalExit((code, signal) => { + if (code !== 0 && signal !== `SIGINT` && signal !== `SIGTERM`) + prematureEnd() + else interruptActivities() + }) +} diff --git a/packages/gatsby-cli/src/reporter/index.js b/packages/gatsby-cli/src/reporter/index.js deleted file mode 100644 index 009064fcea216..0000000000000 --- a/packages/gatsby-cli/src/reporter/index.js +++ /dev/null @@ -1,430 +0,0 @@ -// @flow - -const semver = require(`semver`) -const { isCI } = require(`gatsby-core-utils`) -const signalExit = require(`signal-exit`) -const reporterActions = require(`./redux/actions`) - -const { LogLevels, ActivityStatuses, ActivityTypes } = require(`./constants`) - -let inkExists = false -try { - inkExists = require.resolve(`ink`) - // eslint-disable-next-line no-empty -} catch (err) {} - -if (!process.env.GATSBY_LOGGER) { - if ( - inkExists && - semver.satisfies(process.version, `>=8`) && - !isCI() && - typeof jest === `undefined` - ) { - process.env.GATSBY_LOGGER = `ink` - } else { - process.env.GATSBY_LOGGER = `yurnalist` - } -} -// if child process - use ipc logger -if (process.send) { - // process.env.FORCE_COLOR = `0` - - require(`./loggers/ipc`) -} - -if (process.env.GATSBY_LOGGER.includes(`json`)) { - require(`./loggers/json`) -} else if (process.env.GATSBY_LOGGER.includes(`yurnalist`)) { - require(`./loggers/yurnalist`) -} else { - require(`./loggers/ink`) -} - -const util = require(`util`) -const { stripIndent } = require(`common-tags`) -const chalk = require(`chalk`) -const { trackError } = require(`gatsby-telemetry`) -const tracer = require(`opentracing`).globalTracer() - -const { getErrorFormatter } = require(`./errors`) -const { getStore } = require(`./redux`) -import constructError from "../structured-errors/construct-error" - -const errorFormatter = getErrorFormatter() - -import type { ActivityTracker, ActivityArgs, Reporter } from "./types" - -const addMessage = level => text => reporterActions.createLog({ level, text }) - -let isVerbose = false - -const interruptActivities = () => { - const { activities } = getStore().getState().logs - Object.keys(activities).forEach(activityId => { - const activity = activities[activityId] - if ( - activity.status === ActivityStatuses.InProgress || - activity.status === ActivityStatuses.NotStarted - ) { - reporter.completeActivity(activityId, ActivityStatuses.Interrupted) - } - }) -} - -const prematureEnd = () => { - // hack so at least one activity is surely failed, so - // we are guaranteed to generate FAILED status - // if none of activity did explicitly fail - reporterActions.createPendingActivity({ - id: `panic`, - status: ActivityStatuses.Failed, - }) - - interruptActivities() -} - -signalExit((code, signal) => { - if (code !== 0 && signal !== `SIGINT` && signal !== `SIGTERM`) prematureEnd() - else interruptActivities() -}) - -/** - * Reporter module. - * @module reporter - */ -const reporter: Reporter = { - /** - * Strip initial indentation template function. - */ - stripIndent, - format: chalk, - /** - * Toggle verbosity. - * @param {boolean} [_isVerbose=true] - */ - setVerbose: (_isVerbose = true) => { - isVerbose = _isVerbose - }, - /** - * Turn off colors in error output. - * @param {boolean} [isNoColor=false] - */ - setNoColor(isNoColor = false) { - if (isNoColor) { - errorFormatter.withoutColors() - } - - // disables colors in popular terminal output coloring packages - // - chalk: see https://www.npmjs.com/package/chalk#chalksupportscolor - // - ansi-colors: see https://github.com/doowb/ansi-colors/blob/8024126c7115a0efb25a9a0e87bc5e29fd66831f/index.js#L5-L7 - if (isNoColor) { - process.env.FORCE_COLOR = `0` - // chalk determines color level at import time. Before we reach this point, - // chalk was already imported, so we need to retroactively adjust level - chalk.level = 0 - } - }, - /** - * Log arguments and exit process with status 1. - * @param {*} args - */ - panic(...args) { - const error = reporter.error(...args) - trackError(`GENERAL_PANIC`, { error }) - prematureEnd() - process.exit(1) - }, - - panicOnBuild(...args) { - const error = reporter.error(...args) - trackError(`BUILD_PANIC`, { error }) - if (process.env.gatsby_executing_command === `build`) { - prematureEnd() - process.exit(1) - } - return error - }, - - error(errorMeta, error) { - let details = {} - // Many paths to retain backcompat :scream: - if (arguments.length === 2) { - if (Array.isArray(error)) { - return error.map(errorItem => this.error(errorMeta, errorItem)) - } - details.error = error - details.context = { - sourceMessage: errorMeta + ` ` + error.message, - } - } else if (arguments.length === 1 && errorMeta instanceof Error) { - details.error = errorMeta - details.context = { - sourceMessage: errorMeta.message, - } - } else if (arguments.length === 1 && Array.isArray(errorMeta)) { - // when we get an array of messages, call this function once for each error - return errorMeta.map(errorItem => this.error(errorItem)) - } else if (arguments.length === 1 && typeof errorMeta === `object`) { - details = Object.assign({}, errorMeta) - } else if (arguments.length === 1 && typeof errorMeta === `string`) { - details.context = { - sourceMessage: errorMeta, - } - } - - const structuredError = constructError({ details }) - if (structuredError) { - reporterActions.createLog(structuredError) - } - - // TODO: remove this once Error component can render this info - // log formatted stacktrace - if (structuredError.error) { - this.log(errorFormatter.render(structuredError.error)) - } - return structuredError - }, - - /** - * Set prefix on uptime. - * @param {string} prefix - A string to prefix uptime with. - */ - uptime(prefix) { - this.verbose(`${prefix}: ${(process.uptime() * 1000).toFixed(3)}ms`) - }, - - verbose: text => { - if (isVerbose) { - reporterActions.createLog({ - level: LogLevels.Debug, - text, - }) - } - }, - - success: addMessage(LogLevels.Success), - info: addMessage(LogLevels.Info), - warn: addMessage(LogLevels.Warning), - log: addMessage(LogLevels.Log), - - pendingActivity: reporterActions.createPendingActivity, - - completeActivity: (id: string, status: string = ActivityStatuses.Success) => { - reporterActions.endActivity({ id, status }) - }, - - /** - * Time an activity. - * @param {string} text - Name of activity. - * @param {ActivityArgs} activityArgs - optional object with tracer parentSpan - * @returns {ActivityTracker} The activity tracker. - */ - activityTimer( - text: string, - activityArgs: ActivityArgs = {} - ): ActivityTracker { - let { parentSpan, id } = activityArgs - const spanArgs = parentSpan ? { childOf: parentSpan } : {} - if (!id) { - id = text - } - - const span = tracer.startSpan(text, spanArgs) - - return { - start: () => { - reporterActions.startActivity({ - id, - text, - type: ActivityTypes.Spinner, - }) - }, - setStatus: statusText => { - reporterActions.setActivityStatusText({ - id, - statusText, - }) - }, - panicOnBuild(...args) { - span.finish() - - reporterActions.setActivityErrored({ - id, - }) - - return reporter.panicOnBuild(...args) - }, - panic(...args) { - span.finish() - - reporterActions.endActivity({ - id, - status: ActivityStatuses.Failed, - }) - - return reporter.panic(...args) - }, - end() { - span.finish() - - reporterActions.endActivity({ - id, - status: ActivityStatuses.Success, - }) - }, - span, - } - }, - - /** - * Create an Activity that is not visible to the user - * - * During the lifecycle of the Gatsby process, sometimes we need to do some - * async work and wait for it to complete. A typical example of this is a job. - * This work should set the status of the process to `in progress` while running and - * `complete` (or `failure`) when complete. Activities do just this! However, they - * are visible to the user. So this function can be used to create a _hidden_ activity - * that while not displayed in the CLI, still triggers a change in process status. - * - * @param {string} text - Name of activity. - * @param {ActivityArgs} activityArgs - optional object with tracer parentSpan - * @returns {ActivityTracker} The activity tracker. - */ - phantomActivity( - text: string, - activityArgs: ActivityArgs = {} - ): ActivityTracker { - let { parentSpan, id } = activityArgs - const spanArgs = parentSpan ? { childOf: parentSpan } : {} - if (!id) { - id = text - } - - const span = tracer.startSpan(text, spanArgs) - - return { - start: () => { - reporterActions.startActivity({ - id, - text, - type: ActivityTypes.Hidden, - }) - }, - end() { - span.finish() - - reporterActions.endActivity({ - id, - status: ActivityStatuses.Success, - }) - }, - span, - } - }, - - /** - * Create a progress bar for an activity - * @param {string} text - Name of activity. - * @param {number} total - Total items to be processed. - * @param {number} start - Start count to show. - * @param {ActivityArgs} activityArgs - optional object with tracer parentSpan - * @returns {ActivityTracker} The activity tracker. - */ - createProgress( - text: string, - total = 0, - start = 0, - activityArgs: ActivityArgs = {} - ): ActivityTracker { - let { parentSpan, id } = activityArgs - const spanArgs = parentSpan ? { childOf: parentSpan } : {} - if (!id) { - id = text - } - const span = tracer.startSpan(text, spanArgs) - - let lastUpdateTime = 0 - let unflushedProgress = 0 - let unflushedTotal = 0 - const progressUpdateDelay = Math.round(1000 / 10) // 10 fps *shrug* - - const updateProgress = forced => { - const t = Date.now() - if (!forced && t - lastUpdateTime <= progressUpdateDelay) return - - if (unflushedTotal > 0) { - reporterActions.setActivityTotal({ id, total: unflushedTotal }) - unflushedTotal = 0 - } - if (unflushedProgress > 0) { - reporterActions.activityTick({ id, increment: unflushedProgress }) - unflushedProgress = 0 - } - lastUpdateTime = t - } - - return { - start: () => { - reporterActions.startActivity({ - id, - text, - type: ActivityTypes.Progress, - current: start, - total, - }) - }, - setStatus: statusText => { - reporterActions.setActivityStatusText({ - id, - statusText, - }) - }, - tick: (increment = 1) => { - unflushedProgress += increment // Have to manually track this :/ - updateProgress() - }, - panicOnBuild(...args) { - span.finish() - - reporterActions.setActivityErrored({ - id, - }) - - return reporter.panicOnBuild(...args) - }, - panic(...args) { - span.finish() - - reporterActions.endActivity({ - id, - status: ActivityStatuses.Failed, - }) - - return reporter.panic(...args) - }, - done: () => { - updateProgress(true) - span.finish() - reporterActions.endActivity({ - id, - status: ActivityStatuses.Success, - }) - }, - set total(value) { - unflushedTotal = value - updateProgress() - }, - span, - } - }, - // This method was called in older versions of gatsby, so we need to keep it to avoid - // "reporter._setStage is not a function" error when gatsby@<2.16 is used with gatsby-cli@>=2.8 - _setStage() {}, -} - -console.log = (...args) => reporter.log(util.format(...args)) -console.warn = (...args) => reporter.warn(util.format(...args)) -console.info = (...args) => reporter.info(util.format(...args)) -console.error = (...args) => reporter.error(util.format(...args)) - -module.exports = reporter diff --git a/packages/gatsby-cli/src/reporter/index.ts b/packages/gatsby-cli/src/reporter/index.ts new file mode 100644 index 0000000000000..1417ea5e2d44d --- /dev/null +++ b/packages/gatsby-cli/src/reporter/index.ts @@ -0,0 +1,11 @@ +import { startLogger } from "./start-logger" +import { patchConsole } from "./patch-console" +import { catchExitSignals } from "./catch-exit-signals" +import { reporter } from "./reporter" + +catchExitSignals() +startLogger() +patchConsole(reporter) + +export default reporter +module.exports = reporter diff --git a/packages/gatsby-cli/src/reporter/patch-console.ts b/packages/gatsby-cli/src/reporter/patch-console.ts new file mode 100644 index 0000000000000..f10d27e0e96c6 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/patch-console.ts @@ -0,0 +1,24 @@ +/* + * This module is used to patch console through our reporter so we can track + * these logs + */ +import util from "util" +import { reporter as gatsbyReporter } from "./reporter" + +export const patchConsole = (reporter: typeof gatsbyReporter): void => { + console.log = (...args: any[]): void => { + const [format, ...rest] = args + reporter.log(util.format(format === undefined ? `` : format, ...rest)) + } + console.warn = (...args: any[]): void => { + const [format, ...rest] = args + reporter.warn(util.format(format === undefined ? `` : format, ...rest)) + } + console.info = (...args: any[]): void => { + const [format, ...rest] = args + reporter.info(util.format(format === undefined ? `` : format, ...rest)) + } + console.error = (format: any, ...args: any[]): void => { + reporter.error(util.format(format, ...args)) + } +} diff --git a/packages/gatsby-cli/src/reporter/reporter-phantom.ts b/packages/gatsby-cli/src/reporter/reporter-phantom.ts new file mode 100644 index 0000000000000..b052561c91eb9 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/reporter-phantom.ts @@ -0,0 +1,42 @@ +import reporterActions from "./redux/actions" +import { ActivityStatuses, ActivityTypes } from "./constants" +import { Span } from "opentracing" + +interface ICreatePhantomReporterArguments { + text: string + id: string + span: Span +} + +export interface IPhantomReporter { + start(): void + end(): void + span: Span +} + +export const createPhantomReporter = ({ + text, + id, + span, +}: ICreatePhantomReporterArguments): IPhantomReporter => { + return { + start(): void { + reporterActions.startActivity({ + id, + text, + type: ActivityTypes.Hidden, + }) + }, + + end(): void { + span.finish() + + reporterActions.endActivity({ + id, + status: ActivityStatuses.Success, + }) + }, + + span, + } +} diff --git a/packages/gatsby-cli/src/reporter/reporter-progress.ts b/packages/gatsby-cli/src/reporter/reporter-progress.ts new file mode 100644 index 0000000000000..eb0477bb8d177 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/reporter-progress.ts @@ -0,0 +1,122 @@ +import reporterActions from "./redux/actions" +import { ActivityStatuses, ActivityTypes } from "./constants" +import { Span } from "opentracing" +import { reporter as gatsbyReporter } from "./reporter" +import { IStructuredError } from "../structured-errors/types" +import { ErrorMeta } from "./types" + +interface ICreateProgressReporterArguments { + id: string + text: string + start: number + total: number + span: Span + reporter: typeof gatsbyReporter +} + +export interface IProgressReporter { + start(): void + setStatus(statusText: string): void + tick(increment?: number): void + panicOnBuild( + arg: any, + ...otherArgs: any[] + ): IStructuredError | IStructuredError[] + panic(arg: any, ...otherArgs: any[]): void + done(): void + total: number + span: Span +} + +export const createProgressReporter = ({ + id, + text, + start, + total, + span, + reporter, +}: ICreateProgressReporterArguments): IProgressReporter => { + let lastUpdateTime = 0 + let unflushedProgress = 0 + let unflushedTotal = 0 + const progressUpdateDelay = Math.round(1000 / 10) // 10 fps *shrug* + + const updateProgress = (forced: boolean = false): void => { + const t = Date.now() + if (!forced && t - lastUpdateTime <= progressUpdateDelay) return + + if (unflushedTotal > 0) { + reporterActions.setActivityTotal({ id, total: unflushedTotal }) + unflushedTotal = 0 + } + if (unflushedProgress > 0) { + reporterActions.activityTick({ id, increment: unflushedProgress }) + unflushedProgress = 0 + } + lastUpdateTime = t + } + + return { + start(): void { + reporterActions.startActivity({ + id, + text, + type: ActivityTypes.Progress, + current: start, + total, + }) + }, + + setStatus(statusText: string): void { + reporterActions.setActivityStatusText({ + id, + statusText, + }) + }, + + tick(increment: number = 1): void { + unflushedProgress += increment // Have to manually track this :/ + updateProgress() + }, + + panicOnBuild( + errorMeta: ErrorMeta, + error?: Error | Error[] + ): IStructuredError | IStructuredError[] { + span.finish() + + reporterActions.setActivityErrored({ + id, + }) + + return reporter.panicOnBuild(errorMeta, error) + }, + + panic(errorMeta: ErrorMeta, error?: Error | Error[]): void { + span.finish() + + reporterActions.endActivity({ + id, + status: ActivityStatuses.Failed, + }) + + return reporter.panic(errorMeta, error) + }, + + done(): void { + updateProgress(true) + span.finish() + reporterActions.endActivity({ + id, + status: ActivityStatuses.Success, + }) + }, + + set total(value: number) { + unflushedTotal = value + updateProgress() + }, + + span, + } +} diff --git a/packages/gatsby-cli/src/reporter/reporter-timer.ts b/packages/gatsby-cli/src/reporter/reporter-timer.ts new file mode 100644 index 0000000000000..3d19179422fdf --- /dev/null +++ b/packages/gatsby-cli/src/reporter/reporter-timer.ts @@ -0,0 +1,88 @@ +/* + * This module is used when calling reporter. + * these logs + */ +import reporterActions from "./redux/actions" +import { ActivityStatuses, ActivityTypes } from "./constants" +import { Span } from "opentracing" +import { reporter as gatsbyReporter } from "./reporter" +import { IStructuredError } from "../structured-errors/types" +import { ErrorMeta } from "./types" + +interface ICreateTimerReporterArguments { + text: string + id: string + span: Span + reporter: typeof gatsbyReporter +} + +export interface ITimerReporter { + start(): void + setStatus(statusText: string): void + panicOnBuild( + arg: any, + ...otherArgs: any[] + ): IStructuredError | IStructuredError[] + panic(arg: any, ...otherArgs: any[]): void + end(): void + span: Span +} + +export const createTimerReporter = ({ + text, + id, + span, + reporter, +}: ICreateTimerReporterArguments): ITimerReporter => { + return { + start(): void { + reporterActions.startActivity({ + id, + text, + type: ActivityTypes.Spinner, + }) + }, + + setStatus(statusText: string): void { + reporterActions.setActivityStatusText({ + id, + statusText, + }) + }, + + panicOnBuild( + errorMeta: ErrorMeta, + error?: Error | Error[] + ): IStructuredError | IStructuredError[] { + span.finish() + + reporterActions.setActivityErrored({ + id, + }) + + return reporter.panicOnBuild(errorMeta, error) + }, + + panic(errorMeta: ErrorMeta, error?: Error | Error[]): void { + span.finish() + + reporterActions.endActivity({ + id, + status: ActivityStatuses.Failed, + }) + + return reporter.panic(errorMeta, error) + }, + + end(): void { + span.finish() + + reporterActions.endActivity({ + id, + status: ActivityStatuses.Success, + }) + }, + + span, + } +} diff --git a/packages/gatsby-cli/src/reporter/reporter.ts b/packages/gatsby-cli/src/reporter/reporter.ts new file mode 100644 index 0000000000000..87be5a5b65f35 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/reporter.ts @@ -0,0 +1,259 @@ +import { stripIndent } from "common-tags" +import chalk from "chalk" +import { trackError } from "gatsby-telemetry" +import { globalTracer, Span } from "opentracing" + +import reporterActions from "./redux/actions" +import { LogLevels, ActivityStatuses } from "./constants" +import { getErrorFormatter } from "./errors" +import constructError from "../structured-errors/construct-error" +import { prematureEnd } from "./catch-exit-signals" +import { IStructuredError } from "../structured-errors/types" +import { createTimerReporter, ITimerReporter } from "./reporter-timer" +import { createPhantomReporter, IPhantomReporter } from "./reporter-phantom" +import { createProgressReporter, IProgressReporter } from "./reporter-progress" +import { ErrorMeta, CreateLogAction } from "./types" + +const errorFormatter = getErrorFormatter() +const tracer = globalTracer() + +interface IActivityArgs { + id?: string + parentSpan?: Span +} + +let isVerbose = false + +/** + * Reporter module. + * @module reporter + */ +class Reporter { + /** + * Strip initial indentation template function. + */ + stripIndent = stripIndent + format = chalk + + /** + * Toggle verbosity. + */ + setVerbose = (_isVerbose: boolean = true): void => { + isVerbose = _isVerbose + } + + /** + * Turn off colors in error output. + */ + setNoColor = (isNoColor: boolean = false): void => { + if (isNoColor) { + errorFormatter.withoutColors() + } + + // disables colors in popular terminal output coloring packages + // - chalk: see https://www.npmjs.com/package/chalk#chalksupportscolor + // - ansi-colors: see https://github.com/doowb/ansi-colors/blob/8024126c7115a0efb25a9a0e87bc5e29fd66831f/index.js#L5-L7 + if (isNoColor) { + process.env.FORCE_COLOR = `0` + // chalk determines color level at import time. Before we reach this point, + // chalk was already imported, so we need to retroactively adjust level + chalk.level = 0 + } + } + + /** + * Log arguments and exit process with status 1. + */ + panic = (errorMeta: ErrorMeta, error?: Error | Error[]): void => { + const reporterError = this.error(errorMeta, error) + trackError(`GENERAL_PANIC`, { error: reporterError }) + prematureEnd() + process.exit(1) + } + + panicOnBuild = ( + errorMeta: ErrorMeta, + error?: Error | Error[] + ): IStructuredError | IStructuredError[] => { + const reporterError = this.error(errorMeta, error) + trackError(`BUILD_PANIC`, { error: reporterError }) + if (process.env.gatsby_executing_command === `build`) { + prematureEnd() + process.exit(1) + } + return reporterError + } + + error = ( + errorMeta: ErrorMeta, + error?: Error | Error[] + ): IStructuredError | IStructuredError[] => { + let details: { + error?: Error + context: {} + } = { + context: {}, + } + + // Many paths to retain backcompat :scream: + // 1. + // reporter.error(any, Error); + // reporter.error(any, [Error]); + if (error) { + if (Array.isArray(error)) { + return error.map(errorItem => + this.error(errorMeta, errorItem) + ) as IStructuredError[] + } + details.error = error + details.context = { + sourceMessage: errorMeta + ` ` + error.message, + } + // 2. + // reporter.error(Error); + } else if (errorMeta instanceof Error) { + details.error = errorMeta + details.context = { + sourceMessage: errorMeta.message, + } + // 3. + // reporter.error([Error]); + } else if (Array.isArray(errorMeta)) { + // when we get an array of messages, call this function once for each error + return errorMeta.map(errorItem => + this.error(errorItem) + ) as IStructuredError[] + // 4. + // reporter.error(errorMeta); + } else if (typeof errorMeta === `object`) { + details = { ...errorMeta } + // 5. + // reporter.error('foo'); + } else if (typeof errorMeta === `string`) { + details.context = { + sourceMessage: errorMeta, + } + } + + const structuredError = constructError({ details }) + if (structuredError) { + reporterActions.createLog(structuredError) + } + + // TODO: remove this once Error component can render this info + // log formatted stacktrace + if (structuredError.error) { + this.log(errorFormatter.render(structuredError.error)) + } + return structuredError + } + + /** + * Set prefix on uptime. + */ + uptime = (prefix: string): void => { + this.verbose(`${prefix}: ${(process.uptime() * 1000).toFixed(3)}ms`) + } + + verbose = (text: string): void => { + if (isVerbose) { + reporterActions.createLog({ + level: LogLevels.Debug, + text, + }) + } + } + + success = (text?: string): CreateLogAction => + reporterActions.createLog({ level: LogLevels.Success, text }) + info = (text?: string): CreateLogAction => + reporterActions.createLog({ level: LogLevels.Info, text }) + warn = (text?: string): CreateLogAction => + reporterActions.createLog({ level: LogLevels.Warning, text }) + log = (text?: string): CreateLogAction => + reporterActions.createLog({ level: LogLevels.Log, text }) + + pendingActivity = reporterActions.createPendingActivity + + completeActivity = ( + id: string, + status: ActivityStatuses = ActivityStatuses.Success + ): void => { + reporterActions.endActivity({ id, status }) + } + + /** + * Time an activity. + */ + activityTimer = ( + text: string, + activityArgs: IActivityArgs = {} + ): ITimerReporter => { + let { parentSpan, id } = activityArgs + const spanArgs = parentSpan ? { childOf: parentSpan } : {} + if (!id) { + id = text + } + + const span = tracer.startSpan(text, spanArgs) + + return createTimerReporter({ text, id, span, reporter: this }) + } + + /** + * Create an Activity that is not visible to the user + * + * During the lifecycle of the Gatsby process, sometimes we need to do some + * async work and wait for it to complete. A typical example of this is a job. + * This work should set the status of the process to `in progress` while running and + * `complete` (or `failure`) when complete. Activities do just this! However, they + * are visible to the user. So this function can be used to create a _hidden_ activity + * that while not displayed in the CLI, still triggers a change in process status. + */ + phantomActivity = ( + text: string, + activityArgs: IActivityArgs = {} + ): IPhantomReporter => { + let { parentSpan, id } = activityArgs + const spanArgs = parentSpan ? { childOf: parentSpan } : {} + if (!id) { + id = text + } + + const span = tracer.startSpan(text, spanArgs) + + return createPhantomReporter({ id, text, span }) + } + + /** + * Create a progress bar for an activity + */ + createProgress = ( + text: string, + total = 0, + start = 0, + activityArgs: IActivityArgs = {} + ): IProgressReporter => { + let { parentSpan, id } = activityArgs + const spanArgs = parentSpan ? { childOf: parentSpan } : {} + if (!id) { + id = text + } + const span = tracer.startSpan(text, spanArgs) + + return createProgressReporter({ + id, + text, + total, + start, + span, + reporter: this, + }) + } + + // This method was called in older versions of gatsby, so we need to keep it to avoid + // "reporter._setStage is not a function" error when gatsby@<2.16 is used with gatsby-cli@>=2.8 + _setStage = (): void => {} +} + +export const reporter = new Reporter() diff --git a/packages/gatsby-cli/src/reporter/start-logger.ts b/packages/gatsby-cli/src/reporter/start-logger.ts new file mode 100644 index 0000000000000..bb6166fb0cee9 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/start-logger.ts @@ -0,0 +1,40 @@ +/* + * This module is a side-effect filled module to load in the proper logger. + */ +import semver from "semver" +import { isCI } from "gatsby-core-utils" + +export const startLogger = (): void => { + let inkExists = false + try { + inkExists = !!require.resolve(`ink`) + // eslint-disable-next-line no-empty + } catch (err) {} + + if (!process.env.GATSBY_LOGGER) { + if ( + inkExists && + semver.satisfies(process.version, `>=8`) && + !isCI() && + typeof jest === `undefined` + ) { + process.env.GATSBY_LOGGER = `ink` + } else { + process.env.GATSBY_LOGGER = `yurnalist` + } + } + // if child process - use ipc logger + if (process.send) { + // process.env.FORCE_COLOR = `0` + + require(`./loggers/ipc`) + } + + if (process.env.GATSBY_LOGGER.includes(`json`)) { + require(`./loggers/json`) + } else if (process.env.GATSBY_LOGGER.includes(`yurnalist`)) { + require(`./loggers/yurnalist`) + } else { + require(`./loggers/ink`) + } +} diff --git a/packages/gatsby-cli/src/reporter/types.js b/packages/gatsby-cli/src/reporter/types.js deleted file mode 100644 index e0131dbc55965..0000000000000 --- a/packages/gatsby-cli/src/reporter/types.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow - -export type ActivityTracker = { - start(): Function, - end(): Function, - setStatus(status: string): Function, - span: Object, -} - -export type ActivityArgs = { - parentSpan?: Object, -} - -type LogMessageType = (format: string, ...args: Array) => void - -export interface Reporter { - stripIndent: Function; - format: Object; - setVerbose(isVerbose: boolean): void; - setNoColor(isNoColor: boolean): void; - panic(...args: Array): void; - panicOnBuild(...args: Array): void; - error(errorMeta: string | Object, error?: Object): void; - uptime(prefix: string): void; - success: LogMessageType; - verbose: LogMessageType; - info: LogMessageType; - warn: LogMessageType; - log: LogMessageType; - activityTimer(name: string, activityArgs: ActivityArgs): ActivityTracker; -} diff --git a/packages/gatsby-cli/src/reporter/types.ts b/packages/gatsby-cli/src/reporter/types.ts new file mode 100644 index 0000000000000..7a97a7118b832 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/types.ts @@ -0,0 +1,12 @@ +// TODO: This needs to be implemented when redux/acitons is converted to TS +export type CreateLogAction = any + +export type ErrorMeta = + | { + id: string + error?: Error + context: Record + [id: string]: any + } + | string + | Error diff --git a/packages/gatsby-plugin-fullstory/CHANGELOG.md b/packages/gatsby-plugin-fullstory/CHANGELOG.md index 100ebfc71327d..c78663b3ceb69 100644 --- a/packages/gatsby-plugin-fullstory/CHANGELOG.md +++ b/packages/gatsby-plugin-fullstory/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-fullstory@2.2.1...gatsby-plugin-fullstory@2.2.2) (2020-04-14) + +### Bug Fixes + +- **gatsby-plugin-fullstory:** Updated to Edge URL + Add Update… ([#23089](https://github.com/gatsbyjs/gatsby/issues/23089)) ([843cf3a](https://github.com/gatsbyjs/gatsby/commit/843cf3a)), closes [#23088](https://github.com/gatsbyjs/gatsby/issues/23088) + ## [2.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-fullstory@2.2.0...gatsby-plugin-fullstory@2.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-fullstory diff --git a/packages/gatsby-plugin-fullstory/package.json b/packages/gatsby-plugin-fullstory/package.json index 5f7a2cfa248a8..55855af082567 100644 --- a/packages/gatsby-plugin-fullstory/package.json +++ b/packages/gatsby-plugin-fullstory/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-fullstory", - "version": "2.2.1", + "version": "2.2.2", "description": "Plugin to add the tracking code for Fullstory.com", "main": "index.js", "scripts": { diff --git a/packages/gatsby-plugin-fullstory/src/__tests__/__snapshots__/gatsby-ssr.js.snap b/packages/gatsby-plugin-fullstory/src/__tests__/__snapshots__/gatsby-ssr.js.snap index c5abc86c05878..9bb812c868d87 100644 --- a/packages/gatsby-plugin-fullstory/src/__tests__/__snapshots__/gatsby-ssr.js.snap +++ b/packages/gatsby-plugin-fullstory/src/__tests__/__snapshots__/gatsby-ssr.js.snap @@ -10,7 +10,7 @@ Array [ "__html": " window['_fs_debug'] = false; window['_fs_host'] = 'fullstory.com'; -window['_fs_script'] = 'fullstory.com/s/fs.js'; +window['_fs_script'] = 'edge.fullstory.com/s/fs.js'; window['_fs_org'] = 'test-org'; window['_fs_namespace'] = 'FS'; (function(m,n,e,t,l,o,g,y){ @@ -19,11 +19,15 @@ window['_fs_namespace'] = 'FS'; o=n.createElement(t);o.async=1;o.crossOrigin='anonymous';o.src='https://'+_fs_script; y=n.getElementsByTagName(t)[0];y.parentNode.insertBefore(o,y); g.identify=function(i,v,s){g(l,{uid:i},s);if(v)g(l,v,s)};g.setUserVars=function(v,s){g(l,v,s)};g.event=function(i,v,s){g('event',{n:i,p:v},s)}; + g.anonymize=function(){g.identify(!!0)}; g.shutdown=function(){g(\\"rec\\",!1)};g.restart=function(){g(\\"rec\\",!0)}; - g.log = function(a,b) { g(\\"log\\", [a,b]) }; + g.log = function(a,b){g(\\"log\\",[a,b])}; g.consent=function(a){g(\\"consent\\",!arguments.length||a)}; g.identifyAccount=function(i,v){o='account';v=v||{};v.acctId=i;g(o,v)}; g.clearUserCookie=function(){}; + g._w={};y='XMLHttpRequest';g._w[y]=m[y];y='fetch';g._w[y]=m[y]; + if(m[y])m[y]=function(){return g._w[y].apply(this,arguments)}; + g._v=\\"1.2.0\\"; })(window,document,window['_fs_namespace'],'script','user'); ", } diff --git a/packages/gatsby-plugin-fullstory/src/gatsby-ssr.js b/packages/gatsby-plugin-fullstory/src/gatsby-ssr.js index 759645d98eab7..da3c4b444cf19 100644 --- a/packages/gatsby-plugin-fullstory/src/gatsby-ssr.js +++ b/packages/gatsby-plugin-fullstory/src/gatsby-ssr.js @@ -9,7 +9,7 @@ export const onRenderBody = ({ setHeadComponents }, pluginOptions) => { __html: ` window['_fs_debug'] = false; window['_fs_host'] = 'fullstory.com'; -window['_fs_script'] = 'fullstory.com/s/fs.js'; +window['_fs_script'] = 'edge.fullstory.com/s/fs.js'; window['_fs_org'] = '${pluginOptions.fs_org}'; window['_fs_namespace'] = 'FS'; (function(m,n,e,t,l,o,g,y){ @@ -18,11 +18,15 @@ window['_fs_namespace'] = 'FS'; o=n.createElement(t);o.async=1;o.crossOrigin='anonymous';o.src='https://'+_fs_script; y=n.getElementsByTagName(t)[0];y.parentNode.insertBefore(o,y); g.identify=function(i,v,s){g(l,{uid:i},s);if(v)g(l,v,s)};g.setUserVars=function(v,s){g(l,v,s)};g.event=function(i,v,s){g('event',{n:i,p:v},s)}; + g.anonymize=function(){g.identify(!!0)}; g.shutdown=function(){g("rec",!1)};g.restart=function(){g("rec",!0)}; - g.log = function(a,b) { g("log", [a,b]) }; + g.log = function(a,b){g("log",[a,b])}; g.consent=function(a){g("consent",!arguments.length||a)}; g.identifyAccount=function(i,v){o='account';v=v||{};v.acctId=i;g(o,v)}; g.clearUserCookie=function(){}; + g._w={};y='XMLHttpRequest';g._w[y]=m[y];y='fetch';g._w[y]=m[y]; + if(m[y])m[y]=function(){return g._w[y].apply(this,arguments)}; + g._v="1.2.0"; })(window,document,window['_fs_namespace'],'script','user'); `, }} diff --git a/packages/gatsby-plugin-mdx/CHANGELOG.md b/packages/gatsby-plugin-mdx/CHANGELOG.md index 4e2e592fd360b..1b227a566c288 100644 --- a/packages/gatsby-plugin-mdx/CHANGELOG.md +++ b/packages/gatsby-plugin-mdx/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.1.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-mdx@1.1.6...gatsby-plugin-mdx@1.1.7) (2020-04-10) + +### Bug Fixes + +- **gatsby-plugin-mdx:** Truncate non-latin language excerpts correctly ([#22638](https://github.com/gatsbyjs/gatsby/issues/22638)) ([ec80671](https://github.com/gatsbyjs/gatsby/commit/ec80671)) + ## [1.1.6](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-mdx@1.1.5...gatsby-plugin-mdx@1.1.6) (2020-04-07) ### Bug Fixes diff --git a/packages/gatsby-plugin-mdx/README.md b/packages/gatsby-plugin-mdx/README.md index e84135696b459..ebadfca7cec7e 100644 --- a/packages/gatsby-plugin-mdx/README.md +++ b/packages/gatsby-plugin-mdx/README.md @@ -562,6 +562,22 @@ export const pageQuery = graphql` ` ``` +## Troubleshooting + +### Excerpts for non-latin languages + +By default, `excerpt` uses `underscore.string/prune` which doesn't handle non-latin characters ([https://github.com/epeli/underscore.string/issues/418](https://github.com/epeli/underscore.string/issues/418)). + +If that is the case, you can set `truncate` option on `excerpt` field, like: + +```graphql +{ + markdownRemark { + excerpt(truncate: true) + } +} +``` + ## License MIT diff --git a/packages/gatsby-plugin-mdx/gatsby/source-nodes.js b/packages/gatsby-plugin-mdx/gatsby/source-nodes.js index e22e5dc0a0a6a..04063f32f2a34 100644 --- a/packages/gatsby-plugin-mdx/gatsby/source-nodes.js +++ b/packages/gatsby-plugin-mdx/gatsby/source-nodes.js @@ -1,4 +1,5 @@ const _ = require(`lodash`) +const { GraphQLBoolean } = require(`gatsby/graphql`) const remark = require(`remark`) const english = require(`retext-english`) const remark2retext = require(`remark-retext`) @@ -151,8 +152,12 @@ module.exports = ( type: `Int`, defaultValue: 140, }, + truncate: { + type: GraphQLBoolean, + defaultValue: false, + }, }, - async resolve(mdxNode, { pruneLength }) { + async resolve(mdxNode, { pruneLength, truncate }) { if (mdxNode.excerpt) { return Promise.resolve(mdxNode.excerpt) } @@ -166,7 +171,14 @@ module.exports = ( return }) - return prune(excerptNodes.join(` `), pruneLength, `…`) + if (!truncate) { + return prune(excerptNodes.join(` `), pruneLength, `…`) + } + + return _.truncate(excerptNodes.join(` `), { + length: pruneLength, + omission: `…`, + }) }, }, headings: { diff --git a/packages/gatsby-plugin-mdx/package.json b/packages/gatsby-plugin-mdx/package.json index c4dd73eed21c9..99dfaefc4f21b 100644 --- a/packages/gatsby-plugin-mdx/package.json +++ b/packages/gatsby-plugin-mdx/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-mdx", - "version": "1.1.6", + "version": "1.1.7", "description": "MDX integration for Gatsby", "main": "index.js", "license": "MIT", diff --git a/packages/gatsby-plugin-react-helmet/CHANGELOG.md b/packages/gatsby-plugin-react-helmet/CHANGELOG.md index 31c5c8978630e..f6dd327340ae9 100644 --- a/packages/gatsby-plugin-react-helmet/CHANGELOG.md +++ b/packages/gatsby-plugin-react-helmet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-react-helmet@3.2.1...gatsby-plugin-react-helmet@3.2.2) (2020-04-10) + +### Bug Fixes + +- **gatsby-plugin-react-helmet:** allow the use of `react-helmet@6` ([#22993](https://github.com/gatsbyjs/gatsby/issues/22993)) ([ed2762f](https://github.com/gatsbyjs/gatsby/commit/ed2762f)) + ## [3.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-react-helmet@3.2.0...gatsby-plugin-react-helmet@3.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-react-helmet diff --git a/packages/gatsby-plugin-react-helmet/package.json b/packages/gatsby-plugin-react-helmet/package.json index e38c12715069a..c7f42cf1db541 100644 --- a/packages/gatsby-plugin-react-helmet/package.json +++ b/packages/gatsby-plugin-react-helmet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-react-helmet", "description": "Manage document head data with react-helmet. Provides drop-in server rendering support for Gatsby.", - "version": "3.2.1", + "version": "3.2.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -36,7 +36,7 @@ "main": "index.js", "peerDependencies": { "gatsby": "^2.0.0", - "react-helmet": "^5.1.3" + "react-helmet": "^5.1.3 || ^6.0.0" }, "repository": { "type": "git", diff --git a/packages/gatsby-plugin-sitemap/CHANGELOG.md b/packages/gatsby-plugin-sitemap/CHANGELOG.md index ccca8926378b1..291cb26cbd6f6 100644 --- a/packages/gatsby-plugin-sitemap/CHANGELOG.md +++ b/packages/gatsby-plugin-sitemap/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-sitemap@2.3.1...gatsby-plugin-sitemap@2.3.2) (2020-04-14) + +### Bug Fixes + +- **plugin-sitemap:** missing data in query results ([#22843](https://github.com/gatsbyjs/gatsby/issues/22843)) ([cff1d7f](https://github.com/gatsbyjs/gatsby/commit/cff1d7f)), closes [#22703](https://github.com/gatsbyjs/gatsby/issues/22703) + ## [2.3.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-sitemap@2.3.0...gatsby-plugin-sitemap@2.3.1) (2020-03-23) **Note:** Version bump only for package gatsby-plugin-sitemap diff --git a/packages/gatsby-plugin-sitemap/package.json b/packages/gatsby-plugin-sitemap/package.json index 9832f1809401b..09277f50e83b1 100644 --- a/packages/gatsby-plugin-sitemap/package.json +++ b/packages/gatsby-plugin-sitemap/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sitemap", "description": "Gatsby plugin that automatically creates a sitemap for your site", - "version": "2.3.1", + "version": "2.3.2", "author": "Nicholas Young <nicholas@nicholaswyoung.com>", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-sitemap/src/__tests__/internals.js b/packages/gatsby-plugin-sitemap/src/__tests__/internals.js index 8b047261d2c74..7a8b5652f25be 100644 --- a/packages/gatsby-plugin-sitemap/src/__tests__/internals.js +++ b/packages/gatsby-plugin-sitemap/src/__tests__/internals.js @@ -137,6 +137,16 @@ describe(`results using non default alternatives`, () => { }, ], }, + otherData: { + nodes: [ + { + name: `test`, + }, + { + name: `test 2`, + }, + ], + }, }, } } @@ -161,5 +171,6 @@ describe(`results using non default alternatives`, () => { const queryRecords = filterQuery(results, [], ``, customSiteResolver) expect(queryRecords.site.siteMetadata.siteUrl).toEqual(customUrl) + expect(queryRecords).toHaveProperty(`otherData`) }) }) diff --git a/packages/gatsby-plugin-sitemap/src/internals.js b/packages/gatsby-plugin-sitemap/src/internals.js index 8e61b4afec0cc..7b5a8356a8425 100644 --- a/packages/gatsby-plugin-sitemap/src/internals.js +++ b/packages/gatsby-plugin-sitemap/src/internals.js @@ -20,7 +20,9 @@ export function filterQuery( throw new Error(errors.join(`, `)) } - let { allPages, originalType } = getNodes(data.allSitePage) + const { allSitePage, ...otherData } = data + + let { allPages, originalType } = getNodes(allSitePage) // Removing excluded paths allPages = allPages.filter( @@ -53,6 +55,7 @@ export function filterQuery( siteUrl = withoutTrailingSlash(siteUrl) return { + ...otherData, allSitePage: { [originalType]: originalType === `nodes` diff --git a/packages/gatsby-remark-embed-snippet/CHANGELOG.md b/packages/gatsby-remark-embed-snippet/CHANGELOG.md index 042457e287261..a748cc1e70d1f 100644 --- a/packages/gatsby-remark-embed-snippet/CHANGELOG.md +++ b/packages/gatsby-remark-embed-snippet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-embed-snippet@4.2.1...gatsby-remark-embed-snippet@4.2.2) (2020-04-11) + +### Features + +- **remark-embed-snippet:** embed specific lines ([#21907](https://github.com/gatsbyjs/gatsby/issues/21907)) ([109b905](https://github.com/gatsbyjs/gatsby/commit/109b905)) + ## [4.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-embed-snippet@4.2.0...gatsby-remark-embed-snippet@4.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-remark-embed-snippet diff --git a/packages/gatsby-remark-embed-snippet/README.md b/packages/gatsby-remark-embed-snippet/README.md index 2e34e16a62f11..f1568b03c06fc 100644 --- a/packages/gatsby-remark-embed-snippet/README.md +++ b/packages/gatsby-remark-embed-snippet/README.md @@ -185,9 +185,8 @@ The resulting HTML generated from the markdown file above would look something l ### Highlighting Lines -You can also specify specific lines for Prism to highlight using -`highlight-line` and `highlight-next-line` comments. You can also specify a -range of lines to highlight, relative to a `highlight-range` comment. +You can specify specific lines for Prism to highlight using +`highlight-line` and `highlight-next-line` comments. You can also specify a range of lines to highlight, relative to a `highlight-range` comment. **JavaScript example**: @@ -250,8 +249,49 @@ quz: "highlighted" It's also possible to specify a range of lines to be hidden. +You can either specify line ranges in the embed using the syntax: + +- #Lx - Embed one line from a file +- #Lx-y - Embed a range of lines from a file +- #Lx-y,a-b - Embed non-consecutive ranges of lines from a file + +**Markdown example**: + +```markdown +This is the JSX of my app: + +`embed:App.js#L6-8` +``` + +With this example snippet: + +```js +import React from "react" +import ReactDOM from "react-dom" + +function App() { + return ( +

    +

    Hello world

    +
    + ) +} +``` + +Will produce something like this: + +```markdown +This is the JSX of my app: + +
    +

    Hello world

    +
    +``` + **JavaScript example**: +You can also add `// hide-range` comments to your files. + ```jsx // hide-range{1-2} import React from "react" diff --git a/packages/gatsby-remark-embed-snippet/package.json b/packages/gatsby-remark-embed-snippet/package.json index 15862533f3f20..750f64af93a3c 100644 --- a/packages/gatsby-remark-embed-snippet/package.json +++ b/packages/gatsby-remark-embed-snippet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-embed-snippet", "description": "Gatsby plugin to embed formatted code snippets within markdown", - "version": "4.2.1", + "version": "4.2.2", "author": "Brian Vaughn ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-remark-embed-snippet/src/__tests__/index.js b/packages/gatsby-remark-embed-snippet/src/__tests__/index.js index a1c1fca9e2831..65bac278bbd0b 100644 --- a/packages/gatsby-remark-embed-snippet/src/__tests__/index.js +++ b/packages/gatsby-remark-embed-snippet/src/__tests__/index.js @@ -36,6 +36,56 @@ describe(`gatsby-remark-embed-snippet`, () => { ) }) + it(`should display a code block of a single line`, () => { + const codeBlockValue = ` console.log('hello world')` + fs.readFileSync.mockReturnValue(`function test() { +${codeBlockValue} +}`) + + const markdownAST = remark.parse(`\`embed:hello-world.js#L2\``) + const transformed = plugin({ markdownAST }, { directory: `examples` }) + + const codeBlock = transformed.children[0].children[0] + + expect(codeBlock.value).toEqual(codeBlockValue) + }) + + it(`should display a code block of a range of lines`, () => { + const codeBlockValue = ` if (window.location.search.indexOf('query') > -1) { + console.log('The user is searching') +}` + fs.readFileSync.mockReturnValue(`function test() { +${codeBlockValue} +}`) + + const markdownAST = remark.parse(`\`embed:hello-world.js#L2-4\``) + const transformed = plugin({ markdownAST }, { directory: `examples` }) + + const codeBlock = transformed.children[0].children[0] + + expect(codeBlock.value).toEqual(codeBlockValue) + }) + + it(`should display a code block of a range of non-consecutive lines`, () => { + const notInSnippet = `lineShouldNotBeInSnippet();` + fs.readFileSync.mockReturnValue(`function test() { + if (window.location.search.indexOf('query') > -1) { + console.log('The user is searching') + } +} +${notInSnippet} +window.addEventListener('resize', () => { + test(); +})`) + + const markdownAST = remark.parse(`\`embed:hello-world.js#L2-4,7-9\``) + const transformed = plugin({ markdownAST }, { directory: `examples` }) + + const codeBlock = transformed.children[0].children[0] + + expect(codeBlock.value).not.toContain(notInSnippet) + }) + it(`should error if an invalid file path is specified`, () => { fs.existsSync.mockImplementation(path => path !== `examples/hello-world.js`) diff --git a/packages/gatsby-remark-embed-snippet/src/index.js b/packages/gatsby-remark-embed-snippet/src/index.js index dd9fec7dcdd92..c5fcb8d6ff9a4 100644 --- a/packages/gatsby-remark-embed-snippet/src/index.js +++ b/packages/gatsby-remark-embed-snippet/src/index.js @@ -4,6 +4,7 @@ const path = require(`path`) const fs = require(`fs`) const normalizePath = require(`normalize-path`) const visit = require(`unist-util-visit`) +const rangeParser = require(`parse-numeric-range`) // Language defaults to extension.toLowerCase(); // This map tracks languages that don't match their extension. @@ -46,13 +47,33 @@ module.exports = ({ markdownAST, markdownNode }, { directory } = {}) => { if (value.startsWith(`embed:`)) { const file = value.substr(6) - const snippetPath = normalizePath(path.join(directory, file)) + let snippetPath = normalizePath(path.join(directory, file)) + + // Embed specific lines numbers of a file + let lines = [] + const rangePrefixIndex = snippetPath.indexOf(`#L`) + if (rangePrefixIndex > -1) { + const range = snippetPath.slice(rangePrefixIndex + 2) + if (range.length === 1) { + lines = [Number.parseInt(range, 10)] + } else { + lines = rangeParser.parse(range) + } + // Remove everything after the range prefix from file path + snippetPath = snippetPath.slice(0, rangePrefixIndex) + } if (!fs.existsSync(snippetPath)) { throw Error(`Invalid snippet specified; no such file "${snippetPath}"`) } - const code = fs.readFileSync(snippetPath, `utf8`).trim() + let code = fs.readFileSync(snippetPath, `utf8`).trim() + if (lines.length) { + code = code + .split(`\n`) + .filter((_, lineNumber) => lines.includes(lineNumber + 1)) + .join(`\n`) + } // PrismJS's theme styles are targeting pre[class*="language-"] // to apply its styles. We do the same here so that users @@ -60,7 +81,7 @@ module.exports = ({ markdownAST, markdownNode }, { directory } = {}) => { // outcome without any additional CSS. // // @see https://github.com/PrismJS/prism/blob/1d5047df37aacc900f8270b1c6215028f6988eb1/themes/prism.css#L49-L54 - const language = getLanguage(file) + const language = getLanguage(snippetPath) // Change the node type to code, insert our file as value and set language. node.type = `code` diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index fbd96ff044527..4d4deb18e7461 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.4.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-drupal@3.4.2...gatsby-source-drupal@3.4.3) (2020-04-10) + +### Bug Fixes + +- **gatsby-source-drupal:** Verify nodes exist before looping through them ([#22898](https://github.com/gatsbyjs/gatsby/issues/22898)) ([cdbe734](https://github.com/gatsbyjs/gatsby/commit/cdbe734)) + ## [3.4.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-drupal@3.4.1...gatsby-source-drupal@3.4.2) (2020-03-23) **Note:** Version bump only for package gatsby-source-drupal diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index 8416ff92bfce2..77c3868d5ffac 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.4.2", + "version": "3.4.3", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-drupal/src/utils.js b/packages/gatsby-source-drupal/src/utils.js index 44cf6e110d66a..ba8020c98c783 100644 --- a/packages/gatsby-source-drupal/src/utils.js +++ b/packages/gatsby-source-drupal/src/utils.js @@ -147,10 +147,10 @@ const handleWebhookUpdate = async ( nodesToUpdate.push(...addedReferencedNodes) } else { // if we are inserting new node, we need to update all referenced nodes - const newNodeReferencedNodes = referencedNodesLookup - .get(newNode) - .map(id => getNode(id)) - nodesToUpdate.push(...newNodeReferencedNodes) + const newNodes = referencedNodesLookup.get(newNode) + if (typeof newNodes !== `undefined`) { + newNodes.forEach(id => nodesToUpdate.push(getNode(id))) + } } // download file diff --git a/packages/gatsby-source-graphql/CHANGELOG.md b/packages/gatsby-source-graphql/CHANGELOG.md index c2cd2581bccb6..ac5b6f24e95e7 100644 --- a/packages/gatsby-source-graphql/CHANGELOG.md +++ b/packages/gatsby-source-graphql/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.4.0](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.3.2...gatsby-source-graphql@2.4.0) (2020-04-14) + +**Note:** Version bump only for package gatsby-source-graphql + ## [2.3.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.3.1...gatsby-source-graphql@2.3.2) (2020-04-06) ### Bug Fixes diff --git a/packages/gatsby-source-graphql/package.json b/packages/gatsby-source-graphql/package.json index 1345e4e467375..8b3c007ab6d54 100644 --- a/packages/gatsby-source-graphql/package.json +++ b/packages/gatsby-source-graphql/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-graphql", "description": "Gatsby plugin which adds a third-party GraphQL API to Gatsby GraphQL", - "version": "2.3.2", + "version": "2.4.0", "author": "Mikhail Novikov ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "apollo-link-http": "^1.5.16", "dataloader": "^2.0.0", "graphql": "^14.6.0", - "graphql-tools-fork": "^8.9.6", + "graphql-tools": "^5.0.0", "invariant": "^2.2.4", "node-fetch": "^1.7.3", "uuid": "^3.4.0" diff --git a/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js b/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js index 2678363539881..679add513536d 100644 --- a/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js +++ b/packages/gatsby-source-graphql/src/__tests__/gatsby-node.js @@ -1,4 +1,4 @@ -jest.mock(`graphql-tools-fork`, () => { +jest.mock(`graphql-tools`, () => { return { transformSchema: jest.fn(), introspectSchema: jest.fn(), diff --git a/packages/gatsby-source-graphql/src/gatsby-node.js b/packages/gatsby-source-graphql/src/gatsby-node.js index 3fddfb6445734..55463559c53ce 100644 --- a/packages/gatsby-source-graphql/src/gatsby-node.js +++ b/packages/gatsby-source-graphql/src/gatsby-node.js @@ -4,7 +4,7 @@ const { transformSchema, introspectSchema, RenameTypes, -} = require(`graphql-tools-fork`) +} = require(`graphql-tools`) const { createHttpLink } = require(`apollo-link-http`) const nodeFetch = require(`node-fetch`) const invariant = require(`invariant`) diff --git a/packages/gatsby-source-graphql/src/transforms.js b/packages/gatsby-source-graphql/src/transforms.js index c39d53fdcff3c..4f700d4470c48 100644 --- a/packages/gatsby-source-graphql/src/transforms.js +++ b/packages/gatsby-source-graphql/src/transforms.js @@ -4,7 +4,7 @@ const { cloneType, healSchema, visitSchema, -} = require(`graphql-tools-fork`) +} = require(`graphql-tools`) class NamespaceUnderFieldTransform { constructor({ typeName, fieldName, resolver }) { diff --git a/packages/gatsby-theme-blog-core/CHANGELOG.md b/packages/gatsby-theme-blog-core/CHANGELOG.md index 558d44108191f..d8d99f6a9b614 100644 --- a/packages/gatsby-theme-blog-core/CHANGELOG.md +++ b/packages/gatsby-theme-blog-core/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.22](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.21...gatsby-theme-blog-core@1.3.22) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.21](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.20...gatsby-theme-blog-core@1.3.21) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.20](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.19...gatsby-theme-blog-core@1.3.20) (2020-04-11) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.19](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.18...gatsby-theme-blog-core@1.3.19) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.18](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.17...gatsby-theme-blog-core@1.3.18) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-blog-core + +## [1.3.17](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.16...gatsby-theme-blog-core@1.3.17) (2020-04-09) + +**Note:** Version bump only for package gatsby-theme-blog-core + ## [1.3.16](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog-core@1.3.15...gatsby-theme-blog-core@1.3.16) (2020-04-08) **Note:** Version bump only for package gatsby-theme-blog-core diff --git a/packages/gatsby-theme-blog-core/package.json b/packages/gatsby-theme-blog-core/package.json index 553ab72beec27..4d8403f5826e2 100644 --- a/packages/gatsby-theme-blog-core/package.json +++ b/packages/gatsby-theme-blog-core/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-theme-blog-core", - "version": "1.3.16", + "version": "1.3.22", "main": "index.js", "author": "christopherbiscardi (@chrisbiscardi)", "license": "MIT", @@ -19,7 +19,7 @@ "dependencies": { "@mdx-js/mdx": "^1.5.7", "gatsby-core-utils": "^1.1.1", - "gatsby-plugin-mdx": "^1.1.6", + "gatsby-plugin-mdx": "^1.1.7", "gatsby-plugin-sharp": "^2.5.4", "gatsby-remark-copy-linked-files": "^2.2.1", "gatsby-remark-images": "^3.2.2", @@ -30,7 +30,7 @@ }, "devDependencies": { "@mdx-js/react": "^1.5.7", - "gatsby": "^2.20.14", + "gatsby": "^2.20.20", "prettier": "^1.19.1", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/packages/gatsby-theme-blog/CHANGELOG.md b/packages/gatsby-theme-blog/CHANGELOG.md index a7f04f3eb6ad0..cef3adc23e7be 100644 --- a/packages/gatsby-theme-blog/CHANGELOG.md +++ b/packages/gatsby-theme-blog/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.4.22](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.21...gatsby-theme-blog@1.4.22) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.21](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.20...gatsby-theme-blog@1.4.21) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.20](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.19...gatsby-theme-blog@1.4.20) (2020-04-11) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.19](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.18...gatsby-theme-blog@1.4.19) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.18](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.17...gatsby-theme-blog@1.4.18) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-blog + +## [1.4.17](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.16...gatsby-theme-blog@1.4.17) (2020-04-09) + +**Note:** Version bump only for package gatsby-theme-blog + ## [1.4.16](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-blog@1.4.15...gatsby-theme-blog@1.4.16) (2020-04-08) **Note:** Version bump only for package gatsby-theme-blog diff --git a/packages/gatsby-theme-blog/package.json b/packages/gatsby-theme-blog/package.json index 8feaef9759545..90d00de18b78c 100644 --- a/packages/gatsby-theme-blog/package.json +++ b/packages/gatsby-theme-blog/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-theme-blog", - "version": "1.4.16", + "version": "1.4.22", "description": "A Gatsby theme for miscellaneous blogging with a dark/light mode", "main": "index.js", "keywords": [ @@ -26,10 +26,10 @@ "gatsby-image": "^2.3.2", "gatsby-plugin-emotion": "^4.2.1", "gatsby-plugin-feed": "^2.4.1", - "gatsby-plugin-react-helmet": "^3.2.1", + "gatsby-plugin-react-helmet": "^3.2.2", "gatsby-plugin-theme-ui": "^0.2.53", "gatsby-plugin-twitter": "^2.2.2", - "gatsby-theme-blog-core": "^1.3.16", + "gatsby-theme-blog-core": "^1.3.22", "mdx-utils": "0.2.0", "react-helmet": "^5.2.1", "react-switch": "^5.0.1", @@ -39,7 +39,7 @@ "typography-theme-wordpress-2016": "^0.16.19" }, "devDependencies": { - "gatsby": "^2.20.14", + "gatsby": "^2.20.20", "prettier": "^1.19.1", "react": "^16.12.0", "react-dom": "^16.12.0" diff --git a/packages/gatsby-theme-notes/CHANGELOG.md b/packages/gatsby-theme-notes/CHANGELOG.md index dee08540f6112..561790739a57c 100644 --- a/packages/gatsby-theme-notes/CHANGELOG.md +++ b/packages/gatsby-theme-notes/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.21](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.20...gatsby-theme-notes@1.2.21) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.20](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.19...gatsby-theme-notes@1.2.20) (2020-04-14) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.19](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.18...gatsby-theme-notes@1.2.19) (2020-04-11) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.18](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.17...gatsby-theme-notes@1.2.18) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.17](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.16...gatsby-theme-notes@1.2.17) (2020-04-10) + +**Note:** Version bump only for package gatsby-theme-notes + +## [1.2.16](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.15...gatsby-theme-notes@1.2.16) (2020-04-09) + +**Note:** Version bump only for package gatsby-theme-notes + ## [1.2.15](https://github.com/gatsbyjs/gatsby/compare/gatsby-theme-notes@1.2.14...gatsby-theme-notes@1.2.15) (2020-04-08) **Note:** Version bump only for package gatsby-theme-notes diff --git a/packages/gatsby-theme-notes/package.json b/packages/gatsby-theme-notes/package.json index eabcbd183d9d2..38c6a44c2287b 100644 --- a/packages/gatsby-theme-notes/package.json +++ b/packages/gatsby-theme-notes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-theme-notes", "description": "Gatsby Theme for adding a notes section to your website", - "version": "1.2.15", + "version": "1.2.21", "author": "John Otander", "license": "MIT", "main": "index.js", @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-theme-notes#readme", "devDependencies": { - "gatsby": "^2.20.14", + "gatsby": "^2.20.20", "react": "^16.12.0", "react-dom": "^16.12.0" }, @@ -39,7 +39,7 @@ "gatsby-core-utils": "^1.1.1", "gatsby-plugin-compile-es6-packages": "^2.1.0", "gatsby-plugin-emotion": "^4.2.1", - "gatsby-plugin-mdx": "^1.1.6", + "gatsby-plugin-mdx": "^1.1.7", "gatsby-plugin-meta-redirect": "^1.1.1", "gatsby-plugin-og-image": "0.0.1", "gatsby-plugin-redirects": "^1.0.0", diff --git a/packages/gatsby-transformer-documentationjs/CHANGELOG.md b/packages/gatsby-transformer-documentationjs/CHANGELOG.md index 56f5d57f6acd8..408e701ce7a84 100644 --- a/packages/gatsby-transformer-documentationjs/CHANGELOG.md +++ b/packages/gatsby-transformer-documentationjs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-documentationjs@4.2.1...gatsby-transformer-documentationjs@4.2.2) (2020-04-10) + +### Bug Fixes + +- create unique Nodes ([#22774](https://github.com/gatsbyjs/gatsby/issues/22774)) ([1381a0b](https://github.com/gatsbyjs/gatsby/commit/1381a0b)) + ## [4.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-documentationjs@4.2.0...gatsby-transformer-documentationjs@4.2.1) (2020-03-23) **Note:** Version bump only for package gatsby-transformer-documentationjs diff --git a/packages/gatsby-transformer-documentationjs/package.json b/packages/gatsby-transformer-documentationjs/package.json index 5bbbf2db25b74..42a5a9c675150 100644 --- a/packages/gatsby-transformer-documentationjs/package.json +++ b/packages/gatsby-transformer-documentationjs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-documentationjs", "description": "Gatsby transformer plugin which uses Documentation.js to extract JavaScript documentation", - "version": "4.2.1", + "version": "4.2.2", "author": "Kyle Mathews", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-documentationjs/src/__tests__/__snapshots__/gatsby-node.js.snap b/packages/gatsby-transformer-documentationjs/src/__tests__/__snapshots__/gatsby-node.js.snap index 105d9376297cd..8c960d06742fe 100644 --- a/packages/gatsby-transformer-documentationjs/src/__tests__/__snapshots__/gatsby-node.js.snap +++ b/packages/gatsby-transformer-documentationjs/src/__tests__/__snapshots__/gatsby-node.js.snap @@ -21,11 +21,11 @@ Object { exports[`transformer-react-doc-gen: onCreateNode Complex example should handle typedefs should handle type applications 1`] = ` Object { "children": Array [ - "documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3--DocumentationJSComponentDescription--comment.description", + "documentationJS documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"}] line 12 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3--DocumentationJSComponentDescription--comment.description", ], "commentNumber": null, - "description___NODE": "documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3--DocumentationJSComponentDescription--comment.description", - "id": "documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3", + "description___NODE": "documentationJS documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"}] line 12 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3--DocumentationJSComponentDescription--comment.description", + "id": "documentationJS documentationJS node_1 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"}] line 12 path #[{\\"name\\":\\"ObjectType\\",\\"kind\\":\\"typedef\\"},{\\"fieldName\\":\\"properties\\",\\"fieldIndex\\":0}] line 3", "internal": Object { "contentDigest": "content-digest", "type": "DocumentationJs", diff --git a/packages/gatsby-transformer-documentationjs/src/gatsby-node.js b/packages/gatsby-transformer-documentationjs/src/gatsby-node.js index a45bddd7bc9c8..d3e34aaf4323f 100644 --- a/packages/gatsby-transformer-documentationjs/src/gatsby-node.js +++ b/packages/gatsby-transformer-documentationjs/src/gatsby-node.js @@ -274,7 +274,7 @@ exports.onCreateNode = async ({ node, actions, ...helpers }) => { const docSkeletonNode = { commentNumber, level, - id: createNodeId(docId(node.id, docsJson)), + id: createNodeId(docId(parent, docsJson)), parent, children: [], internal: { diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index b73d8dffcc0e5..0ff6dacd72283 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,42 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.20.20](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.19...gatsby@2.20.20) (2020-04-14) + +### Performance Improvements + +- **gatsby:** Support `lte` for indexed fast filters ([#22932](https://github.com/gatsbyjs/gatsby/issues/22932)) ([fd57224](https://github.com/gatsbyjs/gatsby/commit/fd57224)) + +## [2.20.19](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.18...gatsby@2.20.19) (2020-04-14) + +### Bug Fixes + +- **gatsby:** call schema rebuild manually on \_\_refresh ([#23009](https://github.com/gatsbyjs/gatsby/issues/23009)) ([8493de8](https://github.com/gatsbyjs/gatsby/commit/8493de8)) +- **gatsby:** Set a timeout of 15 seconds on queries ([#23036](https://github.com/gatsbyjs/gatsby/issues/23036)) ([1e81c76](https://github.com/gatsbyjs/gatsby/commit/1e81c76)) +- Ensure component order is deterministic ([#22965](https://github.com/gatsbyjs/gatsby/issues/22965)) ([94267be](https://github.com/gatsbyjs/gatsby/commit/94267be)) + +## [2.20.18](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.17...gatsby@2.20.18) (2020-04-11) + +### Bug Fixes + +- **gatsby:** Use `moveSync` over `renameSync` to fix cross mount cases ([#23029](https://github.com/gatsbyjs/gatsby/issues/23029)) ([96f8d4b](https://github.com/gatsbyjs/gatsby/commit/96f8d4b)) + +## [2.20.17](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.16...gatsby@2.20.17) (2020-04-10) + +**Note:** Version bump only for package gatsby + +## [2.20.16](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.15...gatsby@2.20.16) (2020-04-10) + +### Bug Fixes + +- **gatsby:** Use tmp dir for tmp redux cache folder ([#22959](https://github.com/gatsbyjs/gatsby/issues/22959)) ([86cf920](https://github.com/gatsbyjs/gatsby/commit/86cf920)) + +## [2.20.15](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.14...gatsby@2.20.15) (2020-04-09) + +### Bug Fixes + +- **gatsby:** improve async commons chunking ([#22879](https://github.com/gatsbyjs/gatsby/issues/22879)) ([7cf056f](https://github.com/gatsbyjs/gatsby/commit/7cf056f)) + ## [2.20.14](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.20.13...gatsby@2.20.14) (2020-04-08) ### Performance Improvements diff --git a/packages/gatsby/index.d.ts b/packages/gatsby/index.d.ts index 020f0c8fa9a50..e5919b29a1663 100644 --- a/packages/gatsby/index.d.ts +++ b/packages/gatsby/index.d.ts @@ -1,4 +1,5 @@ import * as React from "react" +import { Renderer } from "react-dom" import { EventEmitter } from "events" import { WindowLocation, NavigateFn } from "@reach/router" import { createContentDigest } from "gatsby-core-utils" @@ -537,7 +538,7 @@ export interface GatsbyBrowser { args: ReplaceComponentRendererArgs, options: PluginOptions ): any - replaceHydrateFunction?(args: BrowserPluginArgs, options: PluginOptions): any + replaceHydrateFunction?(args: BrowserPluginArgs, options: PluginOptions): Renderer shouldUpdateScroll?(args: ShouldUpdateScrollArgs, options: PluginOptions): any wrapPageElement?( args: WrapPageElementBrowserArgs, @@ -959,7 +960,13 @@ interface ActionOptions { } export interface BuildArgs extends ParentSpanPluginArgs { - graphql: Function + graphql( + query: string, + variables?: TVariables + ): Promise<{ + errors?: any + data?: TData + }> } export interface Actions { diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index b65f1673acda9..3a1d55e15c45f 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.20.14", + "version": "2.20.20", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -80,7 +80,7 @@ "flat": "^4.1.0", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.11.5", + "gatsby-cli": "^2.11.8", "gatsby-core-utils": "^1.1.1", "gatsby-graphiql-explorer": "^0.3.1", "gatsby-link": "^2.3.2", diff --git a/packages/gatsby/src/bootstrap/__tests__/__snapshots__/graphql-runner.js.snap b/packages/gatsby/src/bootstrap/__tests__/__snapshots__/create-graphql-runner.js.snap similarity index 100% rename from packages/gatsby/src/bootstrap/__tests__/__snapshots__/graphql-runner.js.snap rename to packages/gatsby/src/bootstrap/__tests__/__snapshots__/create-graphql-runner.js.snap diff --git a/packages/gatsby/src/bootstrap/__tests__/graphql-runner.js b/packages/gatsby/src/bootstrap/__tests__/create-graphql-runner.js similarity index 88% rename from packages/gatsby/src/bootstrap/__tests__/graphql-runner.js rename to packages/gatsby/src/bootstrap/__tests__/create-graphql-runner.js index e9dba17611223..3445cc43dec90 100644 --- a/packages/gatsby/src/bootstrap/__tests__/graphql-runner.js +++ b/packages/gatsby/src/bootstrap/__tests__/create-graphql-runner.js @@ -1,6 +1,6 @@ jest.mock(`graphql`) -const createGraphqlRunner = require(`../graphql-runner`) +import { createGraphQLRunner } from "../create-graphql-runner" const { execute, validate, parse } = require(`graphql`) parse.mockImplementation(() => { @@ -31,7 +31,7 @@ describe(`grapqhl-runner`, () => { }) it(`should return the result when grapqhl has no errors`, async () => { - const graphqlRunner = createGraphqlRunner(createStore(), reporter) + const graphqlRunner = createGraphQLRunner(createStore(), reporter) const expectation = { data: { @@ -46,7 +46,7 @@ describe(`grapqhl-runner`, () => { }) it(`should return an errors array when structured errors found`, async () => { - const graphqlRunner = createGraphqlRunner(createStore(), reporter) + const graphqlRunner = createGraphQLRunner(createStore(), reporter) const expectation = { errors: [ @@ -64,7 +64,7 @@ describe(`grapqhl-runner`, () => { }) it(`should throw a structured error when created from createPage file`, async () => { - const graphqlRunner = createGraphqlRunner(createStore(), reporter) + const graphqlRunner = createGraphQLRunner(createStore(), reporter) const errorObject = { stack: `Error diff --git a/packages/gatsby/src/bootstrap/__tests__/requires-writer.js b/packages/gatsby/src/bootstrap/__tests__/requires-writer.js index 5506421f45541..b82fa698dc0e6 100644 --- a/packages/gatsby/src/bootstrap/__tests__/requires-writer.js +++ b/packages/gatsby/src/bootstrap/__tests__/requires-writer.js @@ -326,4 +326,29 @@ describe(`requires-writer`, () => { }) }) }) + + describe(`getComponents`, () => { + it(`should return components in a deterministic order`, () => { + const pagesInput = generatePagesState([ + { + component: `component1`, + componentChunkName: `chunkName1`, + matchPath: `matchPath1`, + path: `/path1`, + }, + { + component: `component2`, + componentChunkName: `chunkName2`, + path: `/path2`, + }, + ]) + + const pages = [...pagesInput.values()] + const pagesReversed = [...pagesInput.values()].reverse() + + expect(requiresWriter.getComponents(pages)).toEqual( + requiresWriter.getComponents(pagesReversed) + ) + }) + }) }) diff --git a/packages/gatsby/src/bootstrap/graphql-runner.js b/packages/gatsby/src/bootstrap/create-graphql-runner.ts similarity index 54% rename from packages/gatsby/src/bootstrap/graphql-runner.js rename to packages/gatsby/src/bootstrap/create-graphql-runner.ts index 3d6fb71b2b94d..35967ec130eb1 100644 --- a/packages/gatsby/src/bootstrap/graphql-runner.js +++ b/packages/gatsby/src/bootstrap/create-graphql-runner.ts @@ -1,14 +1,27 @@ -const stackTrace = require(`stack-trace`) +import stackTrace from "stack-trace" +import { ExecutionResultDataDefault } from "graphql/execution/execute" +import { Store } from "redux" -const GraphQLRunner = require(`../query/graphql-runner`).default -const errorParser = require(`../query/error-parser`).default +import GraphQLRunner from "../query/graphql-runner" +import errorParser from "../query/error-parser" +import { emitter } from "../redux" +import { Reporter } from "../.." +import { ExecutionResult, Source } from "../../graphql" +import { IGatsbyState } from "../redux/types" -const { emitter } = require(`../redux`) +type Runner = ( + query: string | Source, + context: Record +) => Promise> -module.exports = (store, reporter) => { +export const createGraphQLRunner = ( + store: Store, + reporter: Reporter +): Runner => { // TODO: Move tracking of changed state inside GraphQLRunner itself. https://github.com/gatsbyjs/gatsby/issues/20941 let runner = new GraphQLRunner(store) - ;[ + + const eventTypes: string[] = [ `DELETE_CACHE`, `CREATE_NODE`, `DELETE_NODE`, @@ -17,12 +30,15 @@ module.exports = (store, reporter) => { `SET_SCHEMA`, `ADD_FIELD_TO_NODE`, `ADD_CHILD_NODE_TO_PARENT_NODE`, - ].forEach(eventType => { - emitter.on(eventType, event => { + ] + + eventTypes.forEach(type => { + emitter.on(type, () => { runner = new GraphQLRunner(store) }) }) - return (query, context) => + + return (query, context): ReturnType => runner.query(query, context).then(result => { if (result.errors) { const structuredErrors = result.errors @@ -30,15 +46,18 @@ module.exports = (store, reporter) => { // Find the file where graphql was called. const file = stackTrace .parse(e) - .find(file => /createPages/.test(file.functionName)) + .find(file => /createPages/.test(file.getFunctionName())) if (file) { const structuredError = errorParser({ message: e.message, location: { - start: { line: file.lineNumber, column: file.columnNumber }, + start: { + line: file.getLineNumber(), + column: file.getColumnNumber(), + }, }, - filePath: file.fileName, + filePath: file.getFileName(), }) structuredError.context = { ...structuredError.context, diff --git a/packages/gatsby/src/bootstrap/index.js b/packages/gatsby/src/bootstrap/index.js index 8bee7678798a5..ffc8fc8eb413e 100644 --- a/packages/gatsby/src/bootstrap/index.js +++ b/packages/gatsby/src/bootstrap/index.js @@ -28,7 +28,7 @@ process.on(`unhandledRejection`, (reason, p) => { report.panic(reason) }) -const createGraphqlRunner = require(`./graphql-runner`) +import { createGraphQLRunner } from "./create-graphql-runner" const { extractQueries } = require(`../query/query-watcher`) const requiresWriter = require(`./requires-writer`) const { writeRedirects } = require(`./redirects-writer`) @@ -469,7 +469,7 @@ module.exports = async (args: BootstrapArgs) => { payload: _.flattenDeep([extensions, apiResults]), }) - const graphqlRunner = createGraphqlRunner(store, report) + const graphqlRunner = createGraphQLRunner(store, report) // Collect pages. activity = report.activityTimer(`createPages`, { diff --git a/packages/gatsby/src/bootstrap/requires-writer.js b/packages/gatsby/src/bootstrap/requires-writer.js index f1c24b6061791..e34c0c72a948e 100644 --- a/packages/gatsby/src/bootstrap/requires-writer.js +++ b/packages/gatsby/src/bootstrap/requires-writer.js @@ -52,6 +52,7 @@ const getComponents = pages => _(pages) .map(pickComponentFields) .uniqBy(c => c.componentChunkName) + .orderBy(c => c.componentChunkName) .value() /** @@ -254,4 +255,5 @@ module.exports = { writeAll, resetLastHash, startListener, + getComponents, } diff --git a/packages/gatsby/src/bootstrap/schema-hot-reloader.ts b/packages/gatsby/src/bootstrap/schema-hot-reloader.ts index 808b0ab70b89c..2cdd1efcaeab1 100644 --- a/packages/gatsby/src/bootstrap/schema-hot-reloader.ts +++ b/packages/gatsby/src/bootstrap/schema-hot-reloader.ts @@ -7,7 +7,6 @@ import report from "gatsby-cli/lib/reporter" import { IGatsbyState } from "../redux/types" type TypeMap = IGatsbyState["inferenceMetadata"]["typeMap"] -type SchemaCustomization = IGatsbyState["schemaCustomization"] type InferenceMetadata = IGatsbyState["inferenceMetadata"] const inferredTypesChanged = ( @@ -19,41 +18,46 @@ const inferredTypesChanged = ( typeMap[type].dirty && !haveEqualFields(typeMap[type], prevTypeMap[type]) ) -const schemaChanged = ( - schemaCustomization: SchemaCustomization, - lastSchemaCustomization: SchemaCustomization -): boolean => - [`fieldExtensions`, `printConfig`, `thirdPartySchemas`, `types`].some( - key => schemaCustomization[key] !== lastSchemaCustomization[key] - ) - let lastMetadata: InferenceMetadata -let lastSchemaCustomization: SchemaCustomization // API_RUNNING_QUEUE_EMPTY could be emitted multiple types // in a short period of time, so debounce seems reasonable const maybeRebuildSchema = debounce(async (): Promise => { - const { inferenceMetadata, schemaCustomization } = store.getState() + const { inferenceMetadata } = store.getState() - if ( - !inferredTypesChanged(inferenceMetadata.typeMap, lastMetadata.typeMap) && - !schemaChanged(schemaCustomization, lastSchemaCustomization) - ) { + if (!inferredTypesChanged(inferenceMetadata.typeMap, lastMetadata.typeMap)) { return } const activity = report.activityTimer(`rebuild schema`) activity.start() - lastMetadata = cloneDeep(inferenceMetadata) - lastSchemaCustomization = schemaCustomization await rebuild({ parentSpan: activity }) await updateStateAndRunQueries(false, { parentSpan: activity }) activity.end() }, 1000) -export const bootstrapSchemaHotReloader = (): void => { - const { inferenceMetadata, schemaCustomization } = store.getState() +function snapshotInferenceMetadata(): void { + const { inferenceMetadata } = store.getState() lastMetadata = cloneDeep(inferenceMetadata) - lastSchemaCustomization = schemaCustomization +} + +export function bootstrapSchemaHotReloader(): void { + // Snapshot inference metadata at the time of the last schema rebuild + // (even if schema was rebuilt elsewhere) + // Using the snapshot later to check if inferred types actually changed since the last rebuild + snapshotInferenceMetadata() + emitter.on(`SET_SCHEMA`, snapshotInferenceMetadata) + + startSchemaHotReloader() +} + +export function startSchemaHotReloader(): void { + // Listen for node changes outside of a regular sourceNodes API call, + // e.g. markdown file update via watcher emitter.on(`API_RUNNING_QUEUE_EMPTY`, maybeRebuildSchema) } + +export function stopSchemaHotReloader(): void { + emitter.off(`API_RUNNING_QUEUE_EMPTY`, maybeRebuildSchema) + maybeRebuildSchema.cancel() +} diff --git a/packages/gatsby/src/commands/develop.ts b/packages/gatsby/src/commands/develop.ts index 3f06dea88627c..d647ea85b41bf 100644 --- a/packages/gatsby/src/commands/develop.ts +++ b/packages/gatsby/src/commands/develop.ts @@ -31,12 +31,17 @@ import * as WorkerPool from "../utils/worker/pool" import http from "http" import https from "https" -import { bootstrapSchemaHotReloader } from "../bootstrap/schema-hot-reloader" +import { + bootstrapSchemaHotReloader, + startSchemaHotReloader, + stopSchemaHotReloader, +} from "../bootstrap/schema-hot-reloader" import bootstrapPageHotReloader from "../bootstrap/page-hot-reloader" import { developStatic } from "./develop-static" import withResolverContext from "../schema/context" import sourceNodes from "../utils/source-nodes" import { createSchemaCustomization } from "../utils/create-schema-customization" +import { rebuild as rebuildSchema } from "../schema" import { websocketManager } from "../utils/websocket-manager" import getSslCert from "../utils/get-ssl-cert" import { slash } from "gatsby-core-utils" @@ -203,6 +208,7 @@ async function startServer(program: IProgram): Promise { **/ const REFRESH_ENDPOINT = `/__refresh` const refresh = async (req: express.Request): Promise => { + stopSchemaHotReloader() let activity = report.activityTimer(`createSchemaCustomization`, {}) activity.start() await createSchemaCustomization({ @@ -215,6 +221,11 @@ async function startServer(program: IProgram): Promise { webhookBody: req.body, }) activity.end() + activity = report.activityTimer(`rebuild schema`) + activity.start() + await rebuildSchema({ parentSpan: activity }) + activity.end() + startSchemaHotReloader() } app.use(REFRESH_ENDPOINT, express.json()) app.post(REFRESH_ENDPOINT, (req, res) => { diff --git a/packages/gatsby/src/redux/__tests__/index.js b/packages/gatsby/src/redux/__tests__/index.js index e90eb1742765f..addc4d52aaf4f 100644 --- a/packages/gatsby/src/redux/__tests__/index.js +++ b/packages/gatsby/src/redux/__tests__/index.js @@ -16,7 +16,7 @@ jest.mock(`fs-extra`, () => { mockWrittenContent.set(file, content) ), readFileSync: jest.fn(file => mockWrittenContent.get(file)), - renameSync: jest.fn((from, to) => { + moveSync: jest.fn((from, to) => { // This will only work for folders if they are always the full prefix // of the file... (that goes for both input dirs). That's the case here. if (mockWrittenContent.has(to)) { diff --git a/packages/gatsby/src/redux/actions/internal.ts b/packages/gatsby/src/redux/actions/internal.ts index 19c811ce50087..04a33541a1e1f 100644 --- a/packages/gatsby/src/redux/actions/internal.ts +++ b/packages/gatsby/src/redux/actions/internal.ts @@ -1,4 +1,5 @@ import { + IGatsbyPlugin, ProgramStatus, ICreatePageDependencyAction, IDeleteComponentDependenciesAction, @@ -81,7 +82,7 @@ export const replaceComponentQuery = ({ */ export const replaceStaticQuery = ( args: any, - plugin: Plugin | null | undefined = null + plugin: IGatsbyPlugin | null | undefined = null ): IReplaceStaticQueryAction => { return { type: `REPLACE_STATIC_QUERY`, @@ -98,7 +99,7 @@ export const replaceStaticQuery = ( */ export const queryExtracted = ( { componentPath, query }: { componentPath: string; query: string }, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IQueryExtractedAction => { return { @@ -116,7 +117,7 @@ export const queryExtracted = ( */ export const queryExtractionGraphQLError = ( { componentPath, error }: { componentPath: string; error: string }, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IQueryExtractionGraphQLErrorAction => { return { @@ -135,7 +136,7 @@ export const queryExtractionGraphQLError = ( */ export const queryExtractedBabelSuccess = ( { componentPath }, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IQueryExtractedBabelSuccessAction => { return { @@ -153,7 +154,7 @@ export const queryExtractedBabelSuccess = ( */ export const queryExtractionBabelError = ( { componentPath, error }: { componentPath: string; error: Error }, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IQueryExtractionBabelErrorAction => { return { @@ -170,7 +171,7 @@ export const queryExtractionBabelError = ( */ export const setProgramStatus = ( status: ProgramStatus, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): ISetProgramStatusAction => { return { @@ -187,7 +188,7 @@ export const setProgramStatus = ( */ export const pageQueryRun = ( { path, componentPath, isPage }, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IPageQueryRunAction => { return { @@ -204,7 +205,7 @@ export const pageQueryRun = ( */ export const removeStaleJob = ( contentDigest: string, - plugin: Plugin, + plugin: IGatsbyPlugin, traceId?: string ): IRemoveStaleJobAction => { return { diff --git a/packages/gatsby/src/redux/actions/restricted.js b/packages/gatsby/src/redux/actions/restricted.js deleted file mode 100644 index 85be2a3a00b9a..0000000000000 --- a/packages/gatsby/src/redux/actions/restricted.js +++ /dev/null @@ -1,459 +0,0 @@ -// @flow -const { camelCase } = require(`lodash`) -const report = require(`gatsby-cli/lib/reporter`) -const { parseTypeDef } = require(`../../schema/types/type-defs`) - -import type { Plugin } from "./types" - -const actions = {} - -/** - * Add a third-party schema to be merged into main schema. Schema has to be a - * graphql-js GraphQLSchema object. - * - * This schema is going to be merged as-is. This can easily break the main - * Gatsby schema, so it's user's responsibility to make sure it doesn't happen - * (by e.g. namespacing the schema). - * - * @availableIn [createSchemaCustomization, sourceNodes] - * - * @param {Object} $0 - * @param {GraphQLSchema} $0.schema GraphQL schema to add - */ -actions.addThirdPartySchema = ( - { schema }: { schema: GraphQLSchema }, - plugin?: Plugin, - traceId?: string -) => { - return { - type: `ADD_THIRD_PARTY_SCHEMA`, - plugin, - traceId, - payload: schema, - } -} - -import type GatsbyGraphQLType from "../../schema/types/type-builders" -/** - * Add type definitions to the GraphQL schema. - * - * @availableIn [createSchemaCustomization, sourceNodes] - * - * @param {string | GraphQLOutputType | GatsbyGraphQLType | string[] | GraphQLOutputType[] | GatsbyGraphQLType[]} types Type definitions - * - * Type definitions can be provided either as - * [`graphql-js` types](https://graphql.org/graphql-js/), in - * [GraphQL schema definition language (SDL)](https://graphql.org/learn/) - * or using Gatsby Type Builders available on the `schema` API argument. - * - * Things to note: - * * type definitions targeting node types, i.e. `MarkdownRemark` and others - * added in `sourceNodes` or `onCreateNode` APIs, need to implement the - * `Node` interface. Interface fields will be added automatically, but it - * is mandatory to label those types with `implements Node`. - * * by default, explicit type definitions from `createTypes` will be merged - * with inferred field types, and default field resolvers for `Date` (which - * adds formatting options) and `File` (which resolves the field value as - * a `relativePath` foreign-key field) are added. This behavior can be - * customised with `@infer`, `@dontInfer` directives or extensions. Fields - * may be assigned resolver (and other option like args) with additional - * directives. Currently `@dateformat`, `@link`, `@fileByRelativePath` and - * `@proxy` are available. - * - * - * Schema customization controls: - * * `@infer` - run inference on the type and add fields that don't exist on the - * defined type to it. - * * `@dontInfer` - don't run any inference on the type - * - * Extensions to add resolver options: - * * `@dateformat` - add date formatting arguments. Accepts `formatString` and - * `locale` options that sets the defaults for this field - * * `@link` - connect to a different Node. Arguments `by` and `from`, which - * define which field to compare to on a remote node and which field to use on - * the source node - * * `@fileByRelativePath` - connect to a File node. Same arguments. The - * difference from link is that this normalizes the relative path to be - * relative from the path where source node is found. - * * `@proxy` - in case the underlying node data contains field names with - * characters that are invalid in GraphQL, `proxy` allows to explicitly - * proxy those properties to fields with valid field names. Takes a `from` arg. - * - * - * @example - * exports.createSchemaCustomization = ({ actions }) => { - * const { createTypes } = actions - * const typeDefs = ` - * """ - * Markdown Node - * """ - * type MarkdownRemark implements Node @infer { - * frontmatter: Frontmatter! - * } - * - * """ - * Markdown Frontmatter - * """ - * type Frontmatter @infer { - * title: String! - * author: AuthorJson! @link - * date: Date! @dateformat - * published: Boolean! - * tags: [String!]! - * } - * - * """ - * Author information - * """ - * # Does not include automatically inferred fields - * type AuthorJson implements Node @dontInfer { - * name: String! - * birthday: Date! @dateformat(locale: "ru") - * } - * ` - * createTypes(typeDefs) - * } - * - * // using Gatsby Type Builder API - * exports.createSchemaCustomization = ({ actions, schema }) => { - * const { createTypes } = actions - * const typeDefs = [ - * schema.buildObjectType({ - * name: 'MarkdownRemark', - * fields: { - * frontmatter: 'Frontmatter!' - * }, - * interfaces: ['Node'], - * extensions: { - * infer: true, - * }, - * }), - * schema.buildObjectType({ - * name: 'Frontmatter', - * fields: { - * title: { - * type: 'String!', - * resolve(parent) { - * return parent.title || '(Untitled)' - * } - * }, - * author: { - * type: 'AuthorJson' - * extensions: { - * link: {}, - * }, - * } - * date: { - * type: 'Date!' - * extensions: { - * dateformat: {}, - * }, - * }, - * published: 'Boolean!', - * tags: '[String!]!', - * } - * }), - * schema.buildObjectType({ - * name: 'AuthorJson', - * fields: { - * name: 'String!' - * birthday: { - * type: 'Date!' - * extensions: { - * dateformat: { - * locale: 'ru', - * }, - * }, - * }, - * }, - * interfaces: ['Node'], - * extensions: { - * infer: false, - * }, - * }), - * ] - * createTypes(typeDefs) - * } - */ -actions.createTypes = ( - types: - | string - | GraphQLOutputType - | GatsbyGraphQLType - | Array, - plugin?: Plugin, - traceId?: string -) => { - return { - type: `CREATE_TYPES`, - plugin, - traceId, - payload: Array.isArray(types) - ? types.map(parseTypeDef) - : parseTypeDef(types), - } -} - -const { reservedExtensionNames } = require(`../../schema/extensions`) -import type GraphQLFieldExtensionDefinition from "../../schema/extensions" -/** - * Add a field extension to the GraphQL schema. - * - * Extensions allow defining custom behavior which can be added to fields - * via directive (in SDL) or on the `extensions` prop (with Type Builders). - * - * The extension definition takes a `name`, an `extend` function, and optional - * extension `args` for options. The `extend` function has to return a (partial) - * field config, and receives the extension options and the previous field config - * as arguments. - * - * @availableIn [createSchemaCustomization, sourceNodes] - * - * @param {GraphQLFieldExtensionDefinition} extension The field extension definition - * @example - * exports.createSchemaCustomization = ({ actions }) => { - * const { createFieldExtension } = actions - * createFieldExtension({ - * name: 'motivate', - * args: { - * caffeine: 'Int' - * }, - * extend(options, prevFieldConfig) { - * return { - * type: 'String', - * args: { - * sunshine: { - * type: 'Int', - * defaultValue: 0, - * }, - * }, - * resolve(source, args, context, info) { - * const motivation = (options.caffeine || 0) - args.sunshine - * if (motivation > 5) return 'Work! Work! Work!' - * return 'Maybe tomorrow.' - * }, - * } - * }, - * }) - * } - */ -actions.createFieldExtension = ( - extension: GraphQLFieldExtensionDefinition, - plugin?: Plugin, - traceId?: string -) => (dispatch, getState) => { - const { name } = extension || {} - const { fieldExtensions } = getState().schemaCustomization - - if (!name) { - report.error(`The provided field extension must have a \`name\` property.`) - } else if (reservedExtensionNames.includes(name)) { - report.error( - `The field extension name \`${name}\` is reserved for internal use.` - ) - } else if (fieldExtensions[name]) { - report.error( - `A field extension with the name \`${name}\` has already been registered.` - ) - } else { - dispatch({ - type: `CREATE_FIELD_EXTENSION`, - plugin, - traceId, - payload: { name, extension }, - }) - } -} - -/** - * Write GraphQL schema to file - * - * Writes out inferred and explicitly specified type definitions. This is not - * the full GraphQL schema, but only the types necessary to recreate all type - * definitions, i.e. it does not include directives, built-ins, and derived - * types for filtering, sorting, pagination etc. Optionally, you can define a - * list of types to include/exclude. This is recommended to avoid including - * definitions for plugin-created types. - * - * @availableIn [createSchemaCustomization] - * - * @param {object} $0 - * @param {string} [$0.path] The path to the output file, defaults to `schema.gql` - * @param {object} [$0.include] Configure types to include - * @param {string[]} [$0.include.types] Only include these types - * @param {string[]} [$0.include.plugins] Only include types owned by these plugins - * @param {object} [$0.exclude] Configure types to exclude - * @param {string[]} [$0.exclude.types] Do not include these types - * @param {string[]} [$0.exclude.plugins] Do not include types owned by these plugins - * @param {boolean} [withFieldTypes] Include field types, defaults to `true` - */ -actions.printTypeDefinitions = ( - { - path = `schema.gql`, - include, - exclude, - withFieldTypes = true, - }: { - path?: string, - include?: { types?: Array, plugins?: Array }, - exclude?: { types?: Array, plugins?: Array }, - withFieldTypes?: boolean, - }, - plugin?: Plugin, - traceId?: string -) => { - return { - type: `PRINT_SCHEMA_REQUESTED`, - plugin, - traceId, - payload: { - path, - include, - exclude, - withFieldTypes, - }, - } -} - -/** - * Make functionality available on field resolver `context` - * - * @availableIn [createSchemaCustomization] - * - * @param {object} context Object to make available on `context`. - * When called from a plugin, the context value will be namespaced under - * the camel-cased plugin name without the "gatsby-" prefix - * @example - * const getHtml = md => remark().use(html).process(md) - * exports.createSchemaCustomization = ({ actions }) => { - * actions.createResolverContext({ getHtml }) - * } - * // The context value can then be accessed in any field resolver like this: - * exports.createSchemaCustomization = ({ actions }) => { - * actions.createTypes(schema.buildObjectType({ - * name: 'Test', - * interfaces: ['Node'], - * fields: { - * md: { - * type: 'String!', - * async resolve(source, args, context, info) { - * const processed = await context.transformerRemark.getHtml(source.internal.contents) - * return processed.contents - * } - * } - * } - * })) - * } - */ -actions.createResolverContext = ( - context: object, - plugin?: Plugin, - traceId?: string -) => dispatch => { - if (!context || typeof context !== `object`) { - report.error( - `Expected context value passed to \`createResolverContext\` to be an object. Received "${context}".` - ) - } else { - const { name } = plugin || {} - const payload = - !name || name === `default-site-plugin` - ? context - : { [camelCase(name.replace(/^gatsby-/, ``))]: context } - dispatch({ - type: `CREATE_RESOLVER_CONTEXT`, - plugin, - traceId, - payload, - }) - } -} - -const withDeprecationWarning = (actionName, action, api, allowedIn) => ( - ...args -) => { - report.warn( - `Calling \`${actionName}\` in the \`${api}\` API is deprecated. ` + - `Please use: ${allowedIn.map(a => `\`${a}\``).join(`, `)}.` - ) - return action(...args) -} - -const withErrorMessage = (actionName, api, allowedIn) => () => - // return a thunk that does not dispatch anything - () => { - report.error( - `\`${actionName}\` is not available in the \`${api}\` API. ` + - `Please use: ${allowedIn.map(a => `\`${a}\``).join(`, `)}.` - ) - } - -const nodeAPIs = Object.keys(require(`../../utils/api-node-docs`)) - -const ALLOWED_IN = `ALLOWED_IN` -const DEPRECATED_IN = `DEPRECATED_IN` - -const set = (availableActionsByAPI, api, actionName, action) => { - availableActionsByAPI[api] = availableActionsByAPI[api] || {} - availableActionsByAPI[api][actionName] = action -} - -const mapAvailableActionsToAPIs = restrictions => { - const availableActionsByAPI = {} - - const actionNames = Object.keys(restrictions) - actionNames.forEach(actionName => { - const action = actions[actionName] - - const allowedIn = restrictions[actionName][ALLOWED_IN] || [] - allowedIn.forEach(api => - set(availableActionsByAPI, api, actionName, action) - ) - - const deprecatedIn = restrictions[actionName][DEPRECATED_IN] || [] - deprecatedIn.forEach(api => - set( - availableActionsByAPI, - api, - actionName, - withDeprecationWarning(actionName, action, api, allowedIn) - ) - ) - - const forbiddenIn = nodeAPIs.filter( - api => ![...allowedIn, ...deprecatedIn].includes(api) - ) - forbiddenIn.forEach(api => - set( - availableActionsByAPI, - api, - actionName, - withErrorMessage(actionName, api, allowedIn) - ) - ) - }) - - return availableActionsByAPI -} - -const availableActionsByAPI = mapAvailableActionsToAPIs({ - createFieldExtension: { - [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], - }, - createTypes: { - [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], - [DEPRECATED_IN]: [`onPreInit`, `onPreBootstrap`], - }, - createResolverContext: { - [ALLOWED_IN]: [`createSchemaCustomization`], - }, - addThirdPartySchema: { - [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], - [DEPRECATED_IN]: [`onPreInit`, `onPreBootstrap`], - }, - printTypeDefinitions: { - [ALLOWED_IN]: [`createSchemaCustomization`], - }, -}) - -module.exports = { actions, availableActionsByAPI } diff --git a/packages/gatsby/src/redux/actions/restricted.ts b/packages/gatsby/src/redux/actions/restricted.ts new file mode 100644 index 0000000000000..8cb4a68b89f0b --- /dev/null +++ b/packages/gatsby/src/redux/actions/restricted.ts @@ -0,0 +1,517 @@ +import { camelCase } from "lodash" +import { GraphQLSchema, GraphQLOutputType } from "graphql" +import { ActionCreator } from "redux" +import { ThunkAction } from "redux-thunk" +import report from "gatsby-cli/lib/reporter" +import { parseTypeDef } from "../../schema/types/type-defs" +import { + GraphQLFieldExtensionDefinition, + reservedExtensionNames, +} from "../../schema/extensions" +import { GatsbyGraphQLType } from "../../schema/types/type-builders" +import { + IGatsbyPlugin, + ActionsUnion, + IAddThirdPartySchema, + ICreateTypes, + IGatsbyState, + ICreateFieldExtension, + IPrintTypeDefinitions, + ICreateResolverContext, + IGatsbyPluginContext, +} from "../types" + +type RestrictionActionNames = + | "createFieldExtension" + | "createTypes" + | "createResolverContext" + | "addThirdPartySchema" + | "printTypeDefinitions" + +type SomeActionCreator = + | ActionCreator + | ActionCreator> + +export const actions = { + /** + * Add a third-party schema to be merged into main schema. Schema has to be a + * graphql-js GraphQLSchema object. + * + * This schema is going to be merged as-is. This can easily break the main + * Gatsby schema, so it's user's responsibility to make sure it doesn't happen + * (by e.g. namespacing the schema). + * + * @availableIn [createSchemaCustomization, sourceNodes] + * + * @param {Object} $0 + * @param {GraphQLSchema} $0.schema GraphQL schema to add + */ + addThirdPartySchema: ( + { schema }: { schema: GraphQLSchema }, + plugin: IGatsbyPlugin, + traceId?: string + ): IAddThirdPartySchema => { + return { + type: `ADD_THIRD_PARTY_SCHEMA`, + plugin, + traceId, + payload: schema, + } + }, + + /** + * Add type definitions to the GraphQL schema. + * + * @availableIn [createSchemaCustomization, sourceNodes] + * + * @param {string | GraphQLOutputType | GatsbyGraphQLType | string[] | GraphQLOutputType[] | GatsbyGraphQLType[]} types Type definitions + * + * Type definitions can be provided either as + * [`graphql-js` types](https://graphql.org/graphql-js/), in + * [GraphQL schema definition language (SDL)](https://graphql.org/learn/) + * or using Gatsby Type Builders available on the `schema` API argument. + * + * Things to note: + * * type definitions targeting node types, i.e. `MarkdownRemark` and others + * added in `sourceNodes` or `onCreateNode` APIs, need to implement the + * `Node` interface. Interface fields will be added automatically, but it + * is mandatory to label those types with `implements Node`. + * * by default, explicit type definitions from `createTypes` will be merged + * with inferred field types, and default field resolvers for `Date` (which + * adds formatting options) and `File` (which resolves the field value as + * a `relativePath` foreign-key field) are added. This behavior can be + * customised with `@infer`, `@dontInfer` directives or extensions. Fields + * may be assigned resolver (and other option like args) with additional + * directives. Currently `@dateformat`, `@link`, `@fileByRelativePath` and + * `@proxy` are available. + * + * + * Schema customization controls: + * * `@infer` - run inference on the type and add fields that don't exist on the + * defined type to it. + * * `@dontInfer` - don't run any inference on the type + * + * Extensions to add resolver options: + * * `@dateformat` - add date formatting arguments. Accepts `formatString` and + * `locale` options that sets the defaults for this field + * * `@link` - connect to a different Node. Arguments `by` and `from`, which + * define which field to compare to on a remote node and which field to use on + * the source node + * * `@fileByRelativePath` - connect to a File node. Same arguments. The + * difference from link is that this normalizes the relative path to be + * relative from the path where source node is found. + * * `@proxy` - in case the underlying node data contains field names with + * characters that are invalid in GraphQL, `proxy` allows to explicitly + * proxy those properties to fields with valid field names. Takes a `from` arg. + * + * + * @example + * exports.createSchemaCustomization = ({ actions }) => { + * const { createTypes } = actions + * const typeDefs = ` + * """ + * Markdown Node + * """ + * type MarkdownRemark implements Node @infer { + * frontmatter: Frontmatter! + * } + * + * """ + * Markdown Frontmatter + * """ + * type Frontmatter @infer { + * title: String! + * author: AuthorJson! @link + * date: Date! @dateformat + * published: Boolean! + * tags: [String!]! + * } + * + * """ + * Author information + * """ + * # Does not include automatically inferred fields + * type AuthorJson implements Node @dontInfer { + * name: String! + * birthday: Date! @dateformat(locale: "ru") + * } + * ` + * createTypes(typeDefs) + * } + * + * // using Gatsby Type Builder API + * exports.createSchemaCustomization = ({ actions, schema }) => { + * const { createTypes } = actions + * const typeDefs = [ + * schema.buildObjectType({ + * name: 'MarkdownRemark', + * fields: { + * frontmatter: 'Frontmatter!' + * }, + * interfaces: ['Node'], + * extensions: { + * infer: true, + * }, + * }), + * schema.buildObjectType({ + * name: 'Frontmatter', + * fields: { + * title: { + * type: 'String!', + * resolve(parent) { + * return parent.title || '(Untitled)' + * } + * }, + * author: { + * type: 'AuthorJson' + * extensions: { + * link: {}, + * }, + * } + * date: { + * type: 'Date!' + * extensions: { + * dateformat: {}, + * }, + * }, + * published: 'Boolean!', + * tags: '[String!]!', + * } + * }), + * schema.buildObjectType({ + * name: 'AuthorJson', + * fields: { + * name: 'String!' + * birthday: { + * type: 'Date!' + * extensions: { + * dateformat: { + * locale: 'ru', + * }, + * }, + * }, + * }, + * interfaces: ['Node'], + * extensions: { + * infer: false, + * }, + * }), + * ] + * createTypes(typeDefs) + * } + */ + createTypes: ( + types: + | string + | GraphQLOutputType + | GatsbyGraphQLType + | Array, + plugin: IGatsbyPlugin, + traceId?: string + ): ICreateTypes => { + return { + type: `CREATE_TYPES`, + plugin, + traceId, + payload: Array.isArray(types) + ? types.map(parseTypeDef) + : parseTypeDef(types), + } + }, + + /** + * Add a field extension to the GraphQL schema. + * + * Extensions allow defining custom behavior which can be added to fields + * via directive (in SDL) or on the `extensions` prop (with Type Builders). + * + * The extension definition takes a `name`, an `extend` function, and optional + * extension `args` for options. The `extend` function has to return a (partial) + * field config, and receives the extension options and the previous field config + * as arguments. + * + * @availableIn [createSchemaCustomization, sourceNodes] + * + * @param {GraphQLFieldExtensionDefinition} extension The field extension definition + * @example + * exports.createSchemaCustomization = ({ actions }) => { + * const { createFieldExtension } = actions + * createFieldExtension({ + * name: 'motivate', + * args: { + * caffeine: 'Int' + * }, + * extend(options, prevFieldConfig) { + * return { + * type: 'String', + * args: { + * sunshine: { + * type: 'Int', + * defaultValue: 0, + * }, + * }, + * resolve(source, args, context, info) { + * const motivation = (options.caffeine || 0) - args.sunshine + * if (motivation > 5) return 'Work! Work! Work!' + * return 'Maybe tomorrow.' + * }, + * } + * }, + * }) + * } + */ + createFieldExtension: ( + extension: GraphQLFieldExtensionDefinition, + plugin: IGatsbyPlugin, + traceId?: string + ): ThunkAction => ( + dispatch, + getState + ): void => { + const { name } = extension || {} + const { fieldExtensions } = getState().schemaCustomization + + if (!name) { + report.error( + `The provided field extension must have a \`name\` property.` + ) + } else if (reservedExtensionNames.includes(name)) { + report.error( + `The field extension name \`${name}\` is reserved for internal use.` + ) + } else if (fieldExtensions[name]) { + report.error( + `A field extension with the name \`${name}\` has already been registered.` + ) + } else { + dispatch({ + type: `CREATE_FIELD_EXTENSION`, + plugin, + traceId, + payload: { name, extension }, + }) + } + }, + + /** + * Write GraphQL schema to file + * + * Writes out inferred and explicitly specified type definitions. This is not + * the full GraphQL schema, but only the types necessary to recreate all type + * definitions, i.e. it does not include directives, built-ins, and derived + * types for filtering, sorting, pagination etc. Optionally, you can define a + * list of types to include/exclude. This is recommended to avoid including + * definitions for plugin-created types. + * + * @availableIn [createSchemaCustomization] + * + * @param {object} $0 + * @param {string} [$0.path] The path to the output file, defaults to `schema.gql` + * @param {object} [$0.include] Configure types to include + * @param {string[]} [$0.include.types] Only include these types + * @param {string[]} [$0.include.plugins] Only include types owned by these plugins + * @param {object} [$0.exclude] Configure types to exclude + * @param {string[]} [$0.exclude.types] Do not include these types + * @param {string[]} [$0.exclude.plugins] Do not include types owned by these plugins + * @param {boolean} [withFieldTypes] Include field types, defaults to `true` + */ + printTypeDefinitions: ( + { + path = `schema.gql`, + include, + exclude, + withFieldTypes = true, + }: { + path?: string + include?: { types?: Array; plugins?: Array } + exclude?: { types?: Array; plugins?: Array } + withFieldTypes?: boolean + }, + plugin: IGatsbyPlugin, + traceId?: string + ): IPrintTypeDefinitions => { + return { + type: `PRINT_SCHEMA_REQUESTED`, + plugin, + traceId, + payload: { + path, + include, + exclude, + withFieldTypes, + }, + } + }, + + /** + * Make functionality available on field resolver `context` + * + * @availableIn [createSchemaCustomization] + * + * @param {object} context Object to make available on `context`. + * When called from a plugin, the context value will be namespaced under + * the camel-cased plugin name without the "gatsby-" prefix + * @example + * const getHtml = md => remark().use(html).process(md) + * exports.createSchemaCustomization = ({ actions }) => { + * actions.createResolverContext({ getHtml }) + * } + * // The context value can then be accessed in any field resolver like this: + * exports.createSchemaCustomization = ({ actions }) => { + * actions.createTypes(schema.buildObjectType({ + * name: 'Test', + * interfaces: ['Node'], + * fields: { + * md: { + * type: 'String!', + * async resolve(source, args, context, info) { + * const processed = await context.transformerRemark.getHtml(source.internal.contents) + * return processed.contents + * } + * } + * } + * })) + * } + */ + createResolverContext: ( + context: IGatsbyPluginContext, + plugin: IGatsbyPlugin, + traceId?: string + ): ThunkAction => ( + dispatch + ): void => { + if (!context || typeof context !== `object`) { + report.error( + `Expected context value passed to \`createResolverContext\` to be an object. Received "${context}".` + ) + } else { + const { name } = plugin || {} + const payload = + !name || name === `default-site-plugin` + ? context + : { [camelCase(name.replace(/^gatsby-/, ``))]: context } + dispatch({ + type: `CREATE_RESOLVER_CONTEXT`, + plugin, + traceId, + payload, + }) + } + }, +} + +const withDeprecationWarning = ( + actionName: RestrictionActionNames, + action: SomeActionCreator, + api: API, + allowedIn: API[] +): SomeActionCreator => (...args: any[]): ReturnType> => { + report.warn( + `Calling \`${actionName}\` in the \`${api}\` API is deprecated. ` + + `Please use: ${allowedIn.map(a => `\`${a}\``).join(`, `)}.` + ) + return action(...args) +} + +const withErrorMessage = ( + actionName: RestrictionActionNames, + api: API, + allowedIn: API[] +) => () => + // return a thunk that does not dispatch anything + (): void => { + report.error( + `\`${actionName}\` is not available in the \`${api}\` API. ` + + `Please use: ${allowedIn.map(a => `\`${a}\``).join(`, `)}.` + ) + } + +const nodeAPIs = Object.keys(require(`../../utils/api-node-docs`)) + +const ALLOWED_IN = `ALLOWED_IN` +const DEPRECATED_IN = `DEPRECATED_IN` + +type API = string + +type Restrictions = Record< + RestrictionActionNames, + Partial<{ + ALLOWED_IN: API[] + DEPRECATED_IN: API[] + }> +> + +type AvailableActionsByAPI = Record< + API, + { [K in RestrictionActionNames]: SomeActionCreator } +> + +const set = ( + availableActionsByAPI: {}, + api: API, + actionName: RestrictionActionNames, + action: SomeActionCreator +): void => { + availableActionsByAPI[api] = availableActionsByAPI[api] || {} + availableActionsByAPI[api][actionName] = action +} + +const mapAvailableActionsToAPIs = ( + restrictions: Restrictions +): AvailableActionsByAPI => { + const availableActionsByAPI: AvailableActionsByAPI = {} + + const actionNames = Object.keys(restrictions) as (keyof typeof restrictions)[] + actionNames.forEach(actionName => { + const action = actions[actionName] + + const allowedIn: API[] = restrictions[actionName][ALLOWED_IN] || [] + allowedIn.forEach(api => + set(availableActionsByAPI, api, actionName, action) + ) + + const deprecatedIn: API[] = restrictions[actionName][DEPRECATED_IN] || [] + deprecatedIn.forEach(api => + set( + availableActionsByAPI, + api, + actionName, + withDeprecationWarning(actionName, action, api, allowedIn) + ) + ) + + const forbiddenIn = nodeAPIs.filter( + api => ![...allowedIn, ...deprecatedIn].includes(api) + ) + forbiddenIn.forEach(api => + set( + availableActionsByAPI, + api, + actionName, + withErrorMessage(actionName, api, allowedIn) + ) + ) + }) + + return availableActionsByAPI +} + +export const availableActionsByAPI = mapAvailableActionsToAPIs({ + createFieldExtension: { + [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], + }, + createTypes: { + [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], + [DEPRECATED_IN]: [`onPreInit`, `onPreBootstrap`], + }, + createResolverContext: { + [ALLOWED_IN]: [`createSchemaCustomization`], + }, + addThirdPartySchema: { + [ALLOWED_IN]: [`sourceNodes`, `createSchemaCustomization`], + [DEPRECATED_IN]: [`onPreInit`, `onPreBootstrap`], + }, + printTypeDefinitions: { + [ALLOWED_IN]: [`createSchemaCustomization`], + }, +}) diff --git a/packages/gatsby/src/redux/actions/types.js b/packages/gatsby/src/redux/actions/types.js deleted file mode 100644 index 5980f1797479d..0000000000000 --- a/packages/gatsby/src/redux/actions/types.js +++ /dev/null @@ -1,6 +0,0 @@ -// @flow -type Plugin = { - name: string, -} - -export type { Plugin } diff --git a/packages/gatsby/src/redux/nodes.ts b/packages/gatsby/src/redux/nodes.ts index 03c518d824304..5d952efe242ea 100644 --- a/packages/gatsby/src/redux/nodes.ts +++ b/packages/gatsby/src/redux/nodes.ts @@ -3,9 +3,27 @@ import { IGatsbyNode } from "./types" import { createPageDependency } from "./actions/add-page-dependency" import { IDbQueryElemMatch } from "../db/common/query" +// Only list supported ops here. "CacheableFilterOp" +type FilterOp = "$eq" | "$lte" +// Note: `undefined` is an encoding for a property that does not exist +type FilterValueNullable = string | number | boolean | null | undefined +// This is filter value in most cases +type FilterValue = string | number | boolean export type FilterCacheKey = string -export type FilterCache = Map> -export type FiltersCache = Map +export interface IFilterCache { + op: FilterOp + // In this set, `undefined` values represent nodes that did not have the path + byValue: Map> + meta: { + // Ordered set of all values found by this filter. No null / undefs. + valuesAsc?: Array + // Flat set of nodes, ordered by valueAsc, but not ordered per value group + nodesByValueAsc?: Array + // Ranges of nodes per value, maps to the nodesByValueAsc array + valueRanges?: Map + } +} +export type FiltersCache = Map /** * Get all nodes from redux store. @@ -152,24 +170,68 @@ export const addResolvedNodes = ( return resolvedNodes } +export const postIndexingMetaSetup = (filterCache: IFilterCache): void => { + // Create an ordered array of individual nodes, ordered (grouped) by the + // value to which the filter resolves. Nodes are not ordered per value. + // This way non-eq ops can simply slice the array to get a range. + + const entriesNullable: Array<[FilterValueNullable, Set]> = [ + ...filterCache.byValue.entries(), + ] + + // These range checks never return `null` or `undefined` so filter those out + // By filtering them out early, the sort should be faster. Could be ... + const entries: Array<[ + FilterValue, + Set + ]> = entriesNullable.filter(([v]) => v != null) as Array< + [FilterValue, Set] + > + + // Sort all sets by its value, asc. Ignore/allow potential type casting. + entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)) + + const orderedNodes: Array = [] + const orderedValues: Array = [] + const offsets: Map = new Map() + entries.forEach(([v, bucket]: [FilterValue, Set]) => { + // Record the range containing all nodes with as filter value v + // The last value of the range should be the offset of the next value + // (So you should be able to do `nodes.slice(start, stop)` to get them) + offsets.set(v, [orderedNodes.length, orderedNodes.length + bucket.size]) + // We could do `arr.push(...bucket)` here but that's not safe with very + // large sets, so we use a regular loop + bucket.forEach(node => orderedNodes.push(node)) + orderedValues.push(v) + }) + + filterCache.meta.valuesAsc = orderedValues + filterCache.meta.nodesByValueAsc = orderedNodes + // The nodesByValueAsc is ordered by value, but multiple nodes per value are + // not ordered. To make lt as fast as lte, we must know the start and stop + // index for each value. Similarly useful for for `ne`. + filterCache.meta.valueRanges = offsets +} + /** - * Given a ("flat") filter path leading up to "eq", a set of node types, and a + * Given a single non-elemMatch filter path, a set of node types, and a * cache, create a cache that for each resulting value of the filter contains - * all the Nodes in a Set (or, if the property is `id`, just the Nodes). + * all the Nodes in a Set. * This cache is used for applying the filter and is a massive improvement over - * looping over all the nodes, when the number of pages (/nodes) scale up. + * looping over all the nodes, when the number of pages (/nodes) scales up. */ -export const ensureIndexByTypedChain = ( - cacheKey: FilterCacheKey, - chain: string[], +export const ensureIndexByQuery = ( + op: FilterOp, + filterCacheKey: FilterCacheKey, + filterPath: string[], nodeTypeNames: string[], filtersCache: FiltersCache ): void => { const state = store.getState() const resolvedNodesCache = state.resolvedNodesCache - const filterCache: FilterCache = new Map() - filtersCache.set(cacheKey, filterCache) + const filterCache: IFilterCache = { op, byValue: new Map(), meta: {} } + filtersCache.set(filterCacheKey, filterCache) // We cache the subsets of nodes by type, but only one type. So if searching // through one node type we can prevent a search through all nodes, otherwise @@ -177,7 +239,7 @@ export const ensureIndexByTypedChain = ( if (nodeTypeNames.length === 1) { getNodesByType(nodeTypeNames[0]).forEach(node => { - addNodeToFilterCache(node, chain, filterCache, resolvedNodesCache) + addNodeToFilterCache(node, filterPath, filterCache, resolvedNodesCache) }) } else { // Here we must first filter for the node type @@ -187,15 +249,19 @@ export const ensureIndexByTypedChain = ( return } - addNodeToFilterCache(node, chain, filterCache, resolvedNodesCache) + addNodeToFilterCache(node, filterPath, filterCache, resolvedNodesCache) }) } + + if (op === `$lte`) { + postIndexingMetaSetup(filterCache) + } } function addNodeToFilterCache( node: IGatsbyNode, chain: Array, - filterCache: FilterCache, + filterCache: IFilterCache, resolvedNodesCache, valueOffset: any = node ): void { @@ -209,35 +275,44 @@ function addNodeToFilterCache( // - for plain query, valueOffset === node // - for elemMatch, valueOffset is sub-tree of the node to continue matching let v = valueOffset as any + let prev = v let i = 0 while (i < chain.length && v) { const nextProp = chain[i++] + prev = v v = v[nextProp] } if ( (typeof v !== `string` && typeof v !== `number` && - typeof v !== `boolean`) || + typeof v !== `boolean` && + v !== null) || i !== chain.length ) { - // Not sure whether this is supposed to happen, but this means that either - // - The node chain ended with `undefined`, or - // - The node chain ended in something other than a primitive, or - // - A part in the chain in the object was not an object - return + if (chain[i - 1] in prev) { + // This means that either + // - The filter resolved to `undefined`, or + // - The filter resolved to something other than a primitive + return + } + // The filter path did not fully exist in node. Encode this as `undefined`. + // The edge case is that `eq` will return these for `null` checks while + // range checks like `lte` do not return these, so we make a distinction. + v = undefined } - let set = filterCache.get(v) + let set = filterCache.byValue.get(v) if (!set) { set = new Set() - filterCache.set(v, set) + filterCache.byValue.set(v, set) } set.add(node) } export const ensureIndexByElemMatch = ( - cacheKey: FilterCacheKey, + op: FilterOp, + filterCacheKey: FilterCacheKey, filter: IDbQueryElemMatch, nodeTypeNames: Array, filtersCache: FiltersCache @@ -248,8 +323,8 @@ export const ensureIndexByElemMatch = ( const state = store.getState() const { resolvedNodesCache } = state - const filterCache: FilterCache = new Map() - filtersCache.set(cacheKey, filterCache) + const filterCache: IFilterCache = { op, byValue: new Map(), meta: {} } + filtersCache.set(filterCacheKey, filterCache) if (nodeTypeNames.length === 1) { getNodesByType(nodeTypeNames[0]).forEach(node => { @@ -277,13 +352,17 @@ export const ensureIndexByElemMatch = ( ) }) } + + if (op === `$lte`) { + postIndexingMetaSetup(filterCache) + } } function addNodeToBucketWithElemMatch( node: IGatsbyNode, valueAtCurrentStep: any, // Arbitrary step on the path inside the node filter: IDbQueryElemMatch, - filterCache: FilterCache, + filterCache: IFilterCache, resolvedNodesCache ): void { // There can be a filter that targets `__gatsby_resolved` so fix that first @@ -337,24 +416,127 @@ function addNodeToBucketWithElemMatch( } } +const binarySearch = ( + values: Array, + needle: FilterValue +): [number, number] | undefined => { + let min = 0 + let max = values.length - 1 + let pivot = Math.floor(values.length / 2) + while (min <= max) { + const value = values[pivot] + if (needle < value) { + // Move pivot to middle of nodes left of current pivot + // assert pivot < max + max = pivot + } else if (needle > value) { + // Move pivot to middle of nodes right of current pivot + // assert pivot > min + min = pivot + } else { + // This means needle === value + // TODO: except for NaN ... and potentially certain type casting cases + return [pivot, pivot] + } + + if (max - min <= 1) { + // End of search. Needle not found (as expected). Use pivot as index. + // If the needle was not found, max-min==1 and max is returned. + return [min, max] + } + + pivot = Math.floor((max - min) / 2) + } + + // Shouldn't be reachable, but just in case, fall back to Sift if so. + return undefined +} + /** - * Given a ("flat") filter path leading up to "eq", a target value to filter - * for, a set of node types, and a pre-generated lookup cache, return the set - * of Nodes (or, if the property is `id` just the Node) which pass the filter. - * This returns `undefined` if there is Node that passes the filter. + * Given the cache key for a filter and a target value return the set of nodes + * that resolve to this value. + * This returns `undefined` if there is no such node * * Basically if the filter was {a: {b: {slug: {eq: "foo/bar"}}}} then it will * return all the nodes that have `node.slug === "foo/bar"`. That usually (but * not always) at most one node for slug, but this filter can apply to anything. - * - * The only exception is `id`, since internally there can be at most one node - * per `id` so there's a minor optimization for that (no need for Sets). */ -export const getFilterCacheByTypedChain = ( - cacheKey: FilterCacheKey, - value: boolean | number | string, +export const getNodesFromCacheByValue = ( + filterCacheKey: FilterCacheKey, + filterValue: FilterValueNullable, filtersCache: FiltersCache ): Set | undefined => { - const byTypedKey = filtersCache?.get(cacheKey) - return byTypedKey?.get(value) + const filterCache = filtersCache?.get(filterCacheKey) + if (!filterCache) { + return undefined + } + + const op = filterCache.op + + if (op === `$eq`) { + if (filterValue == null) { + // Edge case; fetch all nodes for `null` and `undefined` because `$eq` + // also returns nodes without the path when searching for `null`. Not + // ops do so, so we map non-existing paths to `undefined`. + return new Set([ + ...(filterCache.byValue.get(null) ?? []), + ...(filterCache.byValue.get(undefined) ?? []), + ]) + } + return filterCache.byValue.get(filterValue) + } + + if (op === `$lte`) { + // First try a direct approach. If a value is queried that also exists then + // we can prevent a binary search through the whole set, O(1) vs O(log n) + + if (filterValue == null) { + // This is an edge case and this value should be directly indexed + // For `lte` this should only return nodes for `null`, not a "range" + return filterCache.byValue.get(filterValue) + } + + const ranges = filterCache.meta.valueRanges + const nodes = filterCache.meta.nodesByValueAsc + + const range = ranges!.get(filterValue) + if (range) { + return new Set(nodes!.slice(0, range[1])) + } + + // Query may ask for a value that doesn't appear in the set, like if the + // set is [1, 2, 5, 6] and the query is <= 3. In that case we have to + // apply a search (we'll do binary) to determine the offset to slice from. + + // Note: for lte, the valueAsc array must be set at this point + const values = filterCache.meta.valuesAsc as Array + // It shouldn't find the targetValue (but it might) and return the index of + // the two value between which targetValue sits, or first/last element. + const point = binarySearch(values, filterValue) + if (!point) { + return undefined + } + const [pivotMin, pivotMax] = point + // Each pivot index must have a value and a range + // The returned min/max index may include the lower/upper bound, so we still + // have to do lte checks for both values. + let pivotValue = values[pivotMax] + if (pivotValue > filterValue) { + pivotValue = values[pivotMin] + } + + // Note: the pivot value _shouldnt_ match the filter value because that + // means the value was actually found, but those should have been indexed + // so should have yielded a result in the .get() above. + + const [exclPivot, inclPivot] = ranges!.get(pivotValue) as [number, number] + + // Note: technically, `5 <= "5" === true` but `5` would not be cached. + // So we have to consider weak comparison and may have to include the pivot + const until = pivotValue <= filterValue ? inclPivot : exclPivot + return new Set(nodes!.slice(0, until)) + } + + // Unreachable because we checked all values of FilterOp (which op is) + return undefined } diff --git a/packages/gatsby/src/redux/persist.ts b/packages/gatsby/src/redux/persist.ts index 7bc4a0cba0c0c..68a049a0b7fdb 100644 --- a/packages/gatsby/src/redux/persist.ts +++ b/packages/gatsby/src/redux/persist.ts @@ -1,11 +1,12 @@ import path from "path" +import os from "os" import v8 from "v8" import { existsSync, mkdtempSync, + moveSync, // Note: moveSync over renameSync because /tmp may be on other mount readFileSync, removeSync, - renameSync, writeFileSync, } from "fs-extra" import { IGatsbyNode, ICachedReduxState } from "./types" @@ -130,7 +131,7 @@ function safelyRenameToBak(reduxCacheFolder: string): string { ++suffixCounter bakName = reduxCacheFolder + tmpSuffix + suffixCounter } - renameSync(reduxCacheFolder, bakName) + moveSync(reduxCacheFolder, bakName) return bakName } @@ -139,7 +140,7 @@ export function writeToCache(contents: ICachedReduxState): void { // Note: this should be a transactional operation. So work in a tmp dir and // make sure the cache cannot be left in a corruptable state due to errors. - const tmpDir = mkdtempSync(`reduxcache`) // linux / windows + const tmpDir = mkdtempSync(path.join(os.tmpdir(), `reduxcache`)) // linux / windows prepareCacheFolder(tmpDir, contents) @@ -156,7 +157,7 @@ export function writeToCache(contents: ICachedReduxState): void { } // The redux cache folder should now not exist so we can rename our tmp to it - renameSync(tmpDir, reduxCacheFolder) + moveSync(tmpDir, reduxCacheFolder) // Now try to yolorimraf the old cache folder try { diff --git a/packages/gatsby/src/redux/reducers/__tests__/redirects.js b/packages/gatsby/src/redux/reducers/__tests__/redirects.ts similarity index 86% rename from packages/gatsby/src/redux/reducers/__tests__/redirects.js rename to packages/gatsby/src/redux/reducers/__tests__/redirects.ts index 605500d55e604..76323bf7035fc 100644 --- a/packages/gatsby/src/redux/reducers/__tests__/redirects.js +++ b/packages/gatsby/src/redux/reducers/__tests__/redirects.ts @@ -1,9 +1,11 @@ +import { ICreateRedirectAction, IRedirect } from "../../types" + let reducer describe(`redirects`, () => { beforeEach(() => { jest.isolateModules(() => { - reducer = require(`../redirects`) + reducer = require(`../redirects`).redirectsReducer }) }) it(`lets you redirect to an internal url`, () => { @@ -15,7 +17,7 @@ describe(`redirects`, () => { }, } - let state = reducer(undefined, action) + const state = reducer(undefined, action) expect(state).toEqual([ { @@ -34,7 +36,7 @@ describe(`redirects`, () => { }, } - let state = reducer(undefined, action) + const state = reducer(undefined, action) expect(state).toEqual([ { @@ -73,7 +75,10 @@ describe(`redirects`, () => { }) it(`prevents duplicate redirects`, () => { - function createRedirect(fromPath, toPath) { + function createRedirect( + fromPath: string, + toPath: string + ): ICreateRedirectAction { return { type: `CREATE_REDIRECT`, payload: { fromPath, toPath }, @@ -92,7 +97,7 @@ describe(`redirects`, () => { }) it(`allows multiple redirects with same "fromPath" but different options`, () => { - function createRedirect(redirect) { + function createRedirect(redirect: IRedirect): ICreateRedirectAction { return { type: `CREATE_REDIRECT`, payload: redirect, diff --git a/packages/gatsby/src/redux/reducers/index.js b/packages/gatsby/src/redux/reducers/index.js index 67067487f1b42..86a4e2509a487 100644 --- a/packages/gatsby/src/redux/reducers/index.js +++ b/packages/gatsby/src/redux/reducers/index.js @@ -1,5 +1,6 @@ const reduxNodes = require(`./nodes`) const lokiNodes = require(`../../db/loki/nodes`).reducer +import { redirectsReducer } from "./redirects" const backend = process.env.GATSBY_DB_NODES || `redux` @@ -59,7 +60,7 @@ module.exports = { jobsV2: require(`./jobsv2`), webpack: require(`./webpack`), webpackCompilationHash: require(`./webpack-compilation-hash`), - redirects: require(`./redirects`), + redirects: redirectsReducer, babelrc: require(`./babelrc`), schemaCustomization: require(`./schema-customization`), themes: require(`./themes`), diff --git a/packages/gatsby/src/redux/reducers/redirects.js b/packages/gatsby/src/redux/reducers/redirects.js deleted file mode 100644 index ed8b072dc98fd..0000000000000 --- a/packages/gatsby/src/redux/reducers/redirects.js +++ /dev/null @@ -1,44 +0,0 @@ -const _ = require(`lodash`) - -const redirects = new Map() - -function exists(newRedirect) { - if (!redirects.has(newRedirect.fromPath)) { - return false - } - - return redirects - .get(newRedirect.fromPath) - .some(redirect => _.isEqual(redirect, newRedirect)) -} - -function add(redirect) { - let samePathRedirects = redirects.get(redirect.fromPath) - - if (!samePathRedirects) { - samePathRedirects = [] - redirects.set(redirect.fromPath, samePathRedirects) - } - - samePathRedirects.push(redirect) -} - -module.exports = (state = [], action) => { - switch (action.type) { - case `CREATE_REDIRECT`: { - const redirect = action.payload - - // Add redirect only if it wasn't yet added to prevent duplicates - if (!exists(redirect)) { - add(redirect) - - state.push(redirect) - } - - return state - } - - default: - return state - } -} diff --git a/packages/gatsby/src/redux/reducers/redirects.ts b/packages/gatsby/src/redux/reducers/redirects.ts new file mode 100644 index 0000000000000..716d0ebe3ed45 --- /dev/null +++ b/packages/gatsby/src/redux/reducers/redirects.ts @@ -0,0 +1,46 @@ +import _ from "lodash" +import { IGatsbyState, IRedirect, ICreateRedirectAction } from "../types" + +const redirects = new Map() + +function exists(newRedirect: IRedirect): boolean { + const fromPathRedirects = redirects.get(newRedirect.fromPath) + + if (!fromPathRedirects) return false + + return fromPathRedirects.some(redirect => _.isEqual(redirect, newRedirect)) +} + +function add(redirect: IRedirect): void { + let samePathRedirects = redirects.get(redirect.fromPath) + + if (!samePathRedirects) { + samePathRedirects = [] + redirects.set(redirect.fromPath, samePathRedirects) + } + + samePathRedirects.push(redirect) +} + +export const redirectsReducer = ( + state: IGatsbyState["redirects"] = [], + action: ICreateRedirectAction +): IGatsbyState["redirects"] => { + switch (action.type) { + case `CREATE_REDIRECT`: { + const redirect = action.payload + + // Add redirect only if it wasn't yet added to prevent duplicates + if (!exists(redirect)) { + add(redirect) + + state.push(redirect) + } + + return state + } + + default: + return state + } +} diff --git a/packages/gatsby/src/redux/run-sift.js b/packages/gatsby/src/redux/run-sift.js index bd511eaf7b2cd..0f3f1140ce963 100644 --- a/packages/gatsby/src/redux/run-sift.js +++ b/packages/gatsby/src/redux/run-sift.js @@ -14,13 +14,21 @@ const { dbQueryToSiftQuery, } = require(`../db/common/query`) const { - ensureIndexByTypedChain, + ensureIndexByQuery, ensureIndexByElemMatch, - getFilterCacheByTypedChain, + getNodesFromCacheByValue, addResolvedNodes, getNode: siftGetNode, } = require(`./nodes`) +const FAST_OPS = [ + `$eq`, + // "$lt", + `$lte`, + // "$gt", + // "$gte" +] + /** * Creates a key for one filterCache inside FiltersCache * @@ -28,7 +36,7 @@ const { * @param {DbQuery} filter * @returns {FilterCacheKey} (a string: `types.join()/path.join()/operator` ) */ -const createTypedFilterCacheKey = (typeNames, filter) => { +const createFilterCacheKey = (typeNames, filter) => { // Note: while `elemMatch` is a special case, in the key it's just `elemMatch` // (This function is future proof for elemMatch support, won't receive it yet) let f = filter @@ -129,13 +137,13 @@ function handleMany(siftArgs, nodes) { } /** - * Given the chain of a simple filter, return the set of nodes that pass the - * filter. The chain should be a property chain leading to the property to - * check, followed by the value to check against. Common example: - * `allThings(filter: { fields: { slug: { eq: $slug } } })` + * Given the path of a set of filters, return the sets of nodes that pass the + * filter. * Only nodes of given node types will be considered * A fast index is created if one doesn't exist yet so cold call is slower. - * The empty result value is null if firstOnly is false, or else an empty array. + * Returns undefined if an op was not supported for fast indexes or when no + * nodes were found for given (query) value. In the zero nodes case, we have to + * go through Sift to make sure we're not missing an edge case, for now. * * @param {Array} filters Resolved. (Should be checked by caller to exist) * @param {Array} nodeTypeNames @@ -143,23 +151,33 @@ function handleMany(siftArgs, nodes) { * @returns {Array | undefined} */ const runFiltersWithoutSift = (filters, nodeTypeNames, filtersCache) => { - const caches = getBucketsForFilters(filters, nodeTypeNames, filtersCache) + const nodesPerValueSets /*: Array> */ = getBucketsForFilters( + filters, + nodeTypeNames, + filtersCache + ) - if (!caches) { + if (!nodesPerValueSets) { // Let Sift take over as fallback return undefined } // Put smallest last (we'll pop it) - caches.sort((a, b) => b.length - a.length) + nodesPerValueSets.sort( + (a /*: Set */, b /*: Set */) => b.size - a.size + ) // Iterate on the set with the fewest elements and create the intersection - const needles = caches.pop() + const needles /*: Set*/ = nodesPerValueSets.pop() // Take the intersection of the retrieved caches-by-value - const result = [] + const result /*: Array */ = [] // This _can_ still be expensive but the set of nodes should be limited ... - needles.forEach(node => { - if (caches.every(cache => cache.has(node))) { + needles.forEach((node /*: IGatsbyNode */) => { + if ( + nodesPerValueSets.every((cache /*: Set */) => + cache.has(node) + ) + ) { // Every cache set contained this node so keep it result.push(node) } @@ -169,6 +187,9 @@ const runFiltersWithoutSift = (filters, nodeTypeNames, filtersCache) => { // Consider the case of {a: {eq: 5}, b: {eq: 10}}, do we cache the [5,10] // case for all value pairs? How likely is that to ever be reused? + if (result.length === 0) { + return undefined + } return result } @@ -180,36 +201,36 @@ const runFiltersWithoutSift = (filters, nodeTypeNames, filtersCache) => { * cache was not found. Must fallback to sift. */ const getBucketsForFilters = (filters, nodeTypeNames, filtersCache) => { - const filterCaches /*: Array*/ = [] + const nodesPerValueSets /*: Array>*/ = [] // Fail fast while trying to create and get the value-cache for each path let every = filters.every((filter /*: DbQuery*/) => { - let cacheKey = createTypedFilterCacheKey(nodeTypeNames, filter) + let filterCacheKey = createFilterCacheKey(nodeTypeNames, filter) if (filter.type === `query`) { // (Let TS warn us if a new query type gets added) const q /*: IDbQueryQuery */ = filter return getBucketsForQueryFilter( - cacheKey, + filterCacheKey, q, nodeTypeNames, filtersCache, - filterCaches + nodesPerValueSets ) } else { // (Let TS warn us if a new query type gets added) const q /*: IDbQueryElemMatch*/ = filter return collectBucketForElemMatch( - cacheKey, + filterCacheKey, q, nodeTypeNames, filtersCache, - filterCaches + nodesPerValueSets ) } }) if (every) { - return filterCaches + return nodesPerValueSets } // "failed at least one" @@ -219,62 +240,72 @@ const getBucketsForFilters = (filters, nodeTypeNames, filtersCache) => { /** * Fetch all buckets for given query filter. That means it's not elemMatch. * - * @param {FilterCacheKey} cacheKey + * @param {FilterCacheKey} filterCacheKey * @param {IDbQueryQuery} filter * @param {Array} nodeTypeNames * @param {FiltersCache} filtersCache - * @param {Array} filterCaches + * @param {Array>} nodesPerValueSets * @returns {boolean} false means soft fail, filter must go through Sift */ const getBucketsForQueryFilter = ( - cacheKey, + filterCacheKey, filter, nodeTypeNames, filtersCache, - filterCaches + nodesPerValueSets ) => { let { - path: chain, - query: { value: targetValue }, + path: filterPath, + query: { + // Note: comparator is verified to be a FilterOp in filterWithoutSift + comparator /*: as FilterOp*/, + value: filterValue, + }, } = filter - if (!filtersCache.has(cacheKey)) { - ensureIndexByTypedChain(cacheKey, chain, nodeTypeNames, filtersCache) + if (!filtersCache.has(filterCacheKey)) { + ensureIndexByQuery( + comparator, + filterCacheKey, + filterPath, + nodeTypeNames, + filtersCache + ) } - const filterCache = getFilterCacheByTypedChain( - cacheKey, - targetValue, + const nodesPerValue /*: Set | undefined */ = getNodesFromCacheByValue( + filterCacheKey, + filterValue, filtersCache ) // If we couldn't find the needle then maybe sift can, for example if the // schema contained a proxy; `slug: String @proxy(from: "slugInternal")` // There are also cases (and tests) where id exists with a different type - if (!filterCache) { + if (!nodesPerValue) { return false } // In all other cases this must be a non-empty Set because the indexing // mechanism does not create a Set unless there's a IGatsbyNode for it - filterCaches.push(filterCache) + nodesPerValueSets.push(nodesPerValue) return true } /** - * @param {string} typedKey + * @param {FilterCacheKey} filterCacheKey * @param {IDbQueryElemMatch} filter * @param {Array} nodeTypeNames * @param {FiltersCache} filtersCache - * @param {Array} filterCaches Matching node sets are put in this array + * @param {Array>} nodesPerValueSets Matching node sets are put in this array */ const collectBucketForElemMatch = ( - typedKey, + filterCacheKey, filter, nodeTypeNames, filtersCache, - filterCaches + nodesPerValueSets ) => { // Get comparator and target value for this elemMatch let comparator = `` @@ -292,22 +323,22 @@ const collectBucketForElemMatch = ( } } - if ( - ![ - `$eq`, - // "$lte", - // "$gte", - ].includes(comparator) - ) { + if (!FAST_OPS.includes(comparator)) { return false } - if (!filtersCache.has(typedKey)) { - ensureIndexByElemMatch(typedKey, filter, nodeTypeNames, filtersCache) + if (!filtersCache.has(filterCacheKey)) { + ensureIndexByElemMatch( + comparator, + filterCacheKey, + filter, + nodeTypeNames, + filtersCache + ) } - const nodesByKeyValue /*: Set | undefined*/ = getFilterCacheByTypedChain( - typedKey, + const nodesByValue /*: Set | undefined*/ = getNodesFromCacheByValue( + filterCacheKey, targetValue, filtersCache ) @@ -315,13 +346,13 @@ const collectBucketForElemMatch = ( // If we couldn't find the needle then maybe sift can, for example if the // schema contained a proxy; `slug: String @proxy(from: "slugInternal")` // There are also cases (and tests) where id exists with a different type - if (!nodesByKeyValue) { + if (!nodesByValue) { return false } // In all other cases this must be a non-empty Set because the indexing // mechanism does not create a Set unless there's a IGatsbyNode for it - filterCaches.push(nodesByKeyValue) + nodesPerValueSets.push(nodesByValue) return true } @@ -330,7 +361,6 @@ const collectBucketForElemMatch = ( * Filters and sorts a list of nodes using mongodb-like syntax. * * @param args raw graphql query filter/sort as an object - * @property {boolean | number | string} args.type gqlType. See build-node-types * @property {boolean} args.firstOnly true if you want to return only the first * result found. This will return a collection of size 1. Not a single element * @property {{filter?: Object, sort?: Object} | undefined} args.queryArgs @@ -444,9 +474,11 @@ const filterToStats = ( } /** - * Check if the filter is "flat" (single leaf) and an "$eq". If so, uses custom - * indexes based on filter and types and returns any result it finds. - * If conditions are not met or no nodes are found, returns undefined. + * Check if filter op is supported (not all are). If so, uses custom + * fast indexes based on filter and types and returns any result it finds. + * If conditions are not met or no nodes are found, returns undefined and + * a slow run through Sift is executed instead. + * This function is a noop if no filter cache is given to it. * * @param {Array} filters Resolved. (Should be checked by caller to exist) * @param {Array} nodeTypeNames @@ -454,8 +486,6 @@ const filterToStats = ( * @returns {Array | undefined} Collection of results */ const filterWithoutSift = (filters, nodeTypeNames, filtersCache) => { - // This can also be `$ne`, `$in` or any other grapqhl comparison op - if (!filtersCache) { // If no filter cache is passed on, explicitly don't use one return undefined @@ -463,17 +493,14 @@ const filterWithoutSift = (filters, nodeTypeNames, filtersCache) => { if (filters.length === 0) { // If no filters are given, go through Sift. This does not appear to be - // slower than s - // hortcutting it here. + // slower than shortcutting it here. return undefined } if ( filters.some( filter => - filter.type === `query` && // enabled - // filter.type === `elemMatch` || // disabled - ![`$eq`].includes(filter.query.comparator) + filter.type === `query` && !FAST_OPS.includes(filter.query.comparator) ) ) { // If there's a filter with non-supported op, stop now. diff --git a/packages/gatsby/src/redux/types.ts b/packages/gatsby/src/redux/types.ts index dce585b7f6970..b871c5bd76f0b 100644 --- a/packages/gatsby/src/redux/types.ts +++ b/packages/gatsby/src/redux/types.ts @@ -1,11 +1,21 @@ import { IProgram } from "../commands/types" -import { GraphQLSchema } from "graphql" +import { GraphQLFieldExtensionDefinition } from "../schema/extensions" +import { DocumentNode, GraphQLSchema } from "graphql" import { SchemaComposer } from "graphql-compose" type SystemPath = string type Identifier = string type StructuredLog = any // TODO this should come from structured log interface +export interface IRedirect { + fromPath: string + toPath: string + isPermanent?: boolean + redirectInBrowser?: boolean + // Users can add anything to this createRedirect API + [key: string]: any +} + export enum ProgramStatus { BOOTSTRAP_FINISHED = `BOOTSTRAP_FINISHED`, BOOTSTRAP_QUERY_RUNNING_FINISHED = `BOOTSTRAP_QUERY_RUNNING_FINISHED`, @@ -62,6 +72,15 @@ export interface IGatsbyNode { [key: string]: unknown } +export interface IGatsbyPlugin { + name: string + version: string +} + +export interface IGatsbyPluginContext { + [key: string]: (...args: any[]) => any +} + type GatsbyNodes = Map export interface IGatsbyState { @@ -140,7 +159,7 @@ export interface IGatsbyState { } webpack: any // TODO This should be the output from ./utils/webpack.config.js webpackCompilationHash: string - redirects: any[] // TODO + redirects: IRedirect[] babelrc: { stages: { develop: any // TODO @@ -214,6 +233,10 @@ export type ActionsUnion = | IQueryExtractionBabelErrorAction | ISetProgramStatusAction | IPageQueryRunAction + | IAddThirdPartySchema + | ICreateTypes + | ICreateFieldExtension + | IPrintTypeDefinitions export interface ICreatePageDependencyAction { type: `CREATE_COMPONENT_DEPENDENCY` @@ -242,7 +265,7 @@ export interface IReplaceComponentQueryAction { export interface IReplaceStaticQueryAction { type: `REPLACE_STATIC_QUERY` - plugin: Plugin | null | undefined + plugin: IGatsbyPlugin | null | undefined payload: { name: string componentPath: string @@ -254,28 +277,28 @@ export interface IReplaceStaticQueryAction { export interface IQueryExtractedAction { type: `QUERY_EXTRACTED` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: { componentPath: string; query: string } } export interface IQueryExtractionGraphQLErrorAction { type: `QUERY_EXTRACTION_GRAPHQL_ERROR` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: { componentPath: string; error: string } } export interface IQueryExtractedBabelSuccessAction { type: `QUERY_EXTRACTION_BABEL_SUCCESS` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: { componentPath: string } } export interface IQueryExtractionBabelErrorAction { type: `QUERY_EXTRACTION_BABEL_ERROR` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: { componentPath: string @@ -285,21 +308,71 @@ export interface IQueryExtractionBabelErrorAction { export interface ISetProgramStatusAction { type: `SET_PROGRAM_STATUS` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: ProgramStatus } export interface IPageQueryRunAction { type: `PAGE_QUERY_RUN` - plugin: Plugin + plugin: IGatsbyPlugin traceId: string | undefined payload: { path: string; componentPath: string; isPage: boolean } } export interface IRemoveStaleJobAction { type: `REMOVE_STALE_JOB_V2` - plugin: Plugin + plugin: IGatsbyPlugin traceId?: string payload: { contentDigest: string } } + +export interface IAddThirdPartySchema { + type: `ADD_THIRD_PARTY_SCHEMA` + plugin: IGatsbyPlugin + traceId?: string + payload: GraphQLSchema +} + +export interface ICreateTypes { + type: `CREATE_TYPES` + plugin: IGatsbyPlugin + traceId?: string + payload: DocumentNode | DocumentNode[] +} + +export interface ICreateFieldExtension { + type: `CREATE_FIELD_EXTENSION` + plugin: IGatsbyPlugin + traceId?: string + payload: { + name: string + extension: GraphQLFieldExtensionDefinition + } +} + +export interface IPrintTypeDefinitions { + type: `PRINT_SCHEMA_REQUESTED` + plugin: IGatsbyPlugin + traceId?: string + payload: { + path?: string + include?: { types?: Array; plugins?: Array } + exclude?: { types?: Array; plugins?: Array } + withFieldTypes?: boolean + } +} + +export interface ICreateResolverContext { + type: `CREATE_RESOLVER_CONTEXT` + plugin: IGatsbyPlugin + traceId?: string + payload: + | IGatsbyPluginContext + | { [camelCasedPluginNameWithoutPrefix: string]: IGatsbyPluginContext } +} + +export interface ICreateRedirectAction { + type: `CREATE_REDIRECT` + payload: IRedirect +} diff --git a/packages/gatsby/src/schema/__tests__/node-model.js b/packages/gatsby/src/schema/__tests__/node-model.js index cb736bab5680f..21222402b5bd3 100644 --- a/packages/gatsby/src/schema/__tests__/node-model.js +++ b/packages/gatsby/src/schema/__tests__/node-model.js @@ -296,7 +296,7 @@ describe(`NodeModel`, () => { filter: { frontmatter: { published: { eq: false } } }, } const firstOnly = true - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query, firstOnly, @@ -311,7 +311,7 @@ describe(`NodeModel`, () => { filter: { frontmatter: { published: { eq: false } } }, } const firstOnly = false - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query, firstOnly, @@ -328,7 +328,7 @@ describe(`NodeModel`, () => { filter: { frontmatter: { published: { eq: false } } }, } const firstOnly = false - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query, @@ -354,7 +354,7 @@ describe(`NodeModel`, () => { filter: { frontmatter: { published: { eq: false } } }, } const firstOnly = false - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.withContext({ path: `/` }).runQuery({ query, firstOnly, @@ -377,7 +377,7 @@ describe(`NodeModel`, () => { filter: { frontmatter: { published: { eq: false } } }, } const firstOnly = false - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query, @@ -397,7 +397,7 @@ describe(`NodeModel`, () => { const type = `AllFiles` const query = {} const firstOnly = true - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = nodeModel.runQuery({ query, firstOnly, @@ -412,7 +412,7 @@ describe(`NodeModel`, () => { const type = `TeamMember` const query = { name: { ne: null } } const firstOnly = true - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query, firstOnly, @@ -429,7 +429,7 @@ describe(`NodeModel`, () => { }, } const firstOnly = false - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query, firstOnly, @@ -448,7 +448,7 @@ describe(`NodeModel`, () => { }, } const firstOnly = true - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query, firstOnly, @@ -457,6 +457,33 @@ describe(`NodeModel`, () => { expect(result).toBeDefined() expect(result.id).toEqual(`post2`) }) + + // FIXME: Filters on date instances are not supported yet + // SIFT requires such filters to be expressed as Date instances but we + // don't know if date is stored as `Date` instance or `string` + // so can't really do that + // See https://github.com/crcn/sift.js#date-comparison + it.skip(`queries date instances in nodes`, async () => { + const type = `Post` + const query = { + filter: { + frontmatter: { + date: { lte: `2018-01-01T00:00:00Z` }, + }, + }, + } + const firstOnly = false + nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + const result = await nodeModel.runQuery({ + query, + firstOnly, + type, + }) + expect(result).toBeDefined() + expect(result.length).toEqual(2) + expect(result[0].id).toEqual(`post2`) + expect(result[1].id).toEqual(`post3`) + }) }) }) @@ -555,7 +582,7 @@ describe(`NodeModel`, () => { { desc: `no cache`, cb: () => null }, // Always goes through sift ].forEach(({ desc, cb: createFiltersCache }) => { it(`[${desc}] should not resolve prepared nodes more than once`, async () => { - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query: { filter: { betterTitle: { eq: `foo` } } }, @@ -566,7 +593,7 @@ describe(`NodeModel`, () => { ) expect(resolveBetterTitleMock.mock.calls.length).toBe(2) expect(resolveOtherTitleMock.mock.calls.length).toBe(0) - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query: { filter: { betterTitle: { eq: `foo` } } }, @@ -577,7 +604,7 @@ describe(`NodeModel`, () => { ) expect(resolveBetterTitleMock.mock.calls.length).toBe(2) expect(resolveOtherTitleMock.mock.calls.length).toBe(0) - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query: { @@ -590,7 +617,7 @@ describe(`NodeModel`, () => { ) expect(resolveBetterTitleMock.mock.calls.length).toBe(2) expect(resolveOtherTitleMock.mock.calls.length).toBe(2) - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query: { @@ -603,7 +630,7 @@ describe(`NodeModel`, () => { ) expect(resolveBetterTitleMock.mock.calls.length).toBe(2) expect(resolveOtherTitleMock.mock.calls.length).toBe(2) - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) await nodeModel.runQuery( { query: { @@ -619,7 +646,7 @@ describe(`NodeModel`, () => { }) it(`[${desc}] can filter by resolved fields`, async () => { - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery( { query: { @@ -769,7 +796,7 @@ describe(`NodeModel`, () => { ].forEach(({ desc, cb: createFiltersCache }) => { describe(`[${desc}] Tracks nodes returned by queries`, () => { it(`Tracks objects when running query without filter`, async () => { - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query: {}, type: schema.getType(`Test`), @@ -786,7 +813,7 @@ describe(`NodeModel`, () => { }) it(`Tracks objects when running query with filter`, async () => { - nodeModel.replaceTypeKeyValueCache(createFiltersCache()) + nodeModel.replaceFiltersCache(createFiltersCache()) const result = await nodeModel.runQuery({ query: { filter: { diff --git a/packages/gatsby/src/schema/__tests__/run-query.js b/packages/gatsby/src/schema/__tests__/run-query.js index cad1d109f06e7..9c2d373a94790 100644 --- a/packages/gatsby/src/schema/__tests__/run-query.js +++ b/packages/gatsby/src/schema/__tests__/run-query.js @@ -216,9 +216,11 @@ function resetDb(nodes) { ) } +let nodesAfterLastRunQuery async function runQuery(queryArgs, filtersCache) { const nodes = makeNodes() resetDb(nodes) + nodesAfterLastRunQuery = nodes const { sc, type: gqlType } = makeGqlType(nodes) const args = { gqlType, @@ -248,12 +250,17 @@ it(`should use the cache argument`, async () => { // Confirm cache is not ignored expect(filtersCache.size === 1).toBe(true) - filtersCache.forEach((filterCache, cacheKey) => { + filtersCache.forEach(( + filterCache /*: FilterCache */, + cacheKey /*: FilterCacheKey */ + ) => { // This test will change when the composition of the FilterCache changes // For now it should be a Map of values to Set of nodes - expect(filterCache instanceof Map).toBe(true) + expect(filterCache instanceof Object).toBe(true) + expect(filterCache.byValue instanceof Map).toBe(true) + expect(filterCache.meta instanceof Object).toBe(true) // There ought to be at least one value mapped (probably more, shrug) - expect(filterCache.size >= 1).toBe(true) + expect(filterCache.byValue.size >= 1).toBe(true) }) }) @@ -367,8 +374,7 @@ it(`should use the cache argument`, async () => { let result = await runFilter({ hair: { lt: 2 } }) expect(result.length).toEqual(2) - expect(result[0].hair).toEqual(1) - expect(result[1].hair).toEqual(0) + result.forEach(r => expect(r.hair <= 2).toBe(true)) }) it(`handles lt operator with null`, async () => { @@ -383,9 +389,68 @@ it(`should use the cache argument`, async () => { it(`handles lte operator with number`, async () => { let result = await runFilter({ hair: { lte: 1 } }) - expect(result.length).toEqual(2) - expect(result[0].hair).toEqual(1) - expect(result[1].hair).toEqual(0) + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.hair <= 1 ? acc + 1 : acc), + 0 + ) + + expect(actual).not.toBe(0) // Test should keep this invariant! + expect(result.length).toEqual(actual) + result.forEach(r => expect(r.hair <= 1).toBe(true)) + }) + + it(`should lte when value is lower than all found values`, async () => { + if (IS_LOKI) return + + let result = await runFilter({ float: { lte: 1 } }) + + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.float <= 1 ? acc + 1 : acc), + 0 + ) + + expect(actual).toEqual(0) // Make sure test nodes keep this invariant! + expect(result).toEqual(null) // Zero results yields null + }) + + it(`should lte when value is in the middle of all found values`, async () => { + let result = await runFilter({ float: { lte: 2 } }) + + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.float <= 2 ? acc + 1 : acc), + 0 + ) + + expect(result.length).toEqual(actual) + result.forEach(r => expect(r.float <= 2).toBe(true)) + }) + + it(`should lte when value is higher than all found values`, async () => { + let result = await runFilter({ float: { lte: 5 } }) + + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.float <= 5 ? acc + 1 : acc), + 0 + ) + + expect(result.length).toEqual(actual) + }) + + it.skip(`should lte when type coercion fails direct value lookup`, async () => { + // Here 1.5 exists but only as number. However, `1.5 <= '1.5' === true` + // This test checks whether we don't incorrectly assume that if the + // value wasn't mapped, that it can't be found. + let result = await runFilter({ float: { lte: `1.5` } }) + + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.float <= 1.5 ? acc + 1 : acc), + 0 + ) + + expect(result).not.toBe(undefined) + expect(result).not.toBe(null) + expect(result.length).toEqual(actual) + result.forEach(r => expect(r.float <= 2).toBe(true)) }) it(`handles lte operator with null`, async () => { @@ -393,8 +458,14 @@ it(`should use the cache argument`, async () => { let result = await runFilter({ nil: { lte: null } }) + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.nil <= null ? acc + 1 : acc), + 0 + ) + // lte null matches null but no nodes without the property (NULL) - expect(result.length).toEqual(1) + expect(actual).not.toBe(0) // Test should keep this invariant! + expect(result.length).toEqual(actual) expect(result[0].name).toEqual(`The Mad Wax`) expect(result[0].nil).toEqual(null) }) @@ -419,9 +490,14 @@ it(`should use the cache argument`, async () => { it(`handles gte operator with number`, async () => { let result = await runFilter({ hair: { gte: 1 } }) - expect(result.length).toEqual(2) - expect(result[0].hair).toEqual(1) - expect(result[1].hair).toEqual(2) + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.hair >= 1 ? acc + 1 : acc), + 0 + ) + + expect(actual).not.toBe(0) // Test invariant should hold + expect(result.length).toEqual(actual) + result.forEach(r => expect(r.hair >= 1).toBe(true)) }) it(`handles gte operator with null`, async () => { @@ -429,10 +505,18 @@ it(`should use the cache argument`, async () => { let result = await runFilter({ nil: { gte: null } }) - // lte null matches null but no nodes without the property (NULL) - expect(result.length).toEqual(1) - expect(result[0].name).toEqual(`The Mad Wax`) - expect(result[0].nil).toEqual(null) + let actual = nodesAfterLastRunQuery.reduce( + (acc, node) => (node.nil >= null ? acc + 1 : acc), + 0 + ) + + // gte null matches null but no nodes without the property (NULL) + expect(actual).not.toBe(0) // Test invariant should hold + expect(result.length).toEqual(actual) + result.forEach( + // Note: confirm no `null` is returned for >= null + r => expect(r.nil === null).toBe(true) + ) }) it(`handles the regex operator without flags`, async () => { @@ -590,6 +674,9 @@ it(`should use the cache argument`, async () => { }) expect(result.length).toEqual(1) + expect( + result[0]?.singleElem?.things.some(e => e?.one?.two?.three === 123) + ).toEqual(true) }) it(`handles the elemMatch operator on the second element`, async () => { @@ -803,12 +890,14 @@ it(`should use the cache argument`, async () => { // nodes that do not have the field at all (NULL). expect(result.length).toEqual(2) - result.forEach(edge => { - // Either does not exist or does not contain - expect(edge.anArray === undefined || !edge.anArray.includes(5)).toBe( - true - ) - }) + // Either does not exist or does not contain + result + .filter(edge => edge.anArray !== undefined) + .forEach(edge => { + // In this test, if the property exists it should be an array + expect(Array.isArray(edge.anArray)).toBe(true) + expect(edge.anArray.includes(5)).toBe(false) + }) }) it(`handles the nin operator for array [null]`, async () => { diff --git a/packages/gatsby/src/schema/node-model.js b/packages/gatsby/src/schema/node-model.js index a7c7fd8853afd..638378b0719b2 100644 --- a/packages/gatsby/src/schema/node-model.js +++ b/packages/gatsby/src/schema/node-model.js @@ -71,7 +71,7 @@ class LocalNodeModel { this._prepareNodesQueues = {} this._prepareNodesPromises = {} this._preparedNodesCache = new Map() - this.replaceTypeKeyValueCache() + this.replaceFiltersCache() } /** @@ -84,7 +84,7 @@ class LocalNodeModel { * actually queried. If the filter targets `id` directly, only one Node is * cached instead of a Set of Nodes. If null, don't create or use a cache. */ - replaceTypeKeyValueCache(map = new Map()) { + replaceFiltersCache(map = new Map()) { this._filtersCache = map // See redux/nodes.js for usage } diff --git a/packages/gatsby/src/types.ts b/packages/gatsby/src/types.ts index 1835e473fc1dc..66727d89500b5 100644 --- a/packages/gatsby/src/types.ts +++ b/packages/gatsby/src/types.ts @@ -2,7 +2,7 @@ export interface IMatch { id: string context: { sourceMessage: string - [key: string]: string + [key: string]: string | boolean } error?: Error | undefined [key: string]: unknown diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index a37c90f315bfc..993055a638cda 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -530,10 +530,13 @@ module.exports = async ( reuseExistingChunk: true, }, commons: { + // only bundle non-async modules + chunks: `initial`, name: `commons`, - // if a chunk is used on all components we put it in commons - minChunks: componentsCount, + // if a chunk is used on all components we put it in commons (we need at least 2 components) + minChunks: Math.max(componentsCount, 2), priority: 20, + reuseExistingChunk: true, }, // If a chunk is used in at least 2 components we create a separate chunk shared: { diff --git a/scripts/check-ts.js b/scripts/check-ts.js index 9aca0ca9641d9..68df1d3b4e551 100644 --- a/scripts/check-ts.js +++ b/scripts/check-ts.js @@ -15,7 +15,8 @@ const execa = require(`execa`) console.log(`TS Check: Running...`) -const PACKAGES_DIR = path.resolve(__dirname, `../packages`) +const toAbsolutePath = relativePath => path.join(__dirname, `..`, relativePath) +const PACKAGES_DIR = toAbsolutePath(`/packages`) const filterPackage = yargs.argv._[0] @@ -59,9 +60,34 @@ if (filterPackage) { } } +let totalTsFiles = 0 +let totalJsFiles = 0 + packagesWithTs.forEach(project => { + const tsFiles = glob.sync( + toAbsolutePath( + `./packages/${project.split(/.*packages[/\\]/)[1]}/src/**/*.ts` + ) + ).length + + const jsFiles = glob.sync( + toAbsolutePath( + `./packages/${project.split(/.*packages[/\\]/)[1]}/src/**/*.js` + ) + ).length + + totalTsFiles += tsFiles + totalJsFiles += jsFiles + + const percentConverted = Number( + ((tsFiles / (jsFiles + tsFiles)) * 100).toFixed(1) + ) + console.log( - `TS Check: Checking ./packages/${project.split(/.*packages[/\\]/)[1]}` + `TS Check: Checking ./packages/${project.split(/.*packages[/\\]/)[1]}`, + `\n - TS Files: ${tsFiles}`, + `\n - JS Files: ${jsFiles}`, + `\n - Percent Converted: ${percentConverted}%` ) const args = [ @@ -84,3 +110,15 @@ packagesWithTs.forEach(project => { }) console.log(`TS Check: Success`) + +if (!filterPackage) { + const percentConverted = Number( + ((totalTsFiles / (totalJsFiles + totalTsFiles)) * 100).toFixed(1) + ) + + console.log( + ` - Total TS Files: ${totalJsFiles}`, + `\n - Total JS Files: ${totalJsFiles}`, + `\n - Percent Converted: ${percentConverted}%` + ) +} diff --git a/scripts/e2e-test.sh b/scripts/e2e-test.sh index 1532bb95a2f0c..509f900a73c54 100755 --- a/scripts/e2e-test.sh +++ b/scripts/e2e-test.sh @@ -3,7 +3,7 @@ SRC_PATH=$1 CUSTOM_COMMAND="${2:-yarn test}" GATSBY_PATH="${CIRCLE_WORKING_DIRECTORY:-../../}" -# cypress docker does not support sudo and do not need it but the default node executor does +# cypress docker does not support sudo and does not need it, but the default node executor does command -v sudo && sudo npm install -g gatsby-dev-cli || npm install -g gatsby-dev-cli && # setting up child integration test link to gatsby packages diff --git a/scripts/i18n/README.md b/scripts/i18n/README.md index 6b7654ccce566..8211f63214653 100644 --- a/scripts/i18n/README.md +++ b/scripts/i18n/README.md @@ -70,3 +70,13 @@ When run, the script will: - Pulls the latest version of `gatsby-i18n-source`. - Creates a "sync" pull request that updates all files that do not contain conflicts from the merge. - Creates a "conflicts" pull request that contains all merge conflicts, with instructions on how to resolve them. + +### `run-all` + +Usage: + +```shell +yarn run-all [script name] +``` + +The `run-all` script runs the script provided in the argument across all languages for which there are translations of gatbyjs.org, listed in /www/src/i18n.json. diff --git a/scripts/i18n/package.json b/scripts/i18n/package.json index b8795edc8fef0..1c60f22081e4f 100644 --- a/scripts/i18n/package.json +++ b/scripts/i18n/package.json @@ -4,6 +4,7 @@ "description": "Scripts for gatsby internationalization", "scripts": { "create": "node ./create.js", + "run-all": "node ./run-all.js", "sync": "node ./sync.js", "update-source": "node ./update-source.js" }, diff --git a/scripts/i18n/run-all.js b/scripts/i18n/run-all.js new file mode 100644 index 0000000000000..3cac7e235ac4a --- /dev/null +++ b/scripts/i18n/run-all.js @@ -0,0 +1,21 @@ +// Run the provided script on all valid repos +const fs = require(`fs`) +const log4js = require(`log4js`) +const shell = require(`shelljs`) +let logger = log4js.getLogger(`run-all`) + +require(`dotenv`).config() + +function runAll(script) { + if (!script) { + logger.error(`Usage: yarn run-all `) + process.exit(1) + } + const langs = JSON.parse(fs.readFileSync(`../../www/i18n.json`)) + for (const { code } of langs) { + shell.exec(`yarn ${script} ${code}`) + } +} + +const [script] = process.argv.slice(2) +runAll(script) diff --git a/scripts/i18n/sync.js b/scripts/i18n/sync.js index fed6e12634fc8..a59690c70fda6 100644 --- a/scripts/i18n/sync.js +++ b/scripts/i18n/sync.js @@ -1,11 +1,12 @@ const log4js = require(`log4js`) const shell = require(`shelljs`) -const { graphql } = require(`@octokit/graphql`) +const { graphql: baseGraphql } = require(`@octokit/graphql`) let logger = log4js.getLogger(`sync`) require(`dotenv`).config() -const host = `https://github.com` +const token = process.env.GITHUB_API_TOKEN +const host = `https://${token}@github.com` const cacheDir = `.cache` const owner = `gatsbyjs` const repoBase = `gatsby` @@ -14,6 +15,7 @@ const sourceRepo = `gatsby-i18n-source` const sourceRepoUrl = `${host}/${owner}/${sourceRepo}` const sourceRepoGitUrl = `${sourceRepoUrl}.git` +const syncLabelName = `sync` // get the git short hash function getShortHash(hash) { @@ -33,25 +35,68 @@ function cloneOrUpdateRepo(repoName, repoUrl) { } } +// Run the query and exit if there are errors +async function graphql(query, params) { + const graphqlWithAuth = baseGraphql.defaults({ + headers: { + authorization: `token ${token}`, + }, + }) + try { + return await graphqlWithAuth(query, params) + } catch (error) { + logger.error(error.message) + return process.exit(1) + } +} + async function getRepository(owner, name) { const { repository } = await graphql( ` - query($owner: String!, $name: String!) { + query($owner: String!, $name: String!, $syncLabel: String!) { repository(owner: $owner, name: $name) { id + syncPullRequests: pullRequests(labels: [$syncLabel], first: 1) { + nodes { + id + } + } + syncLabel: label(name: $syncLabel) { + id + } } } `, { - headers: { - authorization: `token ${process.env.GITHUB_ADMIN_AUTH_TOKEN}`, - }, owner, name, + syncLabel: syncLabelName, } ) return repository } + +async function createLabel(input) { + const { createLabel } = await graphql( + ` + mutation($input: CreateLabelInput!) { + createLabel(input: $input) { + label { + id + } + } + } + `, + { + headers: { + accept: `application/vnd.github.bane-preview+json`, + }, + input, + } + ) + return createLabel.label +} + async function createPullRequest(input) { const { createPullRequest } = await graphql( ` @@ -66,7 +111,6 @@ async function createPullRequest(input) { `, { headers: { - authorization: `token ${process.env.GITHUB_BOT_AUTH_TOKEN}`, accept: `application/vnd.github.shadow-cat-preview+json`, }, input, @@ -75,6 +119,27 @@ async function createPullRequest(input) { return createPullRequest.pullRequest } +async function addLabelToPullRequest(pullRequest, label) { + await graphql( + ` + mutation($input: AddLabelsToLabelableInput!) { + addLabelsToLabelable(input: $input) { + clientMutationId + } + } + `, + { + headers: { + accept: `application/vnd.github.bane-preview+json`, + }, + input: { + labelableId: pullRequest.id, + labelIds: [label.id], + }, + } + ) +} + function conflictPRBody(conflictFiles, comparisonUrl, prNumber) { return ` Sync conflicts with the source repo. Please update the translations based on updated source content. @@ -126,7 +191,32 @@ async function syncTranslationRepo(code) { shell.exec(`git remote add source ${sourceRepoGitUrl}`) shell.exec(`git fetch source master`) - // TODO don't run the sync script if there is a current PR from the bot + const repository = await getRepository(owner, transRepoName) + + if (repository.syncPullRequests.nodes.length > 0) { + logger.info( + `There are currently open sync pull requests. Please ask the language maintainers to merge the existing PR(s) in before opening another one. Exiting...` + ) + process.exit(0) + } + + logger.info(`No currently open sync pull requests.`) + + let syncLabel + if (!repository.syncLabel) { + logger.info( + `Repository does not have a "${syncLabelName}" label. Creating one...` + ) + syncLabel = await createLabel({ + repositoryId: repository.id, + name: syncLabelName, + description: `Sync with translation source. Used by @gatsbybot to track open sync pull requests.`, + color: `fbca04`, + }) + } else { + logger.info(`Repository has an existing ${syncLabelName} label.`) + syncLabel = repository.syncLabel + } // TODO exit early if this fails // Compare these changes @@ -152,15 +242,13 @@ async function syncTranslationRepo(code) { // Remove files that are deleted by upstream // https://stackoverflow.com/a/54232519 shell.exec(`git diff --name-only --diff-filter=U | xargs git rm`) - shell.exec(`git ci --no-edit`) + shell.exec(`git commit --no-edit`) shell.exec(`git push -u origin ${syncBranch}`) - const repository = await getRepository(owner, transRepoName) - logger.info(`Creating sync pull request`) // TODO if there is already an existing PR, don't create a new one and exit early - const { number: syncPRNumber } = await createPullRequest({ + const syncPR = await createPullRequest({ repositoryId: repository.id, baseRefName: `master`, headRefName: syncBranch, @@ -168,6 +256,7 @@ async function syncTranslationRepo(code) { body: syncPRBody(), maintainerCanModify: true, }) + await addLabelToPullRequest(syncPR, syncLabel) // if we successfully publish the PR, pull again and create a new PR -- shell.exec(`git checkout master`) @@ -235,15 +324,16 @@ async function syncTranslationRepo(code) { logger.info(`Creating conflicts pull request`) // TODO assign codeowners as reviewers - await createPullRequest({ + const conflictsPR = await createPullRequest({ repositoryId: repository.id, baseRefName: `master`, headRefName: conflictBranch, title: `(sync) Resolve conflicts with ${sourceRepo} @ ${shortHash}`, - body: conflictPRBody(conflictFiles, comparisonUrl, syncPRNumber), + body: conflictPRBody(conflictFiles, comparisonUrl, syncPR.number), maintainerCanModify: true, draft: true, }) + await addLabelToPullRequest(conflictsPR, syncLabel) } const [langCode] = process.argv.slice(2) diff --git a/starters/hello-world/gatsby-config.js b/starters/hello-world/gatsby-config.js index 823925db4c737..4172a129ff405 100644 --- a/starters/hello-world/gatsby-config.js +++ b/starters/hello-world/gatsby-config.js @@ -6,4 +6,5 @@ module.exports = { /* Your site config here */ + plugins: [] } diff --git a/www/gatsby-config.js b/www/gatsby-config.js index 4bed679173af9..2e4add583a1fe 100644 --- a/www/gatsby-config.js +++ b/www/gatsby-config.js @@ -2,7 +2,7 @@ const path = require(`path`) require(`dotenv`).config({ path: `.env.${process.env.NODE_ENV}`, }) -const { langCodes } = require(`./src/utils/i18n`) +const { i18nEnabled, langCodes } = require(`./src/utils/i18n`) const GA = { identifier: `UA-93349937-5`, @@ -53,12 +53,8 @@ if (process.env.AIRTABLE_API_KEY) { }) } -// true if `env.LOCALES` has a defined list of languages -if (langCodes.length > 0) { - const naughtyFiles = [ - `docs/docs/graphql-api.md`, - `docs/docs/data-fetching.md`, - ] +if (i18nEnabled) { + const naughtyFiles = [`docs/docs/data-fetching.md`] dynamicPlugins.push( ...langCodes.map(code => ({ resolve: `gatsby-source-git`, diff --git a/www/gatsby-node.js b/www/gatsby-node.js index 84f4ee66c88a5..643f31fd51806 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -5,6 +5,7 @@ const child_process = require(`child_process`) const startersRedirects = require(`./starter-redirects.json`) const yaml = require(`js-yaml`) const redirects = yaml.load(fs.readFileSync(`./redirects.yaml`)) +const { i18nEnabled } = require(`./src/utils/i18n`) const docs = require(`./src/utils/node/docs.js`) const showcase = require(`./src/utils/node/showcase.js`) @@ -41,7 +42,7 @@ exports.onCreateNode = helpers => { exports.onPostBootstrap = () => { // Compile language strings if locales are enabled - if (!!process.env.LOCALES) { + if (i18nEnabled) { child_process.execSync(`yarn lingui:build`) } } diff --git a/www/src/components/I18nContext.js b/www/src/components/I18nContext.js index 8ba94e01e938b..67a21224916e4 100644 --- a/www/src/components/I18nContext.js +++ b/www/src/components/I18nContext.js @@ -1,5 +1,5 @@ import React from "react" -import { defaultLang } from "../utils/i18n" +import { i18nEnabled, defaultLang } from "../utils/i18n" import { I18nProvider as LinguiProvider } from "@lingui/react" // Lingui doesn't give access to the locale, so we need our own provider @@ -7,7 +7,7 @@ import { I18nProvider as LinguiProvider } from "@lingui/react" const LocaleContext = React.createContext(defaultLang) export function I18nProvider({ locale = defaultLang, children }) { - const catalog = !!process.env.LOCALES + const catalog = i18nEnabled ? require(`../data/locales/${locale}/messages.js`) : {} return ( diff --git a/www/src/components/events/__tests__/event-list.js b/www/src/components/events/__tests__/event-list.js index 9ccbdbb16c15f..9c67be82a8732 100644 --- a/www/src/components/events/__tests__/event-list.js +++ b/www/src/components/events/__tests__/event-list.js @@ -27,7 +27,8 @@ describe(``, () => { expect(getByText(`No events are scheduled right now.`)).toBeVisible() }) - it(`splits upcoming and past events`, () => { + + it.skip(`splits upcoming and past events`, () => { const { getByText } = render( `, () => { dateNowSpy.mockRestore() }) - it(`display's today's events as upcoming`, () => { + it.skip(`display's today's events as upcoming`, () => { const { getByText } = render( ) diff --git a/www/src/components/events/event-list.js b/www/src/components/events/event-list.js index 09b17c4abc7a3..104c4d0b4e8d0 100644 --- a/www/src/components/events/event-list.js +++ b/www/src/components/events/event-list.js @@ -5,9 +5,9 @@ import Event from "./event" export default function EventList({ events }) { const endOfDay = date => new Date(date).setHours(23, 59, 59, 999) - const upcoming = events.nodes.filter( - event => endOfDay(event.data.date) >= Date.now() - ) + // const upcoming = events.nodes.filter( + // event => endOfDay(event.data.date) >= Date.now() + // ) const past = events.nodes .filter(event => endOfDay(event.data.date) < Date.now()) @@ -15,14 +15,15 @@ export default function EventList({ events }) { return events.nodes.length > 0 ? ( <> -

    Upcoming Events

    + // Temporarily removing during COVID + {/*

    Upcoming Events

      {upcoming.map(event => (
    • ))} -
    + */}

    Past Events

      {past.map(event => ( diff --git a/www/src/components/navigation-mobile.js b/www/src/components/navigation-mobile.js index 5887cf22178d6..b2c6121059a70 100644 --- a/www/src/components/navigation-mobile.js +++ b/www/src/components/navigation-mobile.js @@ -75,7 +75,7 @@ const MobileNavigation = ({ i18n }) => ( ))} diff --git a/www/src/components/sidebar/section-title.js b/www/src/components/sidebar/section-title.js index 47cab4712da49..e6b533594c298 100644 --- a/www/src/components/sidebar/section-title.js +++ b/www/src/components/sidebar/section-title.js @@ -138,9 +138,11 @@ const SplitButton = withI18n()(
    ), - h2: props => , - h3: props => , - h4: props => , - h5: props => , - h6: props => , + h2: props => ( +
    + +
    + ), + h3: props => ( +
    + +
    + ), + h4: props => ( +
    + +
    + ), + h5: props => ( +
    + +
    + ), + h6: props => ( +
    + +
    + ), a: ({ href, children }) => {children}, - br: () => null, strong: props => , em: props => , p: props => { const children = elimiateNewLines(props.children) return ( - - {children} - +
    + {children} +
    ) }, ul: props =>
    {props.children}
    , @@ -310,7 +323,6 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => {
    { - log(`yo`, { recipeItem, projectRoot }) showRecipesList = false try { await createOperation({ @@ -501,11 +513,9 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => {
    )} -
    - - {state.context.stepsAsMdx[state.context.currentStep]} - -
    + + {state.context.stepsAsMdx[state.context.currentStep]} +
    @@ -513,17 +523,14 @@ module.exports = ({ recipe, graphqlPort, projectRoot }) => { ) } - const Wrapper = () => { - console.log(`rendering wrapper`) - return ( - <> - - {` `} - - - - ) - } + const Wrapper = () => ( + <> + + {` `} + + + + ) const Recipe = () => diff --git a/packages/gatsby-recipes/src/joi-to-graphql/helpers/joi-to-graphql.js b/packages/gatsby-recipes/src/joi-to-graphql/helpers/joi-to-graphql.js index 3dff3b8bc7d69..09cc626af16c1 100644 --- a/packages/gatsby-recipes/src/joi-to-graphql/helpers/joi-to-graphql.js +++ b/packages/gatsby-recipes/src/joi-to-graphql/helpers/joi-to-graphql.js @@ -6,7 +6,7 @@ const { GraphQLList, } = require(`graphql`) const TypeDictionary = require(`./type-dictionary`) -const Hoek = require(`hoek`) +const Hoek = require(`@hapi/hoek`) const internals = {} let cache = {} const lazyLoadQueue = [] diff --git a/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-schema.js b/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-schema.js index f2b6d8ceab1f8..ffbd59a9ed53b 100644 --- a/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-schema.js +++ b/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-schema.js @@ -1,7 +1,7 @@ "use strict" const { GraphQLObjectType, GraphQLSchema } = require(`graphql`) -const Hoek = require(`hoek`) +const Hoek = require(`@hapi/hoek`) const Joi = require(`@hapi/joi`) const { typeDictionary } = require(`../helpers`) const internals = {} diff --git a/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-type.js b/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-type.js index d66fa17977a9a..046dd7e8dcc7d 100644 --- a/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-type.js +++ b/packages/gatsby-recipes/src/joi-to-graphql/methods/compose-type.js @@ -1,6 +1,6 @@ "use strict" -const Hoek = require(`hoek`) +const Hoek = require(`@hapi/hoek`) const Joi = require(`@hapi/joi`) const { joiToGraphql } = require(`../helpers`) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 2249faabd5cb6..5643544ae7b65 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -13,7 +13,7 @@ module.exports = async (program: IProgram): Promise => { // Start GraphQL serve const scriptPath = require.resolve( - `gatsby-recipes/src/graphql.js` + `gatsby-recipes/dist/graphql.js` ) const subprocess = execa(`node`, [scriptPath, graphqlPort], { @@ -45,7 +45,7 @@ module.exports = async (program: IProgram): Promise => { let started = false subprocess.stdout.on(`data`, data => { if (!started) { - const runRecipe = require(`gatsby-recipes/src/index.js`) + const runRecipe = require(`gatsby-recipes/dist/index.js`) runRecipe({ recipe, graphqlPort, projectRoot: program.directory }) started = true } From 189abc55eb805dbe2bc9d8bce38c7c2a2f755dc3 Mon Sep 17 00:00:00 2001 From: John Otander Date: Wed, 15 Apr 2020 16:16:21 -0600 Subject: [PATCH 108/128] fix(recipes): Update tests and fix babel config, tweak readme (#23152) * Add codeowners to gatsby-recipes * fix(recipes): Update tests and fix babel config, tweak readme --- packages/gatsby-recipes/package.json | 7 +++++++ packages/gatsby-recipes/recipes/cypress.mdx | 2 +- packages/gatsby-recipes/src/README.md | 6 +++--- .../gatsby-theme-blog/src/components/author.js | 3 +++ packages/gatsby-recipes/src/providers/gatsby/plugin.js | 3 +++ .../src/providers/npm/__snapshots__/script.test.js.snap | 3 +-- packages/gatsby-recipes/src/todo.md | 6 ++++-- 7 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 packages/gatsby-recipes/src/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js diff --git a/packages/gatsby-recipes/package.json b/packages/gatsby-recipes/package.json index a586aac39a2e2..555e6c3710dff 100644 --- a/packages/gatsby-recipes/package.json +++ b/packages/gatsby-recipes/package.json @@ -82,6 +82,13 @@ "resolutions": { "graphql": "^14.6.0" }, + "jest": { + "testPathIgnorePatterns": [ + "/.cache/", + "dist" + ], + "testEnvironment": "node" + }, "scripts": { "build": "babel src --out-dir dist --ignore \"**/__tests__\" --extensions \".ts,.js,.tsx\"", "build:watch": "npm run build -- --watch", diff --git a/packages/gatsby-recipes/recipes/cypress.mdx b/packages/gatsby-recipes/recipes/cypress.mdx index 573d06290f4ef..eb3d31180e4ad 100644 --- a/packages/gatsby-recipes/recipes/cypress.mdx +++ b/packages/gatsby-recipes/recipes/cypress.mdx @@ -5,7 +5,7 @@ First, we'll want to install Cypress and additional dependencies. --- - + --- diff --git a/packages/gatsby-recipes/src/README.md b/packages/gatsby-recipes/src/README.md index e13c7aa151efc..201ff51dfd95d 100644 --- a/packages/gatsby-recipes/src/README.md +++ b/packages/gatsby-recipes/src/README.md @@ -81,7 +81,7 @@ Here's how you would write the `gatsby recipes emotion` recipe you just ran: Install necessary NPM packages - + @@ -145,7 +145,7 @@ Soon will support options. - **theme** the name of the theme (or plugin) which provides the file you'd like to shadow - **path** the path to the file within the theme. E.g. the example file above lives at `node_modules/gatsby-theme-blog/src/components/seo.js` -#### `` `` @@ -166,7 +166,7 @@ Soon will support options. #### `` - + ##### props diff --git a/packages/gatsby-recipes/src/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js b/packages/gatsby-recipes/src/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js new file mode 100644 index 0000000000000..65dc38d11408d --- /dev/null +++ b/packages/gatsby-recipes/src/providers/gatsby/fixtures/node_modules/gatsby-theme-blog/src/components/author.js @@ -0,0 +1,3 @@ +import React from 'react' + +export default () =>

    F. Scott Fitzgerald

    diff --git a/packages/gatsby-recipes/src/providers/gatsby/plugin.js b/packages/gatsby-recipes/src/providers/gatsby/plugin.js index 3e3271ef4e698..96ce6bff20f39 100644 --- a/packages/gatsby-recipes/src/providers/gatsby/plugin.js +++ b/packages/gatsby-recipes/src/providers/gatsby/plugin.js @@ -77,6 +77,7 @@ const addPluginToConfig = (src, pluginName) => { const { code } = babel.transform(src, { plugins: [addPlugins.plugin], + configFile: false, }) return code @@ -87,6 +88,7 @@ const getPluginsFromConfig = src => { babel.transform(src, { plugins: [getPlugins.plugin], + configFile: false, }) return getPlugins.state @@ -130,6 +132,7 @@ const destroy = async ({ root }, { name }) => { const { code } = babel.transform(configSrc, { plugins: [addPlugins.plugin], + configFile: false, }) await fs.writeFile(configPath, code) diff --git a/packages/gatsby-recipes/src/providers/npm/__snapshots__/script.test.js.snap b/packages/gatsby-recipes/src/providers/npm/__snapshots__/script.test.js.snap index d1e5323352df8..98f6b74986706 100644 --- a/packages/gatsby-recipes/src/providers/npm/__snapshots__/script.test.js.snap +++ b/packages/gatsby-recipes/src/providers/npm/__snapshots__/script.test.js.snap @@ -45,8 +45,7 @@ Object { "diff": "- Original - 1 + Modified + 1 -@@ -4,6 +4,6 @@ - }, + Object {  \\"name\\": \\"test\\",  \\"scripts\\": Object { - \\"apple\\": \\"foot\\", diff --git a/packages/gatsby-recipes/src/todo.md b/packages/gatsby-recipes/src/todo.md index 691af31d6e4ba..2cf4ca25152fe 100644 --- a/packages/gatsby-recipes/src/todo.md +++ b/packages/gatsby-recipes/src/todo.md @@ -55,11 +55,13 @@ John - [x] print pretty error when there's parsing errors of mdx files - [x] Move mdx recipes to its own package `gatsby-recipes` & pull them from unpkg - [x] add CODEOWNERS file for recipes -- [ ] give proper npm permissions to `gatsby-recipes` +- [x] give proper npm permissions to `gatsby-recipes` - [x] validate that the first step of recipes don't have any resources. They should just be for the title/description - [x] handle not finding a recipe - [x] test modifying gatsby-config.js from default starter -- [ ] getting tests passing +- [x] get tests passing +- [ ] add emotion screenshot and add to readme +- [x] make note about using gists for paths and using the "raw" link ## Near-ish future From 71daa66f1c6a78cbab9b4e61b5dc47fe2aa8f6e7 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 16:42:39 -0600 Subject: [PATCH 109/128] Make the dependency type 'development' as less repetative --- packages/gatsby-recipes/recipes/cypress.mdx | 6 +++--- packages/gatsby-recipes/recipes/eslint.mdx | 2 +- packages/gatsby-recipes/src/README.md | 2 +- packages/gatsby-recipes/src/providers/npm/package.js | 4 ++-- packages/gatsby-recipes/src/providers/npm/package.test.js | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/gatsby-recipes/recipes/cypress.mdx b/packages/gatsby-recipes/recipes/cypress.mdx index eb3d31180e4ad..9908f9cae4aa9 100644 --- a/packages/gatsby-recipes/recipes/cypress.mdx +++ b/packages/gatsby-recipes/recipes/cypress.mdx @@ -4,9 +4,9 @@ First, we'll want to install Cypress and additional dependencies. --- - - - + + + --- diff --git a/packages/gatsby-recipes/recipes/eslint.mdx b/packages/gatsby-recipes/recipes/eslint.mdx index 92f91f49066c0..ec241fa82d637 100644 --- a/packages/gatsby-recipes/recipes/eslint.mdx +++ b/packages/gatsby-recipes/recipes/eslint.mdx @@ -26,7 +26,7 @@ add additional presets, plugins, and rules. Install necessary packages - + --- diff --git a/packages/gatsby-recipes/src/README.md b/packages/gatsby-recipes/src/README.md index 201ff51dfd95d..39b93139a9433 100644 --- a/packages/gatsby-recipes/src/README.md +++ b/packages/gatsby-recipes/src/README.md @@ -153,7 +153,7 @@ Soon will support options. - **name**: name of the package(s) to install. Takes a string or an array of strings. - **version**: defaults to latest -- **dependencyType**: defaults to `dependency`. Other options include `devDependency` +- **dependencyType**: defaults to `production`. Other options include `development` #### `` diff --git a/packages/gatsby-recipes/src/providers/npm/package.js b/packages/gatsby-recipes/src/providers/npm/package.js index a4aa1785adcac..0549285634e46 100644 --- a/packages/gatsby-recipes/src/providers/npm/package.js +++ b/packages/gatsby-recipes/src/providers/npm/package.js @@ -19,14 +19,14 @@ const generateClientComands = ({ packageManager, depType, packageNames }) => { commands.push(`add`) // Needed for Yarn Workspaces and is a no-opt elsewhere. commands.push(`-W`) - if (depType === `devDependency`) { + if (depType === `development`) { commands.push(`--dev`) } return commands.concat(packageNames) } else if (packageManager === `npm`) { commands.push(`install`) - if (depType === `devDependency`) { + if (depType === `development`) { commands.push(`--save-dev`) } return commands.concat(packageNames) diff --git a/packages/gatsby-recipes/src/providers/npm/package.test.js b/packages/gatsby-recipes/src/providers/npm/package.test.js index a4581fdf18c1a..098f95d30fcf5 100644 --- a/packages/gatsby-recipes/src/providers/npm/package.test.js +++ b/packages/gatsby-recipes/src/providers/npm/package.test.js @@ -38,7 +38,7 @@ describe(`package manager client commands`, () => { const yarnDevInstall = pkg.generateClientComands({ packageManager: `yarn`, - depType: `devDependency`, + depType: `development`, packageNames: [`eslint`], }) @@ -54,7 +54,7 @@ describe(`package manager client commands`, () => { const yarnDevInstall = pkg.generateClientComands({ packageManager: `npm`, - depType: `devDependency`, + depType: `development`, packageNames: [`eslint`], }) From 3dcc4ab3f84f878c8984945a514821983eab63b4 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 16:46:57 -0600 Subject: [PATCH 110/128] update docs for release --- packages/gatsby-recipes/src/README.md | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/gatsby-recipes/src/README.md b/packages/gatsby-recipes/src/README.md index 39b93139a9433..887d1a1ac6915 100644 --- a/packages/gatsby-recipes/src/README.md +++ b/packages/gatsby-recipes/src/README.md @@ -22,13 +22,13 @@ https://github.com/gatsbyjs/gatsby/issues/22991 ## Recipe setup -Upgrade the global gatsby-cli package to use the new recipes command. +Upgrade the global gatsby-cli package to the latest with recipes. ```shell -npm install -g gatsby-cli@recipes +npm install -g gatsby-cli@latest ``` -To confirm that this worked, run `gatsby -v` in your terminal. The output should show the following: `Gatsby CLI version: 2.11.4-recipes.53`. +To confirm that this worked, run `gatsby --help` in your terminal. The output should show the recipes command. ### Running an example recipe @@ -46,24 +46,14 @@ gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world cd try-emotion ``` -1. Upgrade the version of Gatsby the project is using to a version that works with Recipes. - Note that you should use the package manager you've selected to work with Gatsby projects. - -- If it's yarn, type this command: - ```shell - yarn add gatsby@recipes - ``` -- For npm, type this command: - ```shell - npm install gatsby@recipes - ``` - 1. Now you can run the `emotion` recipe with this command: ```shell gatsby recipes emotion ``` +You can see a list of other recipes to run by running `gatsby recipes` + ## Developing Recipes ### An example MDX recipe From 6a41c60cb32cc2a669c5ad3744b91126d8531779 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 18:29:47 -0600 Subject: [PATCH 111/128] Run prettier --- packages/gatsby/src/commands/recipes.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 5643544ae7b65..80bb98513684d 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -12,9 +12,7 @@ module.exports = async (program: IProgram): Promise => { telemetry.trackCli(`RECIPE_RUN`, { name: recipe }) // Start GraphQL serve - const scriptPath = require.resolve( - `gatsby-recipes/dist/graphql.js` - ) + const scriptPath = require.resolve(`gatsby-recipes/dist/graphql.js`) const subprocess = execa(`node`, [scriptPath, graphqlPort], { cwd: program.directory, From 64d3651d3a9d5ac88365f57ecdc7216fee4eee57 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:21:10 -0600 Subject: [PATCH 112/128] Fix lint errors --- packages/gatsby/src/commands/recipes.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/commands/recipes.ts b/packages/gatsby/src/commands/recipes.ts index 80bb98513684d..0665d5455e279 100644 --- a/packages/gatsby/src/commands/recipes.ts +++ b/packages/gatsby/src/commands/recipes.ts @@ -4,6 +4,8 @@ import path from "path" import fs from "fs" import detectPort from "detect-port" +import { IProgram } from "./types" + module.exports = async (program: IProgram): Promise => { const recipe = program._[1] // We don't really care what port is used for GraphQL as it's @@ -41,7 +43,7 @@ module.exports = async (program: IProgram): Promise => { } let started = false - subprocess.stdout.on(`data`, data => { + subprocess.stdout.on(`data`, () => { if (!started) { const runRecipe = require(`gatsby-recipes/dist/index.js`) runRecipe({ recipe, graphqlPort, projectRoot: program.directory }) From 3dd8f6ca4d028946f50ba61699b458a126bc2b09 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:27:43 -0600 Subject: [PATCH 113/128] Update --- packages/gatsby-recipes/package.json | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/gatsby-recipes/package.json b/packages/gatsby-recipes/package.json index 555e6c3710dff..f8f4f6ffdfb4c 100644 --- a/packages/gatsby-recipes/package.json +++ b/packages/gatsby-recipes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-recipes", "description": "Core functionality for Gatsby Recipes", - "version": "0.0.4", + "version": "0.0.5", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -69,11 +69,7 @@ "rimraf": "^3.0.2" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-recipes-core#readme", - "keywords": [ - "gatsby", - "gatsby-recipes", - "mdx" - ], + "keywords": ["gatsby", "gatsby-recipes", "mdx"], "license": "MIT", "repository": { "type": "git", @@ -83,10 +79,7 @@ "graphql": "^14.6.0" }, "jest": { - "testPathIgnorePatterns": [ - "/.cache/", - "dist" - ], + "testPathIgnorePatterns": ["/.cache/", "dist"], "testEnvironment": "node" }, "scripts": { From e8562726b97461876dbf148baf1fd7bf23d12d08 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:29:34 -0600 Subject: [PATCH 114/128] Have gatsby depend on recipes tag --- packages/gatsby-recipes/src/todo.md | 5 +++-- packages/gatsby/package.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-recipes/src/todo.md b/packages/gatsby-recipes/src/todo.md index 2cf4ca25152fe..521b54ae0d747 100644 --- a/packages/gatsby-recipes/src/todo.md +++ b/packages/gatsby-recipes/src/todo.md @@ -46,8 +46,9 @@ Kyle - [x] move back to "press enter to run" - [x] Run gatsby-config.js changes through prettier to avoid weird diffs - [x] document ShadowFile -- [ ] Remove mention of canary release before merging -- [ ] write blog post +- [x] Remove mention of canary release before merging +- [x] write blog post +- [ ] move gatsby package to depend on released version of gatsby-recipes John diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 00c4cf609fc64..b29616b59c1f1 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -77,7 +77,7 @@ "gatsby-link": "^2.3.2", "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", - "gatsby-recipes": "^0.0.4", + "gatsby-recipes": "recipes", "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", From 33ee7cf4e29911471b4d0d6c0b04d11cd375283c Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:40:44 -0600 Subject: [PATCH 115/128] Fix site build --- .../index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md b/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md index ac2763414975a..0ea264370808c 100644 --- a/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md +++ b/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md @@ -18,7 +18,7 @@ In the last post, I covered setting up [WordPress for use with Gatsby](/blog/201 I have set up a WordPress site for you to use with the plugins mentioned in the last post as well as some dummy content to use. If you're curious, my favorite lorem generator is [Fillerama](http://fillerama.io/) which offers random content from Futurama, Monty Python, Star Wars, and more. This is where the content came from. -https://giphy.com/gifs/french-week-sDcfxFDozb3bO +https://giphy.com/gifs/movie-funny-HfJdu4HABDU3e ## Gatsby.js starter From c035e6cd8527cb19c9116ebc0d627500a5f7b5cc Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:45:44 -0600 Subject: [PATCH 116/128] Add note to theme-ui recipe that people need to remove any background css that's already added --- packages/gatsby-recipes/recipes/theme-ui.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/gatsby-recipes/recipes/theme-ui.mdx b/packages/gatsby-recipes/recipes/theme-ui.mdx index 8ad0fe1cff2cb..61d82a8fc99fe 100644 --- a/packages/gatsby-recipes/recipes/theme-ui.mdx +++ b/packages/gatsby-recipes/recipes/theme-ui.mdx @@ -39,3 +39,6 @@ You're ready to get started! - Read the docs: https://theme-ui.com - Learn about the theme specification: https://system-ui.com + +*note:* if you're running this recipe on the default starter (or any other starter with +base css), you'll need to remove the require to `layout.css` in the `components/layout.js` file. From 71049cdc7b3390f0c4eedc2b6a16e2acf2c078b7 Mon Sep 17 00:00:00 2001 From: John Otander Date: Wed, 15 Apr 2020 20:46:09 -0600 Subject: [PATCH 117/128] Fix remaining package.json inconsistency --- packages/gatsby/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index b29616b59c1f1..129c979eed291 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -15,7 +15,7 @@ "@babel/parser": "^7.8.8", "@babel/polyfill": "^7.8.7", "@babel/runtime": "^7.8.7", - "@babel/standalone": "^7.9.5", + "@babel/traversal": "^7.8.6", "@hapi/joi": "^15.1.1", "@mikaelkristiansson/domready": "^1.0.10", "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", From 1db306b2d3e9227e5bd2266375df9f266f52f32a Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:47:41 -0600 Subject: [PATCH 118/128] Remove another failing giphy --- .../index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/blog/2019-04-26-how-to-build-a-blog-with-wordpress-and-gatsby-part-1/index.md b/docs/blog/2019-04-26-how-to-build-a-blog-with-wordpress-and-gatsby-part-1/index.md index a6648fdd1f76a..d518b9bf12c87 100644 --- a/docs/blog/2019-04-26-how-to-build-a-blog-with-wordpress-and-gatsby-part-1/index.md +++ b/docs/blog/2019-04-26-how-to-build-a-blog-with-wordpress-and-gatsby-part-1/index.md @@ -102,8 +102,6 @@ When I build a Gatsby website, I like to use Netlify to handle the deployment of Netlify has the ability to create webhooks that you can grab to say, "Hey, there's new content so you need to rebuild". I built [WP Trigger Netlify Build](https://github.com/iamtimsmith/wp-trigger-netlify-build) to make this super easy to integrate with WordPress. Simply drop in the necessary information and it will tell Netlify to rebuild when changes are made. It even shows a badge with the status of the build on the dashboard. -https://giphy.com/gifs/qyX9oq2ZmsPwk - ## You have themes and plugins, now what? Not to be too anti-climactic, but there's really not a ton more to do on the WordPress side other than create content. These plugins and theme will pretty much expose everything you need to build your Gatsby.js blog. From 474ce42ebfabe363c179477b672edb9ba9dcf5b3 Mon Sep 17 00:00:00 2001 From: John Otander Date: Wed, 15 Apr 2020 20:48:17 -0600 Subject: [PATCH 119/128] Fix typo in package update --- packages/gatsby/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 129c979eed291..0087b600111ff 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -15,7 +15,7 @@ "@babel/parser": "^7.8.8", "@babel/polyfill": "^7.8.7", "@babel/runtime": "^7.8.7", - "@babel/traversal": "^7.8.6", + "@babel/traverse": "^7.8.6", "@hapi/joi": "^15.1.1", "@mikaelkristiansson/domready": "^1.0.10", "@pieh/friendly-errors-webpack-plugin": "1.7.0-chalk-2", From bc6f0e799e3721f7f94dc7e8ed2ea919ab1887b0 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 20:54:38 -0600 Subject: [PATCH 120/128] Fixing building .org --- .../index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md b/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md index 0ea264370808c..4b2498803fd85 100644 --- a/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md +++ b/docs/blog/2019-04-30-how-to-build-a-blog-with-wordpress-and-gatsby-part-2/index.md @@ -108,7 +108,7 @@ You can see there are several dependencies installed right off the bat. I'll jus Whew! That was a mouthful. -https://giphy.com/gifs/monty-python-and-the-holy-grail-eb3WAhXzlUAFi +https://giphy.com/gifs/movie-funny-HfJdu4HABDU3e ### Running the site From f83132bbe05d965caaaf01177186dbb151553dd2 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 21:02:43 -0600 Subject: [PATCH 121/128] fix another --- docs/blog/2019-08-14-strivectin-case-study/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/blog/2019-08-14-strivectin-case-study/index.md b/docs/blog/2019-08-14-strivectin-case-study/index.md index 08e8e63f7e550..ae70d4230c398 100644 --- a/docs/blog/2019-08-14-strivectin-case-study/index.md +++ b/docs/blog/2019-08-14-strivectin-case-study/index.md @@ -119,8 +119,6 @@ We confidently ship code to production many times per day. At the time of writin StriVectin’s hosting costs have gone from \$2,000/month to just a few dollars per day. The servers will be decommissioned very soon. -https://giphy.com/gifs/DC4g3SGNJpC - Feature development and maintenance is much simpler. The codebase was around 20,000 files on Magento and went down to around 300. ## Final Thoughts From 9bbf3f46099f71fd9b36fee5f56ba3f7e5df28a2 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 15 Apr 2020 21:36:08 -0600 Subject: [PATCH 122/128] Remove 404ed starter --- docs/starters.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/starters.yml b/docs/starters.yml index 613eeac9a6a62..8baff5aeeeaf9 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -4544,15 +4544,6 @@ - Based on the official Gatsby starter blog - Uses TailwindCSS - Uses PostCSS -- url: https://gatsby-starter-hello-world-with-header-and-footer.netlify.com/ - repo: https://github.com/lgnov/gatsby-starter-hello-world-with-header-and-footer - description: Gatsby starter with a responsive barebones header and footer layout - tags: - - Styling:CSS-in-JS - features: - - Navbar and footer components with only minimal CSS that make responsiveness works - - Works in any device screen - - Easily kicking off your project with writing CSS right away - url: https://gatsby-minimalist-starter.netlify.com/ repo: https://github.com/dylanesque/Gatsby-Minimalist-Starter description: A minimalist, general-purpose Gatsby starter From 37bf95e8dfca5e5f9b355a3203e31aa9c6a6e0ef Mon Sep 17 00:00:00 2001 From: John Otander Date: Thu, 16 Apr 2020 07:13:48 -0600 Subject: [PATCH 123/128] chore(recipes): Move recipes readme to gatsby-recipes root, add example images (#23168) --- packages/gatsby-recipes/README.md | 208 +++++++++++++++++++++++++- packages/gatsby-recipes/src/README.md | 205 ------------------------- packages/gatsby-recipes/src/todo.md | 5 +- yarn.lock | 59 ++++++++ 4 files changed, 268 insertions(+), 209 deletions(-) delete mode 100644 packages/gatsby-recipes/src/README.md diff --git a/packages/gatsby-recipes/README.md b/packages/gatsby-recipes/README.md index 5611801f74c41..a46cd91f10153 100644 --- a/packages/gatsby-recipes/README.md +++ b/packages/gatsby-recipes/README.md @@ -1,5 +1,209 @@ # Gatsby Recipes -Core functionality for Gatsby Recipes (alpha). +Gatsby Recipes is framework for automating common Gatsby tasks. Recipes are MDX +files which, when run by our interpretor, perform common actions like installing +NPM packages, installing plugins, creating pages, etc. -For more details see [the umbrella issue](https://github.com/gatsbyjs/gatsby/issues/22991). +It's designed to be extensible so new capabilities can be added which allow +Recipes to automate more things. + +We chose MDX to allow for a literate programming style of writing recipes which +enables us to port our dozens of recipes from +https://www.gatsbyjs.org/docs/recipes/ as well as in the future, entire +tutorials. + +[Read more about Recipes on the RFC](https://github.com/gatsbyjs/gatsby/pull/22610) + +There's an umbrella issue for testing / using Recipes during its incubation stage. + +Follow the issue for updates! + +https://github.com/gatsbyjs/gatsby/issues/22991 + +## Recipe setup + +Upgrade the global gatsby-cli package to the latest with recipes. + +```shell +npm install -g gatsby-cli@latest +``` + +To confirm that this worked, run `gatsby --help` in your terminal. The output should show the recipes command. + +### Running an example recipe + +Now you can test out recipes! Start with a recipe for installing `emotion` by following these steps: + +1. Create a new Hello World Gatsby site: + +```shell +gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world +``` + +1. Navigate into that project directory: + +```shell +cd try-emotion +``` + +1. Now you can run the `emotion` recipe with this command: + +```shell +gatsby recipes emotion +``` + +![Terminal showing "gatsby recipes emotion" output](https://user-images.githubusercontent.com/1424573/79452177-f3362f00-7fa4-11ea-903a-e28472bf95b6.png) + +You can see a list of other recipes to run by running `gatsby recipes` + +![Terminal showing recipes list](https://user-images.githubusercontent.com/1424573/79452254-14971b00-7fa5-11ea-9bdf-021c341afb10.png) + +## Developing Recipes + +### An example MDX recipe + +Here's how you would write the `gatsby recipes emotion` recipe you just ran: + +```mdx +# Setup Gatsby with Emotion + +[Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. + + + +--- + +Install necessary NPM packages + + + + + + + +--- + +Install the Emotion plugin in gatsby-config.js + + + +--- + +Sweet, now it's ready to go. + +Let's also write out an example page you can use to play +with Emotion. + + + +--- + +Read more about Emotion on the official Emotion docs site: + +https://emotion.sh/docs/introduction +``` + +### How to run recipes + +You can run built-in recipes, ones you write locally, and ones people have posted online. + +To run a local recipe, make sure to start the path to the recipe with a period like `gatsby recipes ./my-cool-recipe.mdx` + +To run a remote recipe, just paste in the path to the recipe e.g. `gatsby recipes https://example.com/sweet-recipe.mdx` + +### Recipe API + +#### `` + +Installs a Gatsby Plugin in the site's `gatsby-config.js`. + +Soon will support options. + +```jsx + +``` + +##### props + +- **name** name of the plugin + +#### `` + + + +##### props + +- **theme** the name of the theme (or plugin) which provides the file you'd like to shadow +- **path** the path to the file within the theme. E.g. the example file above lives at `node_modules/gatsby-theme-blog/src/components/seo.js` + +#### `` + +`` + +##### props + +- **name**: name of the package(s) to install. Takes a string or an array of strings. +- **version**: defaults to latest +- **dependencyType**: defaults to `production`. Other options include `development` + +#### `` + +`` + +##### props + +- **name:** name of the command +- **command** the command that's run when the script is called + +#### `` + + + +##### props + +- **path** path to the file that should be created. The path is local to the root of the Node.js project (where the package.json is) +- **content** URL to the content that should be written to the path. Eventually we'll support directly putting content here after some fixees to MDX. + +> Note that this content is stored in a [GitHub gist](https://gist.github.com/). When linking to a gist you'll want to click on the "Raw" button and copy the URL from that page. + +## FAQ / common issues + +### Q) My recipe is combining steps instead of running them seperately! + +We use the `---` break syntax from Markdown to separate steps. + +One quirk with it is for it to work, it must have an empty line above it. + +So this will work: + +```mdx +# Recipes + +--- + +a step + + +``` + +But this won't + +```mdx +# Recipes + +--- + +a step + + +``` + +### Q) What kind of recipe should I write? + +If you’d like to write a recipe, there are two great places to get an idea: + +- Think of a task that took you more time than other tasks in the last Gatsby site you built. Is there a way to automate any part of that task? +- Look at this list of recipes in the Gatsby docs. Many of these can be partially or fully automated through creating a recipe `mdx` file. https://www.gatsbyjs.org/docs/recipes/ diff --git a/packages/gatsby-recipes/src/README.md b/packages/gatsby-recipes/src/README.md deleted file mode 100644 index 887d1a1ac6915..0000000000000 --- a/packages/gatsby-recipes/src/README.md +++ /dev/null @@ -1,205 +0,0 @@ -# Gatsby Recipes - -Gatsby Recipes is framework for automating common Gatsby tasks. Recipes are MDX -files which, when run by our interpretor, perform common actions like installing -NPM packages, installing plugins, creating pages, etc. - -It's designed to be extensible so new capabilities can be added which allow -Recipes to automate more things. - -We chose MDX to allow for a literate programming style of writing recipes which -enables us to port our dozens of recipes from -https://www.gatsbyjs.org/docs/recipes/ as well as in the future, entire -tutorials. - -[Read more about Recipes on the RFC](https://github.com/gatsbyjs/gatsby/pull/22610) - -There's an umbrella issue for testing / using Recipes during its incubation stage. - -Follow the issue for updates! - -https://github.com/gatsbyjs/gatsby/issues/22991 - -## Recipe setup - -Upgrade the global gatsby-cli package to the latest with recipes. - -```shell -npm install -g gatsby-cli@latest -``` - -To confirm that this worked, run `gatsby --help` in your terminal. The output should show the recipes command. - -### Running an example recipe - -Now you can test out recipes! Start with a recipe for installing `emotion` by following these steps: - -1. Create a new Hello World Gatsby site: - -```shell -gatsby new try-emotion https://github.com/gatsbyjs/gatsby-starter-hello-world -``` - -1. Navigate into that project directory: - -```shell -cd try-emotion -``` - -1. Now you can run the `emotion` recipe with this command: - -```shell -gatsby recipes emotion -``` - -You can see a list of other recipes to run by running `gatsby recipes` - -## Developing Recipes - -### An example MDX recipe - -Here's how you would write the `gatsby recipes emotion` recipe you just ran: - -```mdx -# Setup Gatsby with Emotion - -[Emotion](https://emotion.sh/) is a powerful CSS-in-JS library that supports both inline CSS styles and styled components. You can use each styling feature individually or together in the same file. - - - ---- - -Install necessary NPM packages - - - - - - - ---- - -Install the Emotion plugin in gatsby-config.js - - - ---- - -Sweet, now it's ready to go. - -Let's also write out an example page you can use to play -with Emotion. - - - ---- - -Read more about Emotion on the official Emotion docs site: - -https://emotion.sh/docs/introduction -``` - -### How to run recipes - -You can run built-in recipes, ones you write locally, and ones people have posted online. - -To run a local recipe, make sure to start the path to the recipe with a period like `gatsby recipes ./my-cool-recipe.mdx` - -To run a remote recipe, just paste in the path to the recipe e.g. `gatsby recipes https://example.com/sweet-recipe.mdx` - -### Recipe API - -#### `` - -Installs a Gatsby Plugin in the site's `gatsby-config.js`. - -Soon will support options. - -```jsx - -``` - -##### props - -- **name** name of the plugin - -#### `` - - - -##### props - -- **theme** the name of the theme (or plugin) which provides the file you'd like to shadow -- **path** the path to the file within the theme. E.g. the example file above lives at `node_modules/gatsby-theme-blog/src/components/seo.js` - -#### `` - -`` - -##### props - -- **name**: name of the package(s) to install. Takes a string or an array of strings. -- **version**: defaults to latest -- **dependencyType**: defaults to `production`. Other options include `development` - -#### `` - -`` - -##### props - -- **name:** name of the command -- **command** the command that's run when the script is called - -#### `` - - - -##### props - -- **path** path to the file that should be created. The path is local to the root of the Node.js project (where the package.json is) -- **content** URL to the content that should be written to the path. Eventually we'll support directly putting content here after some fixees to MDX. - -> Note that this content is stored in a [GitHub gist](https://gist.github.com/). When linking to a gist you'll want to click on the "Raw" button and copy the URL from that page. - -## FAQ / common issues - -### Q) My recipe is combining steps instead of running them seperately! - -We use the `---` break syntax from Markdown to separate steps. - -One quirk with it is for it to work, it must have an empty line above it. - -So this will work: - -```mdx -# Recipes - ---- - -a step - - -``` - -But this won't - -```mdx -# Recipes - ---- - -a step - - -``` - -### Q) What kind of recipe should I write? - -If you’d like to write a recipe, there are two great places to get an idea: - -- Think of a task that took you more time than other tasks in the last Gatsby site you built. Is there a way to automate any part of that task? -- Look at this list of recipes in the Gatsby docs. Many of these can be partially or fully automated through creating a recipe `mdx` file. https://www.gatsbyjs.org/docs/recipes/ diff --git a/packages/gatsby-recipes/src/todo.md b/packages/gatsby-recipes/src/todo.md index 521b54ae0d747..98166df2492b8 100644 --- a/packages/gatsby-recipes/src/todo.md +++ b/packages/gatsby-recipes/src/todo.md @@ -61,8 +61,9 @@ John - [x] handle not finding a recipe - [x] test modifying gatsby-config.js from default starter - [x] get tests passing -- [ ] add emotion screenshot and add to readme +- [x] add emotion screenshot and add to readme - [x] make note about using gists for paths and using the "raw" link +- [x] gatsby-config.js hardening — make it work if there's no plugins set like in hello-world starter ## Near-ish future @@ -71,10 +72,10 @@ John - [ ] init.js for providers to setup clients - [ ] validate resource config - [ ] Theme UI preset selection (runs dependent install and file write) +- [ ] Failing postinstall scripts cause client to hang - [ ] Select input supported recipes - [ ] Refactor resource state to use Redux & record runs in local db - [ ] move creating the validate function to core and out of resources — they just declare their schema -- [ ] gatsby-config.js hardening — make it work if there's no plugins set like in hello-world starter - [ ] get latest version of npm packages so know if can skip running. - [ ] Make `dependencyType` in NPMPackage an enum (joi2gql doesn't handle this right now from Joi enums) - [ ] Show in plan if an update will be applied vs. create. diff --git a/yarn.lock b/yarn.lock index 70a4159f529e3..3785bcb329eb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11334,6 +11334,65 @@ gatsby-plugin-theme-ui@^0.2.53: resolved "https://registry.yarnpkg.com/gatsby-plugin-theme-ui/-/gatsby-plugin-theme-ui-0.2.53.tgz#57a52339e50ede7ef4df0b1b5593d360b56b597d" integrity sha512-AlQC+uC9lvrP3LlGsLe0f0azp7B5c49qWl4b3FDj8xbravBoqFmJT7XrNTpYYbxnCnx/K1v0QtwP8qindw0S2g== +gatsby-recipes@recipes: + version "0.0.6-recipes.14791" + resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.0.6-recipes.14791.tgz#c71682004b5873789a1156be68a0468d17c8d888" + integrity sha512-esPSrkVFQIcat7Ct6hyywAnEVvyz7gfE45oOgQPrNZISelIQz4rwAmnO6yLXyeoplGxK3XqMNEKtMlKKHWRz9w== + dependencies: + "@babel/core" "^7.8.7" + "@babel/standalone" "^7.9.5" + "@hapi/joi" "^15.1.1" + "@mdx-js/mdx" "^1.5.8" + "@mdx-js/react" "^1.5.8" + "@mdx-js/runtime" "^1.5.8" + acorn "^7.1.1" + acorn-jsx "^5.2.0" + babel-core "7.0.0-bridge.0" + babel-eslint "^10.1.0" + babel-loader "^8.0.6" + babel-plugin-add-module-exports "^0.3.3" + babel-plugin-dynamic-import-node "^2.3.0" + babel-plugin-remove-graphql-queries "2.8.1" + babel-preset-gatsby "0.3.1" + detect-port "^1.3.0" + event-source-polyfill "^1.0.12" + execa "^4.0.0" + express "^4.17.1" + express-graphql "^0.9.0" + fs-extra "^8.1.0" + gatsby-core-utils "1.1.1" + gatsby-telemetry "1.2.3" + glob "^7.1.6" + graphql "^14.6.0" + graphql-subscriptions "^1.1.0" + graphql-type-json "^0.3.1" + html-tag-names "^1.1.5" + humanize-list "^1.0.1" + import-jsx "^4.0.0" + ink-box "^1.0.0" + ink-link "^1.0.0" + ink-select-input "^3.1.2" + is-blank "^2.1.0" + is-newline "^1.0.0" + is-relative "^1.0.0" + is-string "^1.0.5" + is-url "^1.2.4" + jest-diff "^25.3.0" + mkdirp "^0.5.1" + pkg-dir "^4.2.0" + prettier "^2.0.4" + remark-stringify "^8.0.0" + single-trailing-newline "^1.0.0" + style-to-object "^0.3.0" + subscriptions-transport-ws "^0.9.16" + svg-tag-names "^2.0.1" + unist-util-remove "^2.0.0" + unist-util-visit "^2.0.2" + url-loader "^1.1.2" + urql "^1.9.5" + ws "^7.2.3" + xstate "^4.8.0" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" From 82ee21084934d890b2004898df7b39344e5dd68c Mon Sep 17 00:00:00 2001 From: John Otander Date: Thu, 16 Apr 2020 07:14:38 -0600 Subject: [PATCH 124/128] fix(recipes): Don't write out debug log unless env var is set (#23169) --- packages/gatsby-recipes/src/cli.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/gatsby-recipes/src/cli.js b/packages/gatsby-recipes/src/cli.js index ac274573c8773..931638994e41d 100644 --- a/packages/gatsby-recipes/src/cli.js +++ b/packages/gatsby-recipes/src/cli.js @@ -207,11 +207,15 @@ const components = { NPMScript: () => null, } -var logStream = fs.createWriteStream(`recipe-client.log`, { flags: `a` }) +let logStream const log = (label, textOrObj) => { - logStream.write(`[${label}]:\n`) - logStream.write(require(`util`).inspect(textOrObj)) - logStream.write(`\n`) + if (process.env.DEBUG) { + logStream = + logStream ?? fs.createWriteStream(`recipe-client.log`, { flags: `a` }) + logStream.write(`[${label}]:\n`) + logStream.write(require(`util`).inspect(textOrObj)) + logStream.write(`\n`) + } } log( From 503be2c06198eed051cbdc62d1e343a086cad192 Mon Sep 17 00:00:00 2001 From: John Otander Date: Thu, 16 Apr 2020 07:57:09 -0600 Subject: [PATCH 125/128] fix(recipes): Handle errors during package installs (#23175) --- .../src/providers/npm/package.js | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/gatsby-recipes/src/providers/npm/package.js b/packages/gatsby-recipes/src/providers/npm/package.js index 0549285634e46..e65fae602b8cb 100644 --- a/packages/gatsby-recipes/src/providers/npm/package.js +++ b/packages/gatsby-recipes/src/providers/npm/package.js @@ -59,9 +59,21 @@ const executeInstalls = async root => { packageManager: PACKAGE_MANGER, }) - await execa(PACKAGE_MANGER, commands, { - cwd: root, - }) + try { + await execa(PACKAGE_MANGER, commands, { + cwd: root, + }) + } catch (e) { + // A package failed so call the rejects + return packagesToInstall.forEach(p => { + p.outsideReject( + JSON.stringify({ + message: e.shortMessage, + installationError: `Could not install package`, + }) + ) + }) + } packagesToInstall.forEach(p => p.outsideResolve()) @@ -69,6 +81,8 @@ const executeInstalls = async root => { if (installs.length > 0) { executeInstalls() } + + return undefined } const debouncedExecute = _.debounce(executeInstalls, 25) @@ -76,11 +90,14 @@ const debouncedExecute = _.debounce(executeInstalls, 25) // Collect installs run at the same time so we can batch them. const createInstall = async ({ root }, resource) => { let outsideResolve - const promise = new Promise(resolve => { + let outsideReject + const promise = new Promise((resolve, reject) => { outsideResolve = resolve + outsideReject = reject }) installs.push({ outsideResolve, + outsideReject, resource, }) @@ -95,6 +112,7 @@ const create = async ({ root }, resource) => { } await createInstall({ root }, value) + return read({ root }, value.name) } From b4da4dc389481a76511a8bc86d0978aa07fdce25 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 16 Apr 2020 08:40:49 -0600 Subject: [PATCH 126/128] use what will be stable release version of gatsby-recipes to make lerna happy --- packages/gatsby/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 0087b600111ff..b328703745d43 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -77,7 +77,7 @@ "gatsby-link": "^2.3.2", "gatsby-plugin-page-creator": "^2.2.1", "gatsby-react-router-scroll": "^2.2.1", - "gatsby-recipes": "recipes", + "gatsby-recipes": "^0.0.5", "gatsby-telemetry": "^1.2.3", "glob": "^7.1.6", "got": "8.3.2", From 8194479b50a787a6c7f4baaf585d618a96b47c20 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 16 Apr 2020 08:59:37 -0600 Subject: [PATCH 127/128] Add raw arguments to the IProgram type --- packages/gatsby-cli/src/create-cli.js | 2 +- packages/gatsby-recipes/recipes/animated-page-transitions.mdx | 2 +- packages/gatsby-recipes/src/todo.md | 2 +- packages/gatsby/src/commands/types.ts | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-cli/src/create-cli.js b/packages/gatsby-cli/src/create-cli.js index aabc6cf230cf4..b4778731ca101 100644 --- a/packages/gatsby-cli/src/create-cli.js +++ b/packages/gatsby-cli/src/create-cli.js @@ -300,7 +300,7 @@ function buildLocalCommands(cli, isLocalSite) { getCommandHandler(`recipes`, (args, cmd) => { cmd(args) // Return an empty promise to prevent handlerP from exiting early. - // The development server shouldn't ever exit until the user directly + // The recipe command shouldn't ever exit until the user directly // kills it so this is fine. return new Promise(resolve => {}) }) diff --git a/packages/gatsby-recipes/recipes/animated-page-transitions.mdx b/packages/gatsby-recipes/recipes/animated-page-transitions.mdx index 52af88500a487..0cee28993c6ea 100644 --- a/packages/gatsby-recipes/recipes/animated-page-transitions.mdx +++ b/packages/gatsby-recipes/recipes/animated-page-transitions.mdx @@ -17,7 +17,7 @@ Add the plugin to your Gatsby config. --- -Now let's Create a few example pages to animate between: +Now let's create a few example pages to animate between: diff --git a/packages/gatsby-recipes/src/todo.md b/packages/gatsby-recipes/src/todo.md index 98166df2492b8..c5e7a70e50b20 100644 --- a/packages/gatsby-recipes/src/todo.md +++ b/packages/gatsby-recipes/src/todo.md @@ -48,7 +48,7 @@ Kyle - [x] document ShadowFile - [x] Remove mention of canary release before merging - [x] write blog post -- [ ] move gatsby package to depend on released version of gatsby-recipes +- [x] move gatsby package to depend on released version of gatsby-recipes John diff --git a/packages/gatsby/src/commands/types.ts b/packages/gatsby/src/commands/types.ts index e74117d3c3926..bef43c813c762 100644 --- a/packages/gatsby/src/commands/types.ts +++ b/packages/gatsby/src/commands/types.ts @@ -20,6 +20,7 @@ export interface IProgram { https?: boolean sitePackageJson: PackageJson ssl?: ICert + _?: any } // @deprecated From 9724da465156221c494e4823bd7043fdffd91535 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 16 Apr 2020 09:16:00 -0600 Subject: [PATCH 128/128] fix linting error --- packages/gatsby-recipes/package.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/gatsby-recipes/package.json b/packages/gatsby-recipes/package.json index f8f4f6ffdfb4c..c9c7fd6e63c09 100644 --- a/packages/gatsby-recipes/package.json +++ b/packages/gatsby-recipes/package.json @@ -68,18 +68,26 @@ "react-dom": "^16.12.0", "rimraf": "^3.0.2" }, - "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-recipes-core#readme", - "keywords": ["gatsby", "gatsby-recipes", "mdx"], + "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-recipes#readme", + "keywords": [ + "gatsby", + "gatsby-recipes", + "mdx" + ], "license": "MIT", "repository": { "type": "git", - "url": "git+https://github.com/gatsbyjs/gatsby.git" + "url": "https://github.com/gatsbyjs/gatsby.git", + "directory": "packages/gatsby-recipes" }, "resolutions": { "graphql": "^14.6.0" }, "jest": { - "testPathIgnorePatterns": ["/.cache/", "dist"], + "testPathIgnorePatterns": [ + "/.cache/", + "dist" + ], "testEnvironment": "node" }, "scripts": {

    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